1/*
2 * Copyright (C) 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17syntax = "proto2";
18option java_multiple_files = true;
19option java_outer_classname = "ProcessStatsServiceProto";
20
21import "frameworks/base/core/proto/android/util/common.proto";
22import "frameworks/base/libs/incident/proto/android/privacy.proto";
23
24package android.service.procstats;
25
26/**
27 * Data from ProcStatsService Dumpsys
28 *
29 * Next Tag: 4
30 */
31message ProcessStatsServiceDumpProto {
32    option (android.msg_privacy).dest = DEST_AUTOMATIC;
33
34    optional ProcessStatsSectionProto procstats_now = 1;
35
36    optional ProcessStatsSectionProto procstats_over_3hrs = 2;
37
38    optional ProcessStatsSectionProto procstats_over_24hrs = 3;
39}
40
41/**
42 * Data model from /frameworks/base/core/java/com/android/internal/app/procstats/ProcessStats.java
43 * This proto is defined based on the writeToParcel method.
44 *
45 * Next Tag: 9
46 */
47message ProcessStatsSectionProto {
48    option (android.msg_privacy).dest = DEST_AUTOMATIC;
49
50    // Elapsed realtime at start of report.
51    optional int64 start_realtime_ms = 1;
52
53    // Elapsed realtime at end of report.
54    optional int64 end_realtime_ms = 2;
55
56    // CPU uptime at start of report.
57    optional int64 start_uptime_ms = 3;
58
59    // CPU uptime at end of report.
60    optional int64 end_uptime_ms = 4;
61
62    // System runtime library. e.g. "libdvm.so", "libart.so".
63    optional string runtime = 5;
64
65    // whether kernel reports swapped pss.
66    optional bool has_swapped_pss = 6;
67
68    // Data completeness. e.g. "complete", "partial", shutdown", or "sysprops".
69    enum Status {
70        STATUS_UNKNOWN = 0;
71        STATUS_COMPLETE = 1;
72        STATUS_PARTIAL = 2;
73        STATUS_SHUTDOWN = 3;
74        STATUS_SYSPROPS = 4;
75    }
76    repeated Status status = 7;
77
78    // Stats for each process.
79    repeated ProcessStatsProto process_stats = 8;
80}
81
82// Next Tag: 6
83message ProcessStatsProto {
84    option (android.msg_privacy).dest = DEST_AUTOMATIC;
85
86    // Name of process.
87    optional string process = 1;
88
89    // Uid of the process.
90    optional int32 uid = 2;
91
92    // Information about how often kills occurred
93    message Kill {
94        option (android.msg_privacy).dest = DEST_AUTOMATIC;
95
96      // Count of excessive CPU kills
97      optional int32 cpu = 1;
98
99      // Count of kills when cached
100      optional int32 cached = 2;
101
102      // PSS stats during cached kill
103      optional android.util.AggStats cached_pss = 3;
104    }
105    optional Kill kill = 3;
106
107    message State {
108        option (android.msg_privacy).dest = DEST_AUTOMATIC;
109
110        enum ScreenState {
111            SCREEN_UNKNOWN = 0;
112            OFF = 1;
113            ON = 2;
114        }
115        optional ScreenState screen_state = 1;
116
117        enum MemoryState {
118            MEMORY_UNKNOWN = 0;
119            NORMAL = 1;     // normal.
120            MODERATE = 2;   // moderate memory pressure.
121            LOW = 3;        // low memory.
122            CRITICAL = 4;   // critical memory.
123        }
124        optional MemoryState memory_state = 2;
125
126        // this enum list is from frameworks/base/core/java/com/android/internal/app/procstats/ProcessStats.java
127        // and not frameworks/base/core/java/android/app/ActivityManager.java
128        enum ProcessState {
129            PROCESS_UNKNOWN = 0;
130            // Persistent system process.
131            PERSISTENT = 1;
132            // Top activity; actually any visible activity.
133            TOP = 2;
134            // Important foreground process (ime, wallpaper, etc).
135            IMPORTANT_FOREGROUND = 3;
136            // Important background process.
137            IMPORTANT_BACKGROUND = 4;
138            // Performing backup operation.
139            BACKUP = 5;
140            // Background process running a service.
141            SERVICE = 6;
142            // Process not running, but would be if there was enough RAM.
143            SERVICE_RESTARTING = 7;
144            // Process running a receiver.
145            RECEIVER = 8;
146            // Heavy-weight process (currently not used).
147            HEAVY_WEIGHT = 9;
148            // Process hosting home/launcher app when not on top.
149            HOME = 10;
150            // Process hosting the last app the user was in.
151            LAST_ACTIVITY = 11;
152            // Cached process hosting a previous activity.
153            CACHED_ACTIVITY = 12;
154            // Cached process hosting a client activity.
155            CACHED_ACTIVITY_CLIENT = 13;
156            // Cached process that is empty.
157            CACHED_EMPTY = 14;
158        }
159        optional ProcessState process_state = 3;
160
161        // Millisecond duration spent in this state
162        optional int64 duration_ms = 4;
163
164        // # of samples taken
165        optional int32 sample_size = 5;
166
167        // PSS is memory reserved for this process
168        optional android.util.AggStats pss = 6;
169
170        // USS is memory shared between processes, divided evenly for accounting
171        optional android.util.AggStats uss = 7;
172
173        // RSS is memory resident for this process
174        optional android.util.AggStats rss = 8;
175    }
176    repeated State states = 5;
177}
178