/* * Copyright (C) 2018 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. */ package android.hardware.power.stats@1.0; enum Status : uint32_t { SUCCESS = 0, NOT_SUPPORTED = 1, INVALID_INPUT = 2, FILESYSTEM_ERROR = 3, INSUFFICIENT_RESOURCES = 4, }; struct RailInfo { /** Index corresponding to the rail */ uint32_t index; /** Name of the rail (opaque to the framework) */ string railName; /** Name of the subsystem to which this rail belongs (opaque to the framework) */ string subsysName; /** Hardware sampling rate */ uint32_t samplingRate; }; struct EnergyData { /** * Index corresponding to the rail. This index matches * the index returned in RailInfo */ uint32_t index; /** Time since device boot(CLOCK_BOOTTIME) in milli-seconds */ uint64_t timestamp; /** Accumulated energy since device boot in microwatt-seconds (uWs) */ uint64_t energy; }; enum PowerEntityType : uint32_t { /** * A subsystem is a self-contained compute unit. Some examples include * application processor, DSP, GPU. */ SUBSYSTEM = 0, /** * A peripheral is an auxiliary device that connects to and works with a * compute unit. Some examples include simple sensors, camera, display. */ PERIPHERAL = 1, /** * A power domain is a single subsystem or a collection of subsystems * that is controlled by a single voltage rail. */ POWER_DOMAIN = 2, }; /** * PowerEntityInfo contains information, such as the ID, name, and type of a * given PowerEntity. */ struct PowerEntityInfo { /** Unique ID corresponding to the PowerEntity */ uint32_t powerEntityId; /** Name of the PowerEntity (opaque to the framework) */ string powerEntityName; /** Type of the PowerEntity */ PowerEntityType type; }; struct PowerEntityStateInfo { /** * ID corresponding to the state. Unique for a given PowerEntityStateSpace */ uint32_t powerEntityStateId; /** Name of the state (opaque to the framework) */ string powerEntityStateName; }; /** * PowerEntityStateSpace contains the state space information of a given * PowerEntity. The state space, is the set of possible states that a given * PowerEntity provides residency data for. */ struct PowerEntityStateSpace { /** Unique ID of the corresponding PowerEntity */ uint32_t powerEntityId; /** List of states that the PowerEntity may reside in */ vec states; }; /** Contains residency data for a single state */ struct PowerEntityStateResidencyData { /** Unique ID of the corresponding PowerEntityStateInfo */ uint32_t powerEntityStateId; /** * Total time in milliseconds that the corresponding PowerEntity resided * in this state since the PowerEntity was reset */ uint64_t totalTimeInStateMs; /** * Total number of times that the state was entered since the corresponding * PowerEntity was reset */ uint64_t totalStateEntryCount; /** * Last time this state was entered. Time in milliseconds since the * corresponding PowerEntity was reset */ uint64_t lastEntryTimestampMs; }; struct PowerEntityStateResidencyResult { /** Unique ID of the corresponding PowerEntity */ uint32_t powerEntityId; /** Residency data for each state the PowerEntity's state space */ vec stateResidencyData; };