xref: /aosp_15_r20/external/perfetto/src/android_internal/power_stats.h (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1*6dbdd20aSAndroid Build Coastguard Worker /*
2*6dbdd20aSAndroid Build Coastguard Worker  * Copyright (C) 2021 The Android Open Source Project
3*6dbdd20aSAndroid Build Coastguard Worker  *
4*6dbdd20aSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*6dbdd20aSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*6dbdd20aSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*6dbdd20aSAndroid Build Coastguard Worker  *
8*6dbdd20aSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*6dbdd20aSAndroid Build Coastguard Worker  *
10*6dbdd20aSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*6dbdd20aSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*6dbdd20aSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*6dbdd20aSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*6dbdd20aSAndroid Build Coastguard Worker  * limitations under the License.
15*6dbdd20aSAndroid Build Coastguard Worker  */
16*6dbdd20aSAndroid Build Coastguard Worker 
17*6dbdd20aSAndroid Build Coastguard Worker #ifndef SRC_ANDROID_INTERNAL_POWER_STATS_H_
18*6dbdd20aSAndroid Build Coastguard Worker #define SRC_ANDROID_INTERNAL_POWER_STATS_H_
19*6dbdd20aSAndroid Build Coastguard Worker 
20*6dbdd20aSAndroid Build Coastguard Worker #include <stddef.h>
21*6dbdd20aSAndroid Build Coastguard Worker #include <stdint.h>
22*6dbdd20aSAndroid Build Coastguard Worker 
23*6dbdd20aSAndroid Build Coastguard Worker // This header declares proxy functions defined in
24*6dbdd20aSAndroid Build Coastguard Worker // libperfetto_android_internal.so that allow traced_probes to access internal
25*6dbdd20aSAndroid Build Coastguard Worker // android functions (e.g., hwbinder).
26*6dbdd20aSAndroid Build Coastguard Worker // Do not add any include to either perfetto headers or android headers. See
27*6dbdd20aSAndroid Build Coastguard Worker // README.md for more.
28*6dbdd20aSAndroid Build Coastguard Worker 
29*6dbdd20aSAndroid Build Coastguard Worker namespace perfetto {
30*6dbdd20aSAndroid Build Coastguard Worker namespace android_internal {
31*6dbdd20aSAndroid Build Coastguard Worker 
32*6dbdd20aSAndroid Build Coastguard Worker const int32_t ALL_UIDS_FOR_CONSUMER = -1;
33*6dbdd20aSAndroid Build Coastguard Worker 
34*6dbdd20aSAndroid Build Coastguard Worker struct RailDescriptor {
35*6dbdd20aSAndroid Build Coastguard Worker   // Index corresponding to the rail
36*6dbdd20aSAndroid Build Coastguard Worker   uint32_t index;
37*6dbdd20aSAndroid Build Coastguard Worker   // Name of the rail
38*6dbdd20aSAndroid Build Coastguard Worker   char rail_name[64];
39*6dbdd20aSAndroid Build Coastguard Worker   // Name of the subsystem to which this rail belongs
40*6dbdd20aSAndroid Build Coastguard Worker   char subsys_name[64];
41*6dbdd20aSAndroid Build Coastguard Worker   // Hardware sampling rate
42*6dbdd20aSAndroid Build Coastguard Worker   uint32_t sampling_rate;
43*6dbdd20aSAndroid Build Coastguard Worker };
44*6dbdd20aSAndroid Build Coastguard Worker 
45*6dbdd20aSAndroid Build Coastguard Worker struct RailEnergyData {
46*6dbdd20aSAndroid Build Coastguard Worker   // Index corresponding to RailDescriptor.index
47*6dbdd20aSAndroid Build Coastguard Worker   uint32_t index;
48*6dbdd20aSAndroid Build Coastguard Worker   // Time since device boot(CLOCK_BOOTTIME) in milli-seconds
49*6dbdd20aSAndroid Build Coastguard Worker   uint64_t timestamp;
50*6dbdd20aSAndroid Build Coastguard Worker   // Accumulated energy since device boot in microwatt-seconds (uWs)
51*6dbdd20aSAndroid Build Coastguard Worker   uint64_t energy;
52*6dbdd20aSAndroid Build Coastguard Worker };
53*6dbdd20aSAndroid Build Coastguard Worker 
54*6dbdd20aSAndroid Build Coastguard Worker struct EnergyConsumerInfo {
55*6dbdd20aSAndroid Build Coastguard Worker   // Unique ID of this energy consumer.  Matches the ID in a
56*6dbdd20aSAndroid Build Coastguard Worker   // EnergyEstimationBreakdown.
57*6dbdd20aSAndroid Build Coastguard Worker   int32_t energy_consumer_id;
58*6dbdd20aSAndroid Build Coastguard Worker 
59*6dbdd20aSAndroid Build Coastguard Worker   // For a group of energy consumers of the same logical type, sorting by
60*6dbdd20aSAndroid Build Coastguard Worker   // ordinal gives their physical order. Ordinals must be consecutive integers
61*6dbdd20aSAndroid Build Coastguard Worker   // starting from 0.
62*6dbdd20aSAndroid Build Coastguard Worker   int32_t ordinal;
63*6dbdd20aSAndroid Build Coastguard Worker 
64*6dbdd20aSAndroid Build Coastguard Worker   // Type of this energy consumer.
65*6dbdd20aSAndroid Build Coastguard Worker   char type[64];
66*6dbdd20aSAndroid Build Coastguard Worker 
67*6dbdd20aSAndroid Build Coastguard Worker   // Unique name of this energy consumer. Vendor/device specific. Opaque to
68*6dbdd20aSAndroid Build Coastguard Worker   // framework.
69*6dbdd20aSAndroid Build Coastguard Worker   char name[64];
70*6dbdd20aSAndroid Build Coastguard Worker };
71*6dbdd20aSAndroid Build Coastguard Worker 
72*6dbdd20aSAndroid Build Coastguard Worker struct EnergyEstimationBreakdown {
73*6dbdd20aSAndroid Build Coastguard Worker   // Energy consumer ID.
74*6dbdd20aSAndroid Build Coastguard Worker   int32_t energy_consumer_id;
75*6dbdd20aSAndroid Build Coastguard Worker 
76*6dbdd20aSAndroid Build Coastguard Worker   // Process uid.  ALL_UIDS_FOR_CONSUMER represents energy for all processes
77*6dbdd20aSAndroid Build Coastguard Worker   // for the energy_consumer_id.
78*6dbdd20aSAndroid Build Coastguard Worker   int32_t uid;
79*6dbdd20aSAndroid Build Coastguard Worker 
80*6dbdd20aSAndroid Build Coastguard Worker   // Energy usage in microwatts-second(µWs).
81*6dbdd20aSAndroid Build Coastguard Worker   int64_t energy_uws;
82*6dbdd20aSAndroid Build Coastguard Worker };
83*6dbdd20aSAndroid Build Coastguard Worker 
84*6dbdd20aSAndroid Build Coastguard Worker struct PowerEntityState {
85*6dbdd20aSAndroid Build Coastguard Worker   int32_t entity_id;
86*6dbdd20aSAndroid Build Coastguard Worker   int32_t state_id;
87*6dbdd20aSAndroid Build Coastguard Worker   char entity_name[64];
88*6dbdd20aSAndroid Build Coastguard Worker   char state_name[64];
89*6dbdd20aSAndroid Build Coastguard Worker };
90*6dbdd20aSAndroid Build Coastguard Worker 
91*6dbdd20aSAndroid Build Coastguard Worker struct PowerEntityStateResidency {
92*6dbdd20aSAndroid Build Coastguard Worker   int32_t entity_id;
93*6dbdd20aSAndroid Build Coastguard Worker   int32_t state_id;
94*6dbdd20aSAndroid Build Coastguard Worker   uint64_t total_time_in_state_ms;
95*6dbdd20aSAndroid Build Coastguard Worker   uint64_t total_state_entry_count;
96*6dbdd20aSAndroid Build Coastguard Worker   uint64_t last_entry_timestamp_ms;
97*6dbdd20aSAndroid Build Coastguard Worker };
98*6dbdd20aSAndroid Build Coastguard Worker 
99*6dbdd20aSAndroid Build Coastguard Worker extern "C" {
100*6dbdd20aSAndroid Build Coastguard Worker 
101*6dbdd20aSAndroid Build Coastguard Worker // These functions are not thread safe unless specified otherwise.
102*6dbdd20aSAndroid Build Coastguard Worker 
103*6dbdd20aSAndroid Build Coastguard Worker bool __attribute__((visibility("default")))
104*6dbdd20aSAndroid Build Coastguard Worker GetAvailableRails(RailDescriptor*, size_t* size_of_arr);
105*6dbdd20aSAndroid Build Coastguard Worker 
106*6dbdd20aSAndroid Build Coastguard Worker bool __attribute__((visibility("default")))
107*6dbdd20aSAndroid Build Coastguard Worker GetRailEnergyData(RailEnergyData*, size_t* size_of_arr);
108*6dbdd20aSAndroid Build Coastguard Worker 
109*6dbdd20aSAndroid Build Coastguard Worker bool __attribute__((visibility("default")))
110*6dbdd20aSAndroid Build Coastguard Worker GetEnergyConsumerInfo(EnergyConsumerInfo* consumers, size_t* size_of_arr);
111*6dbdd20aSAndroid Build Coastguard Worker 
112*6dbdd20aSAndroid Build Coastguard Worker // Retrieve the energy estimation breakdown for all energy consumer.  For each
113*6dbdd20aSAndroid Build Coastguard Worker // consumer, there will be an entry with a uid of ALL_UIDS_FOR_CONSUMER,
114*6dbdd20aSAndroid Build Coastguard Worker // followed by the energy breakdown for each process contributing to that
115*6dbdd20aSAndroid Build Coastguard Worker // consumer.
116*6dbdd20aSAndroid Build Coastguard Worker bool __attribute__((visibility("default")))
117*6dbdd20aSAndroid Build Coastguard Worker GetEnergyConsumed(EnergyEstimationBreakdown* breakdown, size_t* size_of_arr);
118*6dbdd20aSAndroid Build Coastguard Worker 
119*6dbdd20aSAndroid Build Coastguard Worker bool __attribute__((visibility("default")))
120*6dbdd20aSAndroid Build Coastguard Worker GetPowerEntityStates(PowerEntityState* state, size_t* size_of_arr);
121*6dbdd20aSAndroid Build Coastguard Worker 
122*6dbdd20aSAndroid Build Coastguard Worker bool __attribute__((visibility("default")))
123*6dbdd20aSAndroid Build Coastguard Worker GetPowerEntityStateResidency(PowerEntityStateResidency* residency,
124*6dbdd20aSAndroid Build Coastguard Worker                              size_t* size_of_arr);
125*6dbdd20aSAndroid Build Coastguard Worker 
126*6dbdd20aSAndroid Build Coastguard Worker }  // extern "C"
127*6dbdd20aSAndroid Build Coastguard Worker 
128*6dbdd20aSAndroid Build Coastguard Worker }  // namespace android_internal
129*6dbdd20aSAndroid Build Coastguard Worker }  // namespace perfetto
130*6dbdd20aSAndroid Build Coastguard Worker 
131*6dbdd20aSAndroid Build Coastguard Worker #endif  // SRC_ANDROID_INTERNAL_POWER_STATS_H_
132