/* * Copyright (C) 2021 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.os; option java_multiple_files = true; import "frameworks/proto_logging/stats/enums/os/enums.proto"; // This message is used for statsd logging and should be kept in sync with // frameworks/proto_logging/stats/atoms.proto /** * Represents a device's BatteryUsageStats, with power usage information about the device * and each app. */ message BatteryUsageStatsAtomsProto { // The session start timestamp in UTC milliseconds since January 1, 1970, per Date#getTime(). // All data is no older than this time. optional int64 session_start_millis = 1; // The session end timestamp in UTC milliseconds since January 1, 1970, per Date#getTime(). // All data is no more recent than this time. optional int64 session_end_millis = 2; // Length that the reported data covered. This usually will be equal to the entire session, // session_end_millis - session_start_millis, but may not be if some data during this time frame // is missing. optional int64 session_duration_millis = 3; // Represents usage of a consumer, storing all of its power component usage. message BatteryConsumerData { // Total power consumed by this BatteryConsumer (including all of its PowerComponents). // May not equal the sum of the PowerComponentUsage due to under- or over-estimations. // Multiply by 1/36 to obtain mAh. optional int64 total_consumed_power_deci_coulombs = 1; // Represents power and time usage of a particular power component. message PowerComponentUsage { // Holds android.os.PowerComponentEnum, or custom component value between 1000 and 9999. // Evidently, if one attempts to write an int to an enum field that is out of range, it // is treated as 0, so we must make this an int32. optional int32 component = 1; // Power consumed by this component. Multiply by 1/36 to obtain mAh. optional int64 power_deci_coulombs = 2; optional int64 duration_millis = 3; } repeated PowerComponentUsage power_components = 2; // Represents a slice of power attribution, e.g. "cpu while in the background" // or "wifi when running a background service". Queries that care about // PowerComponentUsage slices need to be aware of all supported dimensions. // There are no roll-ups included in the slices - it is up to the clients // of this data to aggregate values as needed. message PowerComponentUsageSlice { optional PowerComponentUsage power_component = 1; enum ProcessState { UNSPECIFIED = 0; FOREGROUND = 1; BACKGROUND = 2; FOREGROUND_SERVICE = 3; CACHED = 4; } optional ProcessState process_state = 2; } repeated PowerComponentUsageSlice slices = 3; } // Total power usage for the device during this session. optional BatteryConsumerData device_battery_consumer = 4; // Power usage by a uid during this session. message UidBatteryConsumer { optional int32 uid = 1; optional BatteryConsumerData battery_consumer_data = 2; // DEPRECATED Use time_in_state instead. optional int64 time_in_foreground_millis = 3 [deprecated = true]; // DEPRECATED Use time_in_state instead. optional int64 time_in_background_millis = 4 [deprecated = true]; message TimeInState { enum ProcessState { UNSPECIFIED = 0; FOREGROUND = 1; BACKGROUND = 2; FOREGROUND_SERVICE = 3; } optional ProcessState process_state = 1; optional int64 time_in_state_millis = 2; } repeated TimeInState time_in_state = 5; } repeated UidBatteryConsumer uid_battery_consumers = 5; // Sum of all discharge percentage point drops during the reported session. optional int32 session_discharge_percentage = 6; // Total amount of time battery was discharging during the reported session optional int64 discharge_duration_millis = 7; // Notes the power model used for a power component. message PowerComponentModel { // Holds android.os.PowerComponentEnum, or custom component value between 1000 and 9999. optional int32 component = 1; enum PowerModel { UNDEFINED = 0; POWER_PROFILE = 1; MEASURED_ENERGY = 2; } optional PowerModel power_model = 2; } // The power model used for each power component. repeated PowerComponentModel component_models = 8; }