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