/*
 * Copyright (C) 2017 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

syntax = "proto2";

package com.android.server.am;

import "frameworks/base/core/proto/android/app/activitymanager.proto";
import "frameworks/base/core/proto/android/app/enums.proto";
import "frameworks/base/core/proto/android/app/notification.proto";
import "frameworks/base/core/proto/android/app/profilerinfo.proto";
import "frameworks/base/core/proto/android/content/component_name.proto";
import "frameworks/base/core/proto/android/content/configuration.proto";
import "frameworks/base/core/proto/android/content/intent.proto";
import "frameworks/base/core/proto/android/content/package_item_info.proto";
import "frameworks/base/core/proto/android/graphics/rect.proto";
import "frameworks/base/core/proto/android/internal/processstats.proto";
import "frameworks/base/core/proto/android/os/bundle.proto";
import "frameworks/base/core/proto/android/os/looper.proto";
import "frameworks/base/core/proto/android/os/powermanager.proto";
import "frameworks/base/core/proto/android/server/intentresolver.proto";
import "frameworks/base/core/proto/android/server/windowmanagerservice.proto";
import "frameworks/base/core/proto/android/util/common.proto";
import "frameworks/base/libs/incident/proto/android/privacy.proto";

option java_multiple_files = true;

message ActivityManagerServiceProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional ActivityManagerServiceDumpActivitiesProto activities = 1;

    optional ActivityManagerServiceDumpBroadcastsProto broadcasts = 2;

    optional ActivityManagerServiceDumpServicesProto services = 3;

    optional ActivityManagerServiceDumpProcessesProto processes = 4;
}

// "dumpsys activity --proto activities"
message ActivityManagerServiceDumpActivitiesProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional ActivityStackSupervisorProto activity_stack_supervisor = 1;
}

message ActivityStackSupervisorProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional .com.android.server.wm.ConfigurationContainerProto configuration_container = 1;
    repeated ActivityDisplayProto displays = 2;
    optional KeyguardControllerProto keyguard_controller = 3;
    // TODO(b/111541062): Focused stack and resumed activity are now per-display. Topmost instances
    // can be obtained from top display and these fields can be removed.
    optional int32 focused_stack_id = 4;
    optional .com.android.server.wm.IdentifierProto resumed_activity = 5;
    // Whether or not the home activity is the recents activity. This is needed for the CTS tests to
    // know what activity types to check for when invoking splitscreen multi-window.
    optional bool is_home_recents_component = 6;
    repeated .com.android.server.wm.IdentifierProto pending_activities = 7;
}

/* represents ActivityStackSupervisor.ActivityDisplay */
message ActivityDisplayProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional .com.android.server.wm.ConfigurationContainerProto configuration_container = 1;
    optional int32 id = 2;
    repeated ActivityStackProto stacks = 3;
    optional int32 focused_stack_id = 4;
    optional .com.android.server.wm.IdentifierProto resumed_activity = 5;
    optional bool single_task_instance = 6;
}

message ActivityStackProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional .com.android.server.wm.ConfigurationContainerProto configuration_container = 1;
    optional int32 id = 2;
    repeated TaskRecordProto tasks = 3;
    optional .com.android.server.wm.IdentifierProto resumed_activity = 4;
    optional int32 display_id = 5;
    optional bool fullscreen = 6;
    optional .android.graphics.RectProto bounds = 7;
}

message TaskRecordProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional .com.android.server.wm.ConfigurationContainerProto configuration_container = 1;
    optional int32 id = 2;
    repeated ActivityRecordProto activities = 3;
    optional int32 stack_id = 4;
    optional .android.graphics.RectProto last_non_fullscreen_bounds = 5;
    optional string real_activity = 6;
    optional string orig_activity = 7;
    optional int32 activity_type = 8;
    optional int32 resize_mode = 9;
    optional bool fullscreen = 10;
    optional .android.graphics.RectProto bounds = 11;
    optional int32 min_width = 12;
    optional int32 min_height = 13;
}

message ActivityRecordProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional .com.android.server.wm.ConfigurationContainerProto configuration_container = 1;
    optional .com.android.server.wm.IdentifierProto identifier = 2;
    optional string state = 3;
    optional bool visible = 4;
    optional bool front_of_task = 5;
    optional int32 proc_id = 6;
    optional bool translucent = 7;
}

message KeyguardControllerProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional bool keyguard_showing = 1;
    repeated KeyguardOccludedProto keyguard_occluded_states= 2;
}

message KeyguardOccludedProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional int32 display_id = 1;
    optional bool keyguard_occluded = 2;
}

// "dumpsys activity --proto broadcasts"
message ActivityManagerServiceDumpBroadcastsProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    repeated ReceiverListProto receiver_list = 1;

    optional .com.android.server.IntentResolverProto receiver_resolver = 2;

    repeated BroadcastQueueProto broadcast_queue = 3;

    repeated StickyBroadcastProto sticky_broadcasts = 4;

    message MainHandler {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        optional string handler = 1;
        optional .android.os.LooperProto looper = 2;
    }
    optional MainHandler handler = 5;
}

message ReceiverListProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional ProcessRecordProto app = 1;
    optional int32 pid = 2;
    optional int32 uid = 3;
    optional int32 user = 4;
    optional BroadcastRecordProto current = 5;
    optional bool linked_to_death = 6;
    repeated BroadcastFilterProto filters = 7;
    // Used to find this ReceiverList object in IntentResolver
    optional string hex_hash = 8;
}

message ProcessRecordProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional int32 pid = 1;
    optional string process_name = 2;
    optional int32 uid = 3;
    optional int32 user_id = 4;
    optional int32 app_id = 5;
    optional int32 isolated_app_id = 6;
    optional bool persistent = 7;
    optional int32 lru_index = 8;
}

message BroadcastRecordProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional int32 user_id = 1;
    optional string intent_action = 2;
}

message BroadcastFilterProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional .android.content.IntentFilterProto intent_filter = 1;
    optional string required_permission = 2;
    // Used to find the BroadcastFilter object in IntentResolver
    optional string hex_hash = 3;
    optional int32 owning_user_id = 4;
}

message BroadcastQueueProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional string queue_name = 1;
    repeated BroadcastRecordProto parallel_broadcasts = 2;
    repeated BroadcastRecordProto ordered_broadcasts = 3;
    optional BroadcastRecordProto pending_broadcast = 4;
    repeated BroadcastRecordProto historical_broadcasts = 5;

    message BroadcastSummary {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        optional .android.content.IntentProto intent = 1;
        optional int64 enqueue_clock_time_ms = 2;
        optional int64 dispatch_clock_time_ms = 3;
        optional int64 finish_clock_time_ms = 4;
    }
    repeated BroadcastSummary historical_broadcasts_summary = 6;
}

message MemInfoDumpProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional int64 uptime_duration_ms = 1;
    optional int64 elapsed_realtime_ms = 2;

    message ProcessMemory {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        optional int32 pid = 1;
        optional string process_name = 2;

        message MemoryInfo {
            option (.android.msg_privacy).dest = DEST_AUTOMATIC;

            optional string name = 1;
            // The proportional set size for the heap.
            optional int32 total_pss_kb = 2;
            // The proportional set size that is swappable for the heap.
            optional int32 clean_pss_kb = 3;
            // The private dirty pages used by the heap.
            optional int32 shared_dirty_kb = 4;
            // The shared dirty pages used by the heap.
            optional int32 private_dirty_kb = 5;
            // The shared clean pages used by the heap.
            optional int32 shared_clean_kb = 6;
            // The private clean pages used by the heap.
            optional int32 private_clean_kb = 7;
            oneof dirty_swap {
                // The dirty the pages that have been swapped out.
                int32 dirty_swap_kb = 8;
                // The dirty the pages that have been swapped out, proportional.
                int32 dirty_swap_pss_kb = 9;
            }
        }
        message HeapInfo {
            option (.android.msg_privacy).dest = DEST_AUTOMATIC;

            optional MemoryInfo mem_info = 1;
            optional int32 heap_size_kb = 2;
            optional int32 heap_alloc_kb = 3;
            optional int32 heap_free_kb = 4;
        }
        optional HeapInfo native_heap = 3;
        optional HeapInfo dalvik_heap = 4;
        repeated MemoryInfo other_heaps = 5;
        optional MemoryInfo unknown_heap = 6;
        // Summation of native_heap, dalvik_heap, and other_heaps.
        optional HeapInfo total_heap = 7;

        repeated MemoryInfo dalvik_details = 8;

        message AppSummary {
            option (.android.msg_privacy).dest = DEST_AUTOMATIC;

            optional int32 java_heap_pss_kb = 1;
            optional int32 native_heap_pss_kb = 2;
            optional int32 code_pss_kb = 3;
            optional int32 stack_pss_kb = 4;
            optional int32 graphics_pss_kb = 5;
            optional int32 private_other_pss_kb = 6;
            optional int32 system_pss_kb = 7;

            oneof total_swap {
                int32 total_swap_pss = 8;
                int32 total_swap_kb = 9;
            }
        }
        optional AppSummary app_summary = 9;
    }
    repeated ProcessMemory native_processes = 3;

    message AppData {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        optional ProcessMemory process_memory = 1;

        message ObjectStats {
            option (.android.msg_privacy).dest = DEST_AUTOMATIC;

            optional int32 view_instance_count = 1;
            optional int32 view_root_instance_count = 2;
            optional int32 app_context_instance_count = 3;
            optional int32 activity_instance_count = 4;
            optional int32 global_asset_count = 5;
            optional int32 global_asset_manager_count = 6;
            optional int32 local_binder_object_count = 7;
            optional int32 proxy_binder_object_count = 8;
            optional int64 parcel_memory_kb = 9;
            optional int32 parcel_count = 10;
            optional int32 binder_object_death_count = 11;
            optional int32 open_ssl_socket_count = 12;
            optional int32 webview_instance_count = 13;
        }
        optional ObjectStats objects = 2;

        message SqlStats {
            option (.android.msg_privacy).dest = DEST_AUTOMATIC;

            optional int32 memory_used_kb = 1;
            optional int32 pagecache_overflow_kb = 2;
            optional int32 malloc_size_kb = 3;

            message Database {
                option (.android.msg_privacy).dest = DEST_AUTOMATIC;

                optional string name = 1;
                optional int32 page_size = 2;
                optional int32 db_size = 3;
                // Number of lookaside slots:
                // http://www.sqlite.org/c3ref/c_dbstatus_lookaside_used.html
                optional int32 lookaside_b = 4;
                // Statement cache stats: hits/misses/cachesize
                optional string cache = 5;
            }
            repeated Database databases = 4;
        }
        optional SqlStats sql = 3;

        optional string asset_allocations = 4;
        optional string unreachable_memory = 5;
    }
    repeated AppData app_processes = 4;

    message MemItem {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        optional string tag = 1;
        optional string label = 2;
        optional int32 id = 3;
        optional bool is_proc = 4;
        optional bool has_activities = 5;
        optional int64 pss_kb = 6;
        optional int64 swap_pss_kb = 7;
        repeated MemItem sub_items = 8;
    }
    repeated MemItem total_pss_by_process = 5;
    repeated MemItem total_pss_by_oom_adjustment = 6;
    repeated MemItem total_pss_by_category = 7;

    optional int64 total_ram_kb = 8;
    optional .com.android.internal.app.procstats.ProcessStatsProto.MemoryFactor status = 9;
    // Total free RAM = cached_pss_kb + cached_kernel_kb + free_kb.
    optional int64 cached_pss_kb = 10;
    optional int64 cached_kernel_kb = 11;
    optional int64 free_kb = 12;
    // Total used RAM = used_pss_kb + used_kernel_kb.
    optional int64 used_pss_kb = 13;
    optional int64 used_kernel_kb = 14;

    optional int64 lost_ram_kb = 15;

    optional int64 total_zram_kb = 16;
    optional int64 zram_physical_used_in_swap_kb = 17;
    optional int64 total_zram_swap_kb = 18;

    optional int64 ksm_sharing_kb = 19;
    optional int64 ksm_shared_kb = 20;
    optional int64 ksm_unshared_kb = 21;
    optional int64 ksm_volatile_kb = 22;

    // The approximate per-application memory class of the current device. This
    // gives developers an idea of how hard a memory limit you should impose on
    // their application to let the overall system work best. The value is in
    // megabytes; the baseline Android memory class is 16 (which happens to be the
    // Java heap limit of those devices); some devices with more memory may have
    // 24 or even higher numbers.
    optional int32 tuning_mb = 23;
    // The approximate per-application memory class of the current device when an
    // application is running with a large heap. This is the space available for
    // memory-intensive applications; most applications should not need this
    // amount of memory, and should instead stay with the tuning_mb limit. The
    // value is in megabytes. This may be the same size as tuning_mb on memory
    // constrained devices, or it may be significantly larger on devices with a
    // large amount of available RAM.
    // This is the size of the application's Dalvik heap if it has specified
    // 'android:largeHeap="true"' in its manifest.
    optional int32 tuning_large_mb = 24;

    optional int64 oom_kb = 25;

    // The maximum pss size in kb that we consider a process acceptable to restore
    // from its cached state for running in the background when RAM is low.
    optional int64 restore_limit_kb = 26;

    optional bool is_low_ram_device = 27;
    optional bool is_high_end_gfx = 28;
}

message StickyBroadcastProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional int32 user = 1;

    message StickyAction {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        // The action of the sticky Intent.
        optional string name = 1;
        repeated .android.content.IntentProto intents = 2;
    }
    repeated StickyAction actions = 2;
}

// "dumpsys activity --proto service"
message ActivityManagerServiceDumpServicesProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional ActiveServicesProto active_services = 1;
}

message ActiveServicesProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    message ServicesByUser {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        optional int32 user_id = 1;
        repeated ServiceRecordProto service_records = 2;
    }
    repeated ServicesByUser services_by_users = 1;
}

// corresponds to ActivityManagerService.GrantUri Java class
message GrantUriProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional int32 source_user_id = 1;
    optional string uri = 2 [ (.android.privacy).dest = DEST_EXPLICIT ];
}

message NeededUriGrantsProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional string target_package = 1;
    optional int32 target_uid = 2;
    optional int32 flags = 3;

    repeated GrantUriProto grants = 4;
}

message UriPermissionOwnerProto {
    option (.android.msg_privacy).dest = DEST_EXPLICIT;

    optional string owner = 1;
    repeated GrantUriProto read_perms = 2;
    repeated GrantUriProto write_perms = 3;
}

message ServiceRecordProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional string short_name = 1;
    optional bool is_running = 2; // false if the application service is null
    optional int32 pid = 3;
    optional .android.content.IntentProto intent = 4;
    optional string package_name = 5;
    optional string process_name = 6;
    optional string permission = 7;

    message AppInfo {
        option (.android.msg_privacy).dest = DEST_EXPLICIT;

        optional string base_dir = 1;
        optional string res_dir = 2;
        optional string data_dir = 3;
    }
    optional AppInfo appinfo = 8;
    optional ProcessRecordProto app = 9;
    optional ProcessRecordProto isolated_proc = 10;
    optional bool whitelist_manager = 11;
    optional bool delayed = 12;

    message Foreground {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        optional int32 id = 1;
        optional .android.app.NotificationProto notification = 2;
    }
    optional Foreground foreground = 13;

    optional .android.util.Duration create_real_time = 14;
    optional .android.util.Duration starting_bg_timeout = 15;
    optional .android.util.Duration last_activity_time = 16;
    optional .android.util.Duration restart_time = 17;
    optional bool created_from_fg = 18;

    // variables used to track states related to service start
    message Start {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        optional bool start_requested = 1;
        optional bool delayed_stop = 2;
        optional bool stop_if_killed = 3;
        optional bool call_start = 4;
        optional int32 last_start_id = 5;
    }
    optional Start start = 19;

    message ExecuteNesting {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        optional int32 execute_nesting = 1;
        optional bool execute_fg = 2;
        optional .android.util.Duration executing_start = 3;
    }
    optional ExecuteNesting execute = 20;

    optional .android.util.Duration destory_time = 21;

    message Crash {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        optional int32 restart_count = 1;
        optional .android.util.Duration restart_delay = 2;
        optional .android.util.Duration next_restart_time = 3;
        optional int32 crash_count = 4;
    }
    optional Crash crash = 22;

    message StartItem {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        optional int32 id = 1;
        optional .android.util.Duration duration = 2;
        optional int32 delivery_count = 3;
        optional int32 done_executing_count = 4;
        optional .android.content.IntentProto intent = 5;
        optional NeededUriGrantsProto needed_grants = 6;
        optional UriPermissionOwnerProto uri_permissions = 7;
    }
    repeated StartItem delivered_starts = 23;
    repeated StartItem pending_starts = 24;

    repeated IntentBindRecordProto bindings = 25;
    repeated ConnectionRecordProto connections = 26;

    // Next Tag: 27
}

message ConnectionRecordProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    // Used to find same record, e.g. AppBindRecord has the hex_hash
    optional string hex_hash = 1; // cross reference the object and avoid double logging.
    optional int32 user_id = 2;

    enum Flag {
        AUTO_CREATE = 0;
        DEBUG_UNBIND = 1;
        NOT_FG = 2;
        IMPORTANT_BG = 3;
        ABOVE_CLIENT = 4;
        ALLOW_OOM_MANAGEMENT = 5;
        WAIVE_PRIORITY = 6;
        IMPORTANT = 7;
        ADJUST_WITH_ACTIVITY = 8;
        FG_SERVICE_WHILE_AWAKE = 9;
        FG_SERVICE = 10;
        TREAT_LIKE_ACTIVITY = 11;
        VISIBLE = 12;
        SHOWING_UI = 13;
        NOT_VISIBLE = 14;
        DEAD = 15;
    }
    repeated Flag flags = 3;
    optional string service_name = 4;
}

message AppBindRecordProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional string service_name = 1;
    optional string client_proc_name = 2;
    repeated string connections = 3; // hex_hash of ConnectionRecordProto
}

message IntentBindRecordProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional .android.content.IntentProto intent = 1;
    optional string binder = 2;
    optional bool auto_create = 3; // value of BIND_AUTO_CREATE flag.
    optional bool requested = 4;
    optional bool received = 5;
    optional bool has_bound = 6;
    optional bool do_rebind = 7;

    repeated AppBindRecordProto apps = 8;
}

// TODO: "dumpsys activity --proto processes"
message ActivityManagerServiceDumpProcessesProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    repeated ProcessRecordProto procs = 1;
    repeated ProcessRecordProto isolated_procs = 2;
    repeated ActiveInstrumentationProto active_instrumentations = 3;
    repeated UidRecordProto active_uids = 4;
    repeated UidRecordProto validate_uids = 5;

    // Process LRU list (sorted by oom_adj)
    message LruProcesses {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        optional int32 size = 1;
        optional int32 non_act_at = 2;
        optional int32 non_svc_at = 3;
        repeated ProcessOomProto list = 4;
    }
    optional LruProcesses lru_procs = 6;
    repeated ProcessRecordProto pids_self_locked = 7;
    // Foreground Processes
    repeated ImportanceTokenProto important_procs = 8;
    // Persisent processes that are starting
    repeated ProcessRecordProto persistent_starting_procs = 9;
    // Processes that are being removed
    repeated ProcessRecordProto removed_procs = 10;
    // Processes that are on old until the system is ready
    repeated ProcessRecordProto on_hold_procs = 11;
    // Processes that are waiting to GC
    repeated ProcessToGcProto gc_procs = 12;
    optional AppErrorsProto app_errors = 13;
    optional UserControllerProto user_controller = 14;
    optional ProcessRecordProto home_proc = 15;
    optional ProcessRecordProto previous_proc = 16;
    optional int64 previous_proc_visible_time_ms = 17;
    optional ProcessRecordProto heavy_weight_proc = 18;
    optional .android.content.ConfigurationProto global_configuration = 19;
    // ActivityStackSupervisorProto dumps these values as well, still here?
    // repeated ActivityDisplayProto displays = 20;

    optional bool config_will_change = 21;

    message ScreenCompatPackage {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        optional string package = 1;
        optional int32 mode = 2;
    }
    repeated ScreenCompatPackage screen_compat_packages = 22;

    message UidObserverRegistrationProto {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        optional int32 uid = 1;
        optional string package = 2;
        repeated .android.app.UidObserverFlag flags = 3;
        optional int32 cut_point = 4; // only available when UID_OBSERVER_PROCSTATE is on

        message ProcState {
            option (.android.msg_privacy).dest = DEST_AUTOMATIC;

            optional int32 uid = 1;
            optional int32 state = 2;
        }
        repeated ProcState last_proc_states = 5;
    }
    repeated UidObserverRegistrationProto uid_observers = 23;
    repeated int32 device_idle_whitelist = 24;
    repeated int32 device_idle_temp_whitelist = 25;

    message PendingTempWhitelist {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        optional int32 target_uid = 1;
        optional int64 duration_ms = 2;
        optional string tag = 3;
    }
    repeated PendingTempWhitelist pending_temp_whitelist = 26;

    message SleepStatus {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        optional .android.os.PowerManagerInternalProto.Wakefulness wakefulness = 1;
        repeated string sleep_tokens = 2 [ (.android.privacy).dest = DEST_EXPLICIT ];
        optional bool sleeping = 3;
        optional bool shutting_down = 4;
        optional bool test_pss_mode = 5;
    }
    optional SleepStatus sleep_status = 27;

    message Voice {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        optional string session = 1;
        optional .android.os.PowerManagerProto.WakeLock wakelock = 2;
    }
    optional Voice running_voice = 28;

    optional VrControllerProto vr_controller = 29;

    message DebugApp {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        optional string debug_app = 1;
        optional string orig_debug_app = 2;
        optional bool debug_transient = 3;
        optional bool orig_wait_for_debugger = 4;
    }
    optional DebugApp debug = 30;
    optional AppTimeTrackerProto current_tracker = 31;

    message MemWatchProcess {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        message Process {
            option (.android.msg_privacy).dest = DEST_AUTOMATIC;

            optional string name = 1;

            message MemStats {
                option (.android.msg_privacy).dest = DEST_AUTOMATIC;

                optional int32 uid = 1;
                optional string size = 2;
                optional string report_to = 3;
            }
            repeated MemStats mem_stats = 2;
        }
        repeated Process procs = 1;

        message Dump {
            option (.android.msg_privacy).dest = DEST_AUTOMATIC;

            optional string proc_name = 1;
            optional string file = 2 [ (.android.privacy).dest = DEST_EXPLICIT ];
            optional int32 pid = 3;
            optional int32 uid = 4;
        }
        optional Dump dump = 2;
    }
    optional MemWatchProcess mem_watch_processes = 32;
    optional string track_allocation_app = 33;

    message Profile {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        optional string app_name = 1;
        optional ProcessRecordProto proc = 2;
        optional .android.app.ProfilerInfoProto info = 3;
        optional int32 type = 4;
    }
    optional Profile profile = 34;
    optional string native_debugging_app = 35;
    optional bool always_finish_activities = 36;

    message Controller {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        optional string controller = 1;
        optional bool is_a_monkey = 2;
    }
    optional Controller controller = 37;

    optional int32 total_persistent_procs = 38;
    optional bool processes_ready = 39;
    optional bool system_ready = 40;
    optional bool booted = 41;
    optional int32 factory_test = 42;
    optional bool booting = 43;
    optional bool call_finish_booting = 44;
    optional bool boot_animation_complete = 45;
    optional int64 last_power_check_uptime_ms = 46;
    optional .android.os.PowerManagerProto.WakeLock going_to_sleep = 47;
    optional .android.os.PowerManagerProto.WakeLock launching_activity = 48;
    optional int32 adj_seq = 49;
    optional int32 lru_seq = 50;
    optional int32 num_non_cached_procs = 51;
    optional int32 num_cached_hidden_procs = 52;
    optional int32 num_service_procs = 53;
    optional int32 new_num_service_procs = 54;
    optional bool allow_lower_mem_level = 55;
    optional int32 last_memory_level = 56;
    optional int32 last_num_processes = 57;
    optional .android.util.Duration last_idle_time = 58;
    optional int64 low_ram_since_last_idle_ms = 59;
}

message ActiveInstrumentationProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional .android.content.ComponentNameProto class = 1;
    optional bool finished = 2;
    repeated ProcessRecordProto running_processes = 3;
    repeated string target_processes = 4;
    optional .android.content.pm.ApplicationInfoProto target_info = 5;
    optional string profile_file = 6;
    optional string watcher = 7;
    optional string ui_automation_connection = 8;
    // Arguments as given to the ActiveInstrumentation object in Bundle
    // toString format.
    reserved 9; // arguments (in String format).
    // Arguments as given to the ActiveInstrumentation object.
    optional .android.os.BundleProto arguments = 10;
}

// Proto definition of com.android.server.am.UidRecord.java
message UidRecordProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional int32 uid = 1;
    optional .android.app.ProcessStateEnum current = 2;
    optional bool ephemeral = 3;
    optional bool fg_services = 4;
    optional bool whilelist = 5;
    optional .android.util.Duration last_background_time = 6;
    optional bool idle = 7;

    enum Change {
        CHANGE_GONE = 0;
        CHANGE_IDLE = 1;
        CHANGE_ACTIVE = 2;
        CHANGE_CACHED = 3;
        CHANGE_UNCACHED = 4;
    }
    repeated Change last_reported_changes = 8;
    optional int32 num_procs = 9;

    message ProcStateSequence {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        optional int64 cururent = 1;
        optional int64 last_network_updated = 2;
        optional int64 last_dispatched = 3;
    }
    optional ProcStateSequence network_state_update = 10;

    // Next Tag: 11
}

// proto of class ImportanceToken in ActivityManagerService
message ImportanceTokenProto {
    option (.android.msg_privacy).dest = DEST_EXPLICIT;

    optional int32 pid = 1;
    optional string token = 2;
    optional string reason = 3;
}

// proto of class VrController.java
message VrControllerProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    enum VrMode {
        FLAG_NON_VR_MODE = 0;
        FLAG_VR_MODE = 1;
        FLAG_PERSISTENT_VR_MODE = 2;
    }
    repeated VrMode vr_mode = 1;
    optional int32 render_thread_id = 2;
}

message ProcessOomProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional bool persistent = 1;
    optional int32 num = 2;
    optional string oom_adj = 3;

    // Activity manager's version of Process enum, see ProcessList.java
    enum SchedGroup {
        SCHED_GROUP_UNKNOWN = -1;
        SCHED_GROUP_BACKGROUND = 0;
        SCHED_GROUP_DEFAULT = 1;
        SCHED_GROUP_TOP_APP = 2;
        SCHED_GROUP_TOP_APP_BOUND = 3;
    }
    optional SchedGroup sched_group = 4 [ default = SCHED_GROUP_UNKNOWN];

    oneof Foreground {
        bool activities = 5;
        bool services = 6;
    }

    optional .android.app.ProcessStateEnum state = 7;
    optional int32 trim_memory_level = 8;
    optional ProcessRecordProto proc = 9;
    optional string adj_type = 10;

    oneof AdjTarget {
        .android.content.ComponentNameProto adj_target_component_name = 11;
        string adj_target_object = 12;
    }

    oneof AdjSource {
        ProcessRecordProto adj_source_proc = 13;
        string adj_source_object = 14;
    }

    message Detail {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        optional int32 max_adj = 1;
        optional int32 cur_raw_adj = 2;
        optional int32 set_raw_adj = 3;
        optional int32 cur_adj = 4;
        optional int32 set_adj = 5;
        optional .android.app.ProcessStateEnum current_state = 7;
        optional .android.app.ProcessStateEnum set_state = 8;
        optional string last_pss = 9;
        optional string last_swap_pss = 10;
        optional string last_cached_pss = 11;
        optional bool cached = 12;
        optional bool empty = 13;
        optional bool has_above_client = 14;

        // only make sense if process is a service
        message CpuRunTime {
            option (.android.msg_privacy).dest = DEST_AUTOMATIC;

            optional int64 over_ms = 1;
            optional int64 used_ms = 2;
            optional float ultilization = 3; // ratio of cpu time usage
        }
        optional CpuRunTime service_run_time = 15;
    }
    optional Detail detail = 15;
}

message ProcessToGcProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional ProcessRecordProto proc = 1;
    optional bool report_low_memory = 2;
    optional int64 now_uptime_ms = 3;
    optional int64 last_gced_ms = 4;
    optional int64 last_low_memory_ms = 5;
}

// sync with com.android.server.am.AppErrors.java
message AppErrorsProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional int64 now_uptime_ms = 1;

    message ProcessCrashTime {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        optional string process_name = 1;

        message Entry {
            option (.android.msg_privacy).dest = DEST_AUTOMATIC;

            optional int32 uid = 1;
            optional int64 last_crashed_at_ms = 2;
        }
        repeated Entry entries = 2;
    }
    repeated ProcessCrashTime process_crash_times = 2;

    message BadProcess {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        optional string process_name = 1;

        message Entry {
            option (.android.msg_privacy).dest = DEST_AUTOMATIC;

            optional int32 uid = 1;
            optional int64 crashed_at_ms = 2;
            optional string short_msg = 3;
            optional string long_msg = 4 [ (.android.privacy).dest = DEST_EXPLICIT ];
            optional string stack = 5 [ (.android.privacy).dest = DEST_EXPLICIT ];
        }
        repeated Entry entries = 2;
    }
    repeated BadProcess bad_processes = 3;
}

// sync with com.android.server.am.UserState.java
message UserStateProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    enum State {
        STATE_BOOTING = 0;
        STATE_RUNNING_LOCKED = 1;
        STATE_RUNNING_UNLOCKING = 2;
        STATE_RUNNING_UNLOCKED = 3;
        STATE_STOPPING = 4;
        STATE_SHUTDOWN = 5;
    }
    optional State state = 1;
    optional bool switching = 2;
}

// sync with com.android.server.am.UserController.java
message UserControllerProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    message User {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        optional int32 id = 1;
        optional UserStateProto state = 2;
    }
    repeated User started_users = 1;
    repeated int32 started_user_array = 2;
    repeated int32 user_lru = 3;

    message UserProfile {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        optional int32 user = 1;
        optional int32 profile = 2;
    }
    repeated UserProfile user_profile_group_ids = 4;
}

// sync with com.android.server.am.AppTimeTracker.java
message AppTimeTrackerProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional string receiver = 1;
    optional int64 total_duration_ms = 2;

    message PackageTime {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        optional string package = 1;
        optional int64 duration_ms = 2;
    }
    repeated PackageTime package_times = 3;

    optional .android.util.Duration started_time = 4;
    optional string started_package = 5;
}
