diff options
-rw-r--r-- | cmds/statsd/src/atoms.proto | 9 | ||||
-rw-r--r-- | core/java/android/app/ActivityManager.java | 60 | ||||
-rw-r--r-- | core/proto/android/app/activitymanager.proto | 59 | ||||
-rw-r--r-- | core/proto/android/app/enums.proto | 87 | ||||
-rw-r--r-- | core/proto/android/server/activitymanagerservice.proto | 9 | ||||
-rw-r--r-- | core/proto/android/server/powermanagerservice.proto | 5 | ||||
-rw-r--r-- | services/core/java/com/android/server/am/BatteryStatsService.java | 5 | ||||
-rw-r--r-- | services/core/java/com/android/server/am/ProcessList.java | 46 | ||||
-rw-r--r-- | services/core/java/com/android/server/power/PowerManagerService.java | 8 |
9 files changed, 183 insertions, 105 deletions
diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto index 77b156f81e1a..c9902965ced0 100644 --- a/cmds/statsd/src/atoms.proto +++ b/cmds/statsd/src/atoms.proto @@ -21,7 +21,7 @@ package android.os.statsd; option java_package = "com.android.os"; option java_outer_classname = "AtomsProto"; -import "frameworks/base/core/proto/android/app/activitymanager.proto"; +import "frameworks/base/core/proto/android/app/enums.proto"; /** * The master atom class. This message defines all of the available @@ -44,7 +44,7 @@ message Atom { BleUnoptimizedScanStateChanged ble_unoptimized_scan_state_changed = 3; BleScanResultReceived ble_scan_result_received = 4; SensorStateChanged sensor_state_changed = 5; - GpsScanStateChanged gps_scan_state_changed = 6; // TODO: untested + GpsScanStateChanged gps_scan_state_changed = 6; SyncStateChanged sync_state_changed = 7; ScheduledJobStateChanged scheduled_job_state_changed = 8; ScreenBrightnessChanged screen_brightness_changed = 9; @@ -185,9 +185,8 @@ message ScreenStateChanged { message UidProcessStateChanged { optional int32 uid = 1; // TODO: should be a string tagged w/ uid annotation - // The state. - // TODO: Use the real (mapped) process states. - optional android.app.ProcessState state = 2; + // The state, from frameworks/base/core/proto/android/app/enums.proto. + optional android.app.ProcessStateEnum state = 2; } /** diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index fcf8bd7b6699..4d5ac6f45703 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -575,18 +575,68 @@ public class ActivityManager { /** @hide Process does not exist. */ public static final int PROCESS_STATE_NONEXISTENT = 19; - // NOTE: If PROCESS_STATEs are added or changed, then new fields must be added - // to frameworks/base/core/proto/android/app/activitymanager.proto and the following method must + // NOTE: If PROCESS_STATEs are added, then new fields must be added + // to frameworks/base/core/proto/android/app/enums.proto and the following method must // be updated to correctly map between them. + // However, if the current ActivityManager values are merely modified, no update should be made + // to enums.proto, to which values can only be added but never modified. Note that the proto + // versions do NOT have the ordering restrictions of the ActivityManager process state. /** - * Maps ActivityManager.PROCESS_STATE_ values to ProcessState enum. + * Maps ActivityManager.PROCESS_STATE_ values to enums.proto ProcessStateEnum value. * * @param amInt a process state of the form ActivityManager.PROCESS_STATE_ - * @return the value of the corresponding ActivityManager's ProcessState enum. + * @return the value of the corresponding enums.proto ProcessStateEnum value. * @hide */ public static final int processStateAmToProto(int amInt) { - return amInt * 100; + switch (amInt) { + case PROCESS_STATE_UNKNOWN: + return AppProtoEnums.PROCESS_STATE_UNKNOWN; + case PROCESS_STATE_PERSISTENT: + return AppProtoEnums.PROCESS_STATE_PERSISTENT; + case PROCESS_STATE_PERSISTENT_UI: + return AppProtoEnums.PROCESS_STATE_PERSISTENT_UI; + case PROCESS_STATE_TOP: + return AppProtoEnums.PROCESS_STATE_TOP; + case PROCESS_STATE_FOREGROUND_SERVICE: + return AppProtoEnums.PROCESS_STATE_FOREGROUND_SERVICE; + case PROCESS_STATE_BOUND_FOREGROUND_SERVICE: + return AppProtoEnums.PROCESS_STATE_BOUND_FOREGROUND_SERVICE; + case PROCESS_STATE_IMPORTANT_FOREGROUND: + return AppProtoEnums.PROCESS_STATE_IMPORTANT_FOREGROUND; + case PROCESS_STATE_IMPORTANT_BACKGROUND: + return AppProtoEnums.PROCESS_STATE_IMPORTANT_BACKGROUND; + case PROCESS_STATE_TRANSIENT_BACKGROUND: + return AppProtoEnums.PROCESS_STATE_TRANSIENT_BACKGROUND; + case PROCESS_STATE_BACKUP: + return AppProtoEnums.PROCESS_STATE_BACKUP; + case PROCESS_STATE_SERVICE: + return AppProtoEnums.PROCESS_STATE_SERVICE; + case PROCESS_STATE_RECEIVER: + return AppProtoEnums.PROCESS_STATE_RECEIVER; + case PROCESS_STATE_TOP_SLEEPING: + return AppProtoEnums.PROCESS_STATE_TOP_SLEEPING; + case PROCESS_STATE_HEAVY_WEIGHT: + return AppProtoEnums.PROCESS_STATE_HEAVY_WEIGHT; + case PROCESS_STATE_HOME: + return AppProtoEnums.PROCESS_STATE_HOME; + case PROCESS_STATE_LAST_ACTIVITY: + return AppProtoEnums.PROCESS_STATE_LAST_ACTIVITY; + case PROCESS_STATE_CACHED_ACTIVITY: + return AppProtoEnums.PROCESS_STATE_CACHED_ACTIVITY; + case PROCESS_STATE_CACHED_ACTIVITY_CLIENT: + return AppProtoEnums.PROCESS_STATE_CACHED_ACTIVITY_CLIENT; + case PROCESS_STATE_CACHED_RECENT: + return AppProtoEnums.PROCESS_STATE_CACHED_RECENT; + case PROCESS_STATE_CACHED_EMPTY: + return AppProtoEnums.PROCESS_STATE_CACHED_EMPTY; + case PROCESS_STATE_NONEXISTENT: + return AppProtoEnums.PROCESS_STATE_NONEXISTENT; + default: + // ActivityManager process state (amInt) + // could not be mapped to an AppProtoEnums ProcessState state. + return AppProtoEnums.PROCESS_STATE_UNKNOWN_TO_PROTO; + } } /** @hide The lowest process state number */ diff --git a/core/proto/android/app/activitymanager.proto b/core/proto/android/app/activitymanager.proto index 03f820435151..4756c13d71db 100644 --- a/core/proto/android/app/activitymanager.proto +++ b/core/proto/android/app/activitymanager.proto @@ -21,65 +21,6 @@ package android.app; option java_multiple_files = true; option java_outer_classname = "ActivityManagerProto"; -// ActivityManager.java PROCESS_STATEs -enum ProcessState { - // Order matters for process states, so values have been spaced to provide - // room for future additions. - - // Not a real process state. - PROCESS_STATE_UNKNOWN = -100; - // Process is a persistent system process. - PROCESS_STATE_PERSISTENT = 0; - // Process is a persistent system process and is doing UI. - PROCESS_STATE_PERSISTENT_UI = 100; - // Process is hosting the current top activities. Note that this covers - // all activities that are visible to the user. - PROCESS_STATE_TOP = 200; - // Process is hosting a foreground service due to a system binding. - PROCESS_STATE_BOUND_FOREGROUND_SERVICE = 300; - // Process is hosting a foreground service. - PROCESS_STATE_FOREGROUND_SERVICE = 400; - // Process is important to the user, and something they are aware of. - PROCESS_STATE_IMPORTANT_FOREGROUND = 500; - // Process is important to the user, but not something they are aware of. - PROCESS_STATE_IMPORTANT_BACKGROUND = 600; - // Process is in the background transient so we will try to keep running. - PROCESS_STATE_TRANSIENT_BACKGROUND = 700; - // Process is in the background running a backup/restore operation. - PROCESS_STATE_BACKUP = 800; - // Process is in the background running a service. Unlike oom_adj, this - // level is used for both the normal running in background state and the - // executing operations state. - PROCESS_STATE_SERVICE = 900; - // Process is in the background running a receiver. Note that from the - // perspective of oom_adj, receivers run at a higher foreground level, but - // for our prioritization here that is not necessary and putting them - // below services means many fewer changes in some process states as they - // receive broadcasts. - PROCESS_STATE_RECEIVER = 1000; - // Same as PROCESS_STATE_TOP but while device is sleeping. - PROCESS_STATE_TOP_SLEEPING = 1100; - // Process is in the background, but it can't restore its state so we want - // to try to avoid killing it. - PROCESS_STATE_HEAVY_WEIGHT = 1200; - // Process is in the background but hosts the home activity. - PROCESS_STATE_HOME = 1300; - // Process is in the background but hosts the last shown activity. - PROCESS_STATE_LAST_ACTIVITY = 1400; - // Process is being cached for later use and contains activities. - PROCESS_STATE_CACHED_ACTIVITY = 1500; - // Process is being cached for later use and is a client of another cached - // process that contains activities. - PROCESS_STATE_CACHED_ACTIVITY_CLIENT = 1600; - // Process is being cached for later use and has an activity that corresponds - // to an existing recent task. - PROCESS_STATE_CACHED_RECENT = 1700; - // Process is being cached for later use and is empty. - PROCESS_STATE_CACHED_EMPTY = 1800; - // Process does not exist. - PROCESS_STATE_NONEXISTENT = 1900; -} - // ActivityManager.java UID_OBSERVERs flags enum UidObserverFlag { // report changes in process state, original value is 1 << 0 diff --git a/core/proto/android/app/enums.proto b/core/proto/android/app/enums.proto new file mode 100644 index 000000000000..2de2574ad401 --- /dev/null +++ b/core/proto/android/app/enums.proto @@ -0,0 +1,87 @@ +/* + * 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 android.app; + +option java_outer_classname = "AppProtoEnums"; +option java_multiple_files = true; + +// ActivityManager.java PROCESS_STATEs +enum ProcessStateEnum { + // Unlike the ActivityManager PROCESS_STATE values, the ordering and numerical values + // here are completely fixed and arbitrary. Order is irrelevant. + // No attempt need be made to keep them in sync. + // The values here must not be modified. Any new process states can be appended to the end. + + // Process state that is unknown to this proto file (i.e. is not mapped + // by ActivityManager.processStateAmToProto()). Can only happen if there's a bug in the mapping. + PROCESS_STATE_UNKNOWN_TO_PROTO = 998; + // Not a real process state. + PROCESS_STATE_UNKNOWN = 999; + // Process is a persistent system process. + PROCESS_STATE_PERSISTENT = 1000; + // Process is a persistent system process and is doing UI. + PROCESS_STATE_PERSISTENT_UI = 1001; + // Process is hosting the current top activities. Note that this covers + // all activities that are visible to the user. + PROCESS_STATE_TOP = 1002; + // Process is hosting a foreground service. + PROCESS_STATE_FOREGROUND_SERVICE = 1003; + // Process is hosting a foreground service due to a system binding. + PROCESS_STATE_BOUND_FOREGROUND_SERVICE = 1004; + // Process is important to the user, and something they are aware of. + PROCESS_STATE_IMPORTANT_FOREGROUND = 1005; + // Process is important to the user, but not something they are aware of. + PROCESS_STATE_IMPORTANT_BACKGROUND = 1006; + // Process is in the background transient so we will try to keep running. + PROCESS_STATE_TRANSIENT_BACKGROUND = 1007; + // Process is in the background running a backup/restore operation. + PROCESS_STATE_BACKUP = 1008; + // Process is in the background running a service. Unlike oom_adj, this + // level is used for both the normal running in background state and the + // executing operations state. + PROCESS_STATE_SERVICE = 1009; + // Process is in the background running a receiver. Note that from the + // perspective of oom_adj, receivers run at a higher foreground level, but + // for our prioritization here that is not necessary and putting them + // below services means many fewer changes in some process states as they + // receive broadcasts. + PROCESS_STATE_RECEIVER = 1010; + // Same as PROCESS_STATE_TOP but while device is sleeping. + PROCESS_STATE_TOP_SLEEPING = 1011; + // Process is in the background, but it can't restore its state so we want + // to try to avoid killing it. + PROCESS_STATE_HEAVY_WEIGHT = 1012; + // Process is in the background but hosts the home activity. + PROCESS_STATE_HOME = 1013; + // Process is in the background but hosts the last shown activity. + PROCESS_STATE_LAST_ACTIVITY = 1014; + // Process is being cached for later use and contains activities. + PROCESS_STATE_CACHED_ACTIVITY = 1015; + // Process is being cached for later use and is a client of another cached + // process that contains activities. + PROCESS_STATE_CACHED_ACTIVITY_CLIENT = 1016; + // Process is being cached for later use and has an activity that corresponds + // to an existing recent task. + PROCESS_STATE_CACHED_RECENT = 1017; + // Process is being cached for later use and is empty. + PROCESS_STATE_CACHED_EMPTY = 1018; + // Process does not exist. + PROCESS_STATE_NONEXISTENT = 1019; +} + diff --git a/core/proto/android/server/activitymanagerservice.proto b/core/proto/android/server/activitymanagerservice.proto index 39c5ec713c13..55e6a74804ee 100644 --- a/core/proto/android/server/activitymanagerservice.proto +++ b/core/proto/android/server/activitymanagerservice.proto @@ -19,6 +19,7 @@ syntax = "proto2"; package com.android.server.am.proto; 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"; @@ -797,7 +798,7 @@ message UidRecordProto { optional string hex_hash = 1; optional int32 uid = 2; - optional .android.app.ProcessState current = 3; + optional .android.app.ProcessStateEnum current = 3; optional bool ephemeral = 4; optional bool fg_services = 5; optional bool whilelist = 6; @@ -855,7 +856,7 @@ message ProcessOomProto { bool services = 6; } - optional .android.app.ProcessState state = 7; + optional .android.app.ProcessStateEnum state = 7; optional int32 trim_memory_level = 8; optional ProcessRecordProto proc = 9; optional string adj_type = 10; @@ -878,8 +879,8 @@ message ProcessOomProto { optional int32 set_raw_adj = 3; optional int32 cur_adj = 4; optional int32 set_adj = 5; - optional .android.app.ProcessState current_state = 7; - optional .android.app.ProcessState set_state = 8; + 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; diff --git a/core/proto/android/server/powermanagerservice.proto b/core/proto/android/server/powermanagerservice.proto index f3ebd4144b89..babbef06fa8d 100644 --- a/core/proto/android/server/powermanagerservice.proto +++ b/core/proto/android/server/powermanagerservice.proto @@ -19,7 +19,7 @@ package com.android.server.power; option java_multiple_files = true; -import "frameworks/base/core/proto/android/app/activitymanager.proto"; +import "frameworks/base/core/proto/android/app/enums.proto"; import "frameworks/base/core/proto/android/content/intent.proto"; import "frameworks/base/core/proto/android/os/batterymanager.proto"; import "frameworks/base/core/proto/android/os/looper.proto"; @@ -67,8 +67,7 @@ message PowerManagerServiceDumpProto { optional string uid_string = 2; optional bool is_active = 3; optional int32 num_wake_locks = 4; - optional bool is_process_state_unknown = 5; - optional .android.app.ProcessState process_state = 6; + optional .android.app.ProcessStateEnum process_state = 5; } optional ConstantsProto constants = 1; diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java index 6b380f1101eb..0d96468761be 100644 --- a/services/core/java/com/android/server/am/BatteryStatsService.java +++ b/services/core/java/com/android/server/am/BatteryStatsService.java @@ -16,6 +16,7 @@ package com.android.server.am; +import android.app.ActivityManager; import android.bluetooth.BluetoothActivityEnergyInfo; import android.content.Context; import android.content.pm.ApplicationInfo; @@ -353,10 +354,12 @@ public final class BatteryStatsService extends IBatteryStats.Stub } } + /** @param state Process state from ActivityManager.java. */ void noteUidProcessState(int uid, int state) { synchronized (mStats) { // TODO: remove this once we figure out properly where and how - StatsLog.write(StatsLog.UID_PROCESS_STATE_CHANGED, uid, state); + StatsLog.write(StatsLog.UID_PROCESS_STATE_CHANGED, uid, + ActivityManager.processStateAmToProto(state)); mStats.noteUidProcessStateLocked(uid, state); } diff --git a/services/core/java/com/android/server/am/ProcessList.java b/services/core/java/com/android/server/am/ProcessList.java index 29bfebe631c7..a50d069f4fef 100644 --- a/services/core/java/com/android/server/am/ProcessList.java +++ b/services/core/java/com/android/server/am/ProcessList.java @@ -24,7 +24,7 @@ import java.io.OutputStream; import java.nio.ByteBuffer; import android.app.ActivityManager; -import android.app.ActivityManagerProto; +import android.app.AppProtoEnums; import android.os.Build; import android.os.SystemClock; import com.android.internal.util.MemInfoReader; @@ -420,47 +420,49 @@ public final class ProcessList { public static int makeProcStateProtoEnum(int curProcState) { switch (curProcState) { case ActivityManager.PROCESS_STATE_PERSISTENT: - return ActivityManagerProto.PROCESS_STATE_PERSISTENT; + return AppProtoEnums.PROCESS_STATE_PERSISTENT; case ActivityManager.PROCESS_STATE_PERSISTENT_UI: - return ActivityManagerProto.PROCESS_STATE_PERSISTENT_UI; + return AppProtoEnums.PROCESS_STATE_PERSISTENT_UI; case ActivityManager.PROCESS_STATE_TOP: - return ActivityManagerProto.PROCESS_STATE_TOP; + return AppProtoEnums.PROCESS_STATE_TOP; case ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE: - return ActivityManagerProto.PROCESS_STATE_BOUND_FOREGROUND_SERVICE; + return AppProtoEnums.PROCESS_STATE_BOUND_FOREGROUND_SERVICE; case ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE: - return ActivityManagerProto.PROCESS_STATE_FOREGROUND_SERVICE; + return AppProtoEnums.PROCESS_STATE_FOREGROUND_SERVICE; case ActivityManager.PROCESS_STATE_TOP_SLEEPING: - return ActivityManagerProto.PROCESS_STATE_TOP_SLEEPING; + return AppProtoEnums.PROCESS_STATE_TOP_SLEEPING; case ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND: - return ActivityManagerProto.PROCESS_STATE_IMPORTANT_FOREGROUND; + return AppProtoEnums.PROCESS_STATE_IMPORTANT_FOREGROUND; case ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND: - return ActivityManagerProto.PROCESS_STATE_IMPORTANT_BACKGROUND; + return AppProtoEnums.PROCESS_STATE_IMPORTANT_BACKGROUND; case ActivityManager.PROCESS_STATE_TRANSIENT_BACKGROUND: - return ActivityManagerProto.PROCESS_STATE_TRANSIENT_BACKGROUND; + return AppProtoEnums.PROCESS_STATE_TRANSIENT_BACKGROUND; case ActivityManager.PROCESS_STATE_BACKUP: - return ActivityManagerProto.PROCESS_STATE_BACKUP; + return AppProtoEnums.PROCESS_STATE_BACKUP; case ActivityManager.PROCESS_STATE_HEAVY_WEIGHT: - return ActivityManagerProto.PROCESS_STATE_HEAVY_WEIGHT; + return AppProtoEnums.PROCESS_STATE_HEAVY_WEIGHT; case ActivityManager.PROCESS_STATE_SERVICE: - return ActivityManagerProto.PROCESS_STATE_SERVICE; + return AppProtoEnums.PROCESS_STATE_SERVICE; case ActivityManager.PROCESS_STATE_RECEIVER: - return ActivityManagerProto.PROCESS_STATE_RECEIVER; + return AppProtoEnums.PROCESS_STATE_RECEIVER; case ActivityManager.PROCESS_STATE_HOME: - return ActivityManagerProto.PROCESS_STATE_HOME; + return AppProtoEnums.PROCESS_STATE_HOME; case ActivityManager.PROCESS_STATE_LAST_ACTIVITY: - return ActivityManagerProto.PROCESS_STATE_LAST_ACTIVITY; + return AppProtoEnums.PROCESS_STATE_LAST_ACTIVITY; case ActivityManager.PROCESS_STATE_CACHED_ACTIVITY: - return ActivityManagerProto.PROCESS_STATE_CACHED_ACTIVITY; + return AppProtoEnums.PROCESS_STATE_CACHED_ACTIVITY; case ActivityManager.PROCESS_STATE_CACHED_ACTIVITY_CLIENT: - return ActivityManagerProto.PROCESS_STATE_CACHED_ACTIVITY_CLIENT; + return AppProtoEnums.PROCESS_STATE_CACHED_ACTIVITY_CLIENT; case ActivityManager.PROCESS_STATE_CACHED_RECENT: - return ActivityManagerProto.PROCESS_STATE_CACHED_RECENT; + return AppProtoEnums.PROCESS_STATE_CACHED_RECENT; case ActivityManager.PROCESS_STATE_CACHED_EMPTY: - return ActivityManagerProto.PROCESS_STATE_CACHED_EMPTY; + return AppProtoEnums.PROCESS_STATE_CACHED_EMPTY; case ActivityManager.PROCESS_STATE_NONEXISTENT: - return ActivityManagerProto.PROCESS_STATE_NONEXISTENT; + return AppProtoEnums.PROCESS_STATE_NONEXISTENT; + case ActivityManager.PROCESS_STATE_UNKNOWN: + return AppProtoEnums.PROCESS_STATE_UNKNOWN; default: - return -1; + return AppProtoEnums.PROCESS_STATE_UNKNOWN_TO_PROTO; } } diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java index cf36166757e2..db831581c791 100644 --- a/services/core/java/com/android/server/power/PowerManagerService.java +++ b/services/core/java/com/android/server/power/PowerManagerService.java @@ -3763,12 +3763,8 @@ public final class PowerManagerService extends SystemService proto.write(PowerManagerServiceDumpProto.UidStateProto.UID_STRING, UserHandle.formatUid(uid)); proto.write(PowerManagerServiceDumpProto.UidStateProto.IS_ACTIVE, state.mActive); proto.write(PowerManagerServiceDumpProto.UidStateProto.NUM_WAKE_LOCKS, state.mNumWakeLocks); - if (state.mProcState == ActivityManager.PROCESS_STATE_UNKNOWN) { - proto.write(PowerManagerServiceDumpProto.UidStateProto.IS_PROCESS_STATE_UNKNOWN, true); - } else { - proto.write(PowerManagerServiceDumpProto.UidStateProto.PROCESS_STATE, - ActivityManager.processStateAmToProto(state.mProcState)); - } + proto.write(PowerManagerServiceDumpProto.UidStateProto.PROCESS_STATE, + ActivityManager.processStateAmToProto(state.mProcState)); proto.end(uIDToken); } |