Update to new version of PowerStats HAL 2.0
Bug: 178048034
Test: atest FrameworksServicesTests:PowerStatsServiceTest
Change-Id: I714d2037a3576a3f6f89211d64ccf88cefa51abf
diff --git a/core/proto/android/server/powerstatsservice.proto b/core/proto/android/server/powerstatsservice.proto
index 30c4274..ec9bc11 100644
--- a/core/proto/android/server/powerstatsservice.proto
+++ b/core/proto/android/server/powerstatsservice.proto
@@ -53,12 +53,12 @@
/**
* EnergyConsumer (model) data is exposed by the PowerStats HAL. This data
* represents modeled energy consumption estimates and is provided per
- * subsystem. The default subsystems are defined in EnergyConsumerId.aidl.
+ * subsystem. The default subsystems are defined in EnergyConsumerType.aidl.
* Energy model estimates will be logged to incident reports in addition to
* the raw energy meter data.
*/
message PowerStatsServiceModelProto {
- repeated EnergyConsumerIdProto energy_consumer_id = 1;
+ repeated EnergyConsumerProto energy_consumer = 1;
repeated EnergyConsumerResultProto energy_consumer_result = 2;
}
@@ -68,13 +68,13 @@
* This raw energy meter data will be logged to incident reports.
*/
message PowerStatsServiceMeterProto {
- repeated ChannelInfoProto channel_info = 1;
+ repeated ChannelProto channel = 1;
repeated EnergyMeasurementProto energy_measurement = 2;
}
/**
* A PowerEntity is defined as a platform subsystem, peripheral, or power domain
- * that impacts the total device power consumption. PowerEntityInfo is
+ * that impacts the total device power consumption. PowerEntity is
* information related to each power entity. Each PowerEntity may reside in one
* of multiple states. It may also transition from one state to another.
* StateResidency is defined as an accumulation of time that a PowerEntity
@@ -83,44 +83,44 @@
* entered.
*/
message PowerStatsServiceResidencyProto {
- repeated PowerEntityInfoProto power_entity_info = 1;
+ repeated PowerEntityProto power_entity = 1;
repeated StateResidencyResultProto state_residency_result = 2;
}
/**
* Information about the possible states for a particular PowerEntity.
*/
-message StateInfoProto {
+message StateProto {
/**
- * Unique (for a given PowerEntityInfo) ID of this StateInfo
+ * Unique (for a given PowerEntity) ID of this State
*/
- optional int32 state_id = 1;
+ optional int32 id = 1;
/**
- * Unique (for a given PowerEntityInfo) name of the state. Vendor/device specific.
+ * Unique (for a given PowerEntity) name of the state. Vendor/device specific.
* Opaque to framework
*/
- optional string state_name = 2;
+ optional string name = 2;
}
/**
* A PowerEntity is defined as a platform subsystem, peripheral, or power domain
- * that impacts the total device power consumption. PowerEntityInfo is
+ * that impacts the total device power consumption. PowerEntity is
* information about a PowerEntity. It includes an array of information about
* each possible state of the PowerEntity.
*/
-message PowerEntityInfoProto {
+message PowerEntityProto {
/**
- * Unique ID of this PowerEntityInfo
+ * Unique ID of this PowerEntity
*/
- optional int32 power_entity_id = 1;
+ optional int32 id = 1;
/**
* Unique name of the PowerEntity. Vendor/device specific. Opaque to framework
*/
- optional string power_entity_name = 2;
+ optional string name = 2;
/**
* List of states that the PowerEntity may reside in
*/
- repeated StateInfoProto states = 3;
+ repeated StateProto states = 3;
}
/**
@@ -133,7 +133,7 @@
/**
* ID of the state associated with this residency
*/
- optional int32 state_id = 1;
+ optional int32 id = 1;
/**
* Total time in milliseconds that the corresponding PowerEntity resided
* in this state since boot
@@ -152,13 +152,13 @@
/**
* A StateResidencyResult is an array of StateResidencies for a particular
* PowerEntity. The StateResidencyResult can be matched to its corresponding
- * PowerEntityInfo through the power_entity_id field.
+ * PowerEntity through the id field.
*/
message StateResidencyResultProto {
/**
* ID of the PowerEntity associated with this result
*/
- optional int32 power_entity_id = 1;
+ optional int32 id = 1;
/**
* Residency for each state in the PowerEntity's state space
*/
@@ -166,23 +166,39 @@
}
/**
- * Energy consumer ID:
+ * Energy consumer:
* A list of default subsystems for which energy consumption estimates
* may be provided (hardware dependent).
*/
-message EnergyConsumerIdProto {
- /** Unique index identifying the energy consumer. */
- optional int32 energy_consumer_id = 1;
+message EnergyConsumerProto {
+ /** Unique ID of this EnergyConsumer */
+ optional int32 id = 1;
+
+ /**
+ * For a group of EnergyConsumers of the same logical type, sorting by
+ * ordinal should be give their physical order. No other meaning is
+ * carried by it.
+ */
+ optional int32 ordinal = 2;
+
+ /** Type of this EnergyConsumer */
+ optional int32 type = 3;
+
+ /**
+ * Unique name of this EnergyConsumer. Vendor/device specific. Opaque
+ * to framework
+ */
+ optional string name = 4;
}
/**
* Energy consumer result:
* An estimate of energy consumption since boot for the subsystem identified
- * by the unique energy_consumer_id.
+ * by the unique id.
*/
message EnergyConsumerResultProto {
/** Unique index identifying the energy consumer. */
- optional int32 energy_consumer_id = 1;
+ optional int32 id = 1;
/** Time since device boot(CLOCK_BOOTTIME) in milli-seconds */
optional int64 timestamp_ms = 2;
@@ -195,15 +211,15 @@
* Channel information:
* Reports information related to the energy meter channels being monitored.
*/
-message ChannelInfoProto {
+message ChannelProto {
/**
* Index corresponding to the energy meter channel. This index matches
- * the index returned in ChannelInfo.
+ * the index returned in Channel.
*/
- optional int32 channel_id = 1;
+ optional int32 id = 1;
/** Name of the energy meter channel */
- optional string channel_name = 2;
+ optional string name = 2;
}
/**
@@ -213,13 +229,17 @@
message EnergyMeasurementProto {
/**
* Index corresponding to the energy meter channel. This index matches
- * the index returned in ChannelInfo.
+ * the index returned in Channel.
*/
- optional int32 channel_id = 1;
+ optional int32 id = 1;
/** Time since device boot(CLOCK_BOOTTIME) in milli-seconds */
optional int64 timestamp_ms = 2;
/** Accumulated energy since device boot in microwatt-seconds (uWs) */
optional int64 energy_uws = 3;
+
+ /** Duration in milliseconds that energy has been accumulated */
+ optional int64 duration_ms = 4;
+
}
diff --git a/services/core/java/android/power/PowerStatsInternal.java b/services/core/java/android/power/PowerStatsInternal.java
index 9c908c3..753b5b3 100644
--- a/services/core/java/android/power/PowerStatsInternal.java
+++ b/services/core/java/android/power/PowerStatsInternal.java
@@ -16,7 +16,7 @@
package android.power;
-import android.hardware.power.stats.EnergyConsumerId;
+//import android.hardware.power.stats.EnergyConsumerId;
import android.hardware.power.stats.EnergyConsumerResult;
import java.util.concurrent.CompletableFuture;
@@ -38,5 +38,5 @@
* consumer results for all listed {@link EnergyConsumerId}.
*/
public abstract CompletableFuture<EnergyConsumerResult[]> getEnergyConsumedAsync(
- @EnergyConsumerId int[] energyConsumerIds);
+ /*@EnergyConsumerId*/ int[] energyConsumerIds);
}
diff --git a/services/core/java/com/android/server/am/BatteryExternalStatsWorker.java b/services/core/java/com/android/server/am/BatteryExternalStatsWorker.java
index a3fac05..666695e 100644
--- a/services/core/java/com/android/server/am/BatteryExternalStatsWorker.java
+++ b/services/core/java/com/android/server/am/BatteryExternalStatsWorker.java
@@ -22,7 +22,6 @@
import android.bluetooth.BluetoothActivityEnergyInfo;
import android.bluetooth.BluetoothAdapter;
import android.content.Context;
-import android.hardware.power.stats.EnergyConsumerId;
import android.hardware.power.stats.EnergyConsumerResult;
import android.net.wifi.WifiManager;
import android.os.BatteryStats;
@@ -750,7 +749,8 @@
for (int i = 0; i < size; i++) {
final EnergyConsumerResult consumer = results[i];
- final int subsystem;
+ final int subsystem = 0;
+ /*
switch (consumer.energyConsumerId) {
case EnergyConsumerId.DISPLAY:
subsystem = MeasuredEnergyArray.SUBSYSTEM_DISPLAY;
@@ -758,6 +758,7 @@
default:
continue;
}
+ */
subsystems[i] = subsystem;
energyUJ[i] = consumer.energyUWs;
}
diff --git a/services/core/java/com/android/server/powerstats/PowerStatsHALWrapper.java b/services/core/java/com/android/server/powerstats/PowerStatsHALWrapper.java
index 79c0392..3e39b4b 100644
--- a/services/core/java/com/android/server/powerstats/PowerStatsHALWrapper.java
+++ b/services/core/java/com/android/server/powerstats/PowerStatsHALWrapper.java
@@ -16,10 +16,10 @@
package com.android.server.powerstats;
-import android.hardware.power.stats.ChannelInfo;
+import android.hardware.power.stats.Channel;
import android.hardware.power.stats.EnergyMeasurement;
import android.hardware.power.stats.IPowerStats;
-import android.hardware.power.stats.PowerEntityInfo;
+import android.hardware.power.stats.PowerEntity;
import android.hardware.power.stats.StateResidencyResult;
import android.os.Binder;
import android.os.IBinder;
@@ -51,7 +51,7 @@
*
* @return List of information on each PowerEntity.
*/
- android.hardware.power.stats.PowerEntityInfo[] getPowerEntityInfo();
+ android.hardware.power.stats.PowerEntity[] getPowerEntityInfo();
/**
* Reports the accumulated state residency for each requested PowerEntity.
@@ -66,22 +66,22 @@
* @param powerEntityIds List of IDs of PowerEntities for which data is requested. Passing
* an empty list will return state residency for all available
* PowerEntities. ID of each PowerEntity is contained in
- * PowerEntityInfo.
+ * PowerEntity.
*
* @return StateResidency since boot for each requested PowerEntity
*/
android.hardware.power.stats.StateResidencyResult[] getStateResidency(int[] powerEntityIds);
/**
- * Returns the energy consumer IDs for all available energy consumers (power models) on the
+ * Returns the energy consumer info for all available energy consumers (power models) on the
* device. Examples of subsystems for which energy consumer results (power models) may be
* available are GPS, display, wifi, etc. The default list of energy consumers can be
- * found in the PowerStats HAL definition (EnergyConsumerId.aidl). The availability of
+ * found in the PowerStats HAL definition (EnergyConsumerType.aidl). The availability of
* energy consumer IDs is hardware dependent.
*
- * @return List of EnergyConsumerIds all available energy consumers.
+ * @return List of EnergyConsumers all available energy consumers.
*/
- int[] getEnergyConsumerInfo();
+ android.hardware.power.stats.EnergyConsumer[] getEnergyConsumerInfo();
/**
* Returns the energy consumer result for all available energy consumers (power models).
@@ -102,10 +102,10 @@
/**
* Returns channel info for all available energy meters.
*
- * @return List of ChannelInfo objects containing channel info for all available energy
+ * @return List of Channel objects containing channel info for all available energy
* meters.
*/
- android.hardware.power.stats.ChannelInfo[] getEnergyMeterInfo();
+ android.hardware.power.stats.Channel[] getEnergyMeterInfo();
/**
* Returns energy measurements for all available energy meters. Available channels can be
@@ -152,18 +152,18 @@
}
@Override
- public android.hardware.power.stats.PowerEntityInfo[] getPowerEntityInfo() {
- android.hardware.power.stats.PowerEntityInfo[] powerEntityInfoHAL = null;
+ public android.hardware.power.stats.PowerEntity[] getPowerEntityInfo() {
+ android.hardware.power.stats.PowerEntity[] powerEntityHAL = null;
if (sVintfPowerStats != null) {
try {
- powerEntityInfoHAL = sVintfPowerStats.get().getPowerEntityInfo();
+ powerEntityHAL = sVintfPowerStats.get().getPowerEntityInfo();
} catch (RemoteException e) {
if (DEBUG) Slog.d(TAG, "Failed to get power entity info from PowerStats HAL");
}
}
- return powerEntityInfoHAL;
+ return powerEntityHAL;
}
@Override
@@ -184,12 +184,12 @@
}
@Override
- public int[] getEnergyConsumerInfo() {
- int[] energyConsumerInfoHAL = null;
+ public android.hardware.power.stats.EnergyConsumer[] getEnergyConsumerInfo() {
+ android.hardware.power.stats.EnergyConsumer[] energyConsumerHAL = null;
if (sVintfPowerStats != null) {
try {
- energyConsumerInfoHAL = sVintfPowerStats.get().getEnergyConsumerInfo();
+ energyConsumerHAL = sVintfPowerStats.get().getEnergyConsumerInfo();
} catch (RemoteException e) {
if (DEBUG) {
Slog.d(TAG, "Failed to get energy consumer info from PowerStats HAL");
@@ -197,7 +197,7 @@
}
}
- return energyConsumerInfoHAL;
+ return energyConsumerHAL;
}
@Override
@@ -220,8 +220,8 @@
}
@Override
- public android.hardware.power.stats.ChannelInfo[] getEnergyMeterInfo() {
- android.hardware.power.stats.ChannelInfo[] energyMeterInfoHAL = null;
+ public android.hardware.power.stats.Channel[] getEnergyMeterInfo() {
+ android.hardware.power.stats.Channel[] energyMeterInfoHAL = null;
if (sVintfPowerStats != null) {
try {
@@ -267,9 +267,9 @@
// PowerStatsHAL 1.0 native functions exposed by JNI layer.
private static native boolean nativeInit();
- private static native PowerEntityInfo[] nativeGetPowerEntityInfo();
+ private static native PowerEntity[] nativeGetPowerEntityInfo();
private static native StateResidencyResult[] nativeGetStateResidency(int[] powerEntityIds);
- private static native ChannelInfo[] nativeGetEnergyMeterInfo();
+ private static native Channel[] nativeGetEnergyMeterInfo();
private static native EnergyMeasurement[] nativeReadEnergyMeters(int[] channelIds);
public PowerStatsHAL10WrapperImpl() {
@@ -282,7 +282,7 @@
}
@Override
- public android.hardware.power.stats.PowerEntityInfo[] getPowerEntityInfo() {
+ public android.hardware.power.stats.PowerEntity[] getPowerEntityInfo() {
return nativeGetPowerEntityInfo();
}
@@ -293,7 +293,7 @@
}
@Override
- public int[] getEnergyConsumerInfo() {
+ public android.hardware.power.stats.EnergyConsumer[] getEnergyConsumerInfo() {
if (DEBUG) Slog.d(TAG, "Energy consumer info is not supported");
return null;
}
@@ -306,7 +306,7 @@
}
@Override
- public android.hardware.power.stats.ChannelInfo[] getEnergyMeterInfo() {
+ public android.hardware.power.stats.Channel[] getEnergyMeterInfo() {
return nativeGetEnergyMeterInfo();
}
diff --git a/services/core/java/com/android/server/powerstats/PowerStatsLogger.java b/services/core/java/com/android/server/powerstats/PowerStatsLogger.java
index 9ee3429..78a227e 100644
--- a/services/core/java/com/android/server/powerstats/PowerStatsLogger.java
+++ b/services/core/java/com/android/server/powerstats/PowerStatsLogger.java
@@ -17,10 +17,11 @@
package com.android.server.powerstats;
import android.content.Context;
-import android.hardware.power.stats.ChannelInfo;
+import android.hardware.power.stats.Channel;
+import android.hardware.power.stats.EnergyConsumer;
import android.hardware.power.stats.EnergyConsumerResult;
import android.hardware.power.stats.EnergyMeasurement;
-import android.hardware.power.stats.PowerEntityInfo;
+import android.hardware.power.stats.PowerEntity;
import android.hardware.power.stats.StateResidencyResult;
import android.os.Handler;
import android.os.Looper;
@@ -30,11 +31,11 @@
import android.util.proto.ProtoOutputStream;
import com.android.server.powerstats.PowerStatsHALWrapper.IPowerStatsHALWrapper;
-import com.android.server.powerstats.ProtoStreamUtils.ChannelInfoUtils;
-import com.android.server.powerstats.ProtoStreamUtils.EnergyConsumerIdUtils;
+import com.android.server.powerstats.ProtoStreamUtils.ChannelUtils;
import com.android.server.powerstats.ProtoStreamUtils.EnergyConsumerResultUtils;
+import com.android.server.powerstats.ProtoStreamUtils.EnergyConsumerUtils;
import com.android.server.powerstats.ProtoStreamUtils.EnergyMeasurementUtils;
-import com.android.server.powerstats.ProtoStreamUtils.PowerEntityInfoUtils;
+import com.android.server.powerstats.ProtoStreamUtils.PowerEntityUtils;
import com.android.server.powerstats.ProtoStreamUtils.StateResidencyResultUtils;
import java.io.ByteArrayInputStream;
@@ -106,9 +107,9 @@
final ProtoOutputStream pos = new ProtoOutputStream(fd);
try {
- ChannelInfo[] channelInfo = mPowerStatsHALWrapper.getEnergyMeterInfo();
- ChannelInfoUtils.packProtoMessage(channelInfo, pos);
- if (DEBUG) ChannelInfoUtils.print(channelInfo);
+ Channel[] channel = mPowerStatsHALWrapper.getEnergyMeterInfo();
+ ChannelUtils.packProtoMessage(channel, pos);
+ if (DEBUG) ChannelUtils.print(channel);
mPowerStatsMeterStorage.read(new PowerStatsDataStorage.DataElementReadCallback() {
@Override
@@ -147,9 +148,9 @@
final ProtoOutputStream pos = new ProtoOutputStream(fd);
try {
- int[] energyConsumerId = mPowerStatsHALWrapper.getEnergyConsumerInfo();
- EnergyConsumerIdUtils.packProtoMessage(energyConsumerId, pos);
- if (DEBUG) EnergyConsumerIdUtils.print(energyConsumerId);
+ EnergyConsumer[] energyConsumer = mPowerStatsHALWrapper.getEnergyConsumerInfo();
+ EnergyConsumerUtils.packProtoMessage(energyConsumer, pos);
+ if (DEBUG) EnergyConsumerUtils.print(energyConsumer);
mPowerStatsModelStorage.read(new PowerStatsDataStorage.DataElementReadCallback() {
@Override
@@ -188,9 +189,9 @@
final ProtoOutputStream pos = new ProtoOutputStream(fd);
try {
- PowerEntityInfo[] powerEntityInfo = mPowerStatsHALWrapper.getPowerEntityInfo();
- PowerEntityInfoUtils.packProtoMessage(powerEntityInfo, pos);
- if (DEBUG) PowerEntityInfoUtils.print(powerEntityInfo);
+ PowerEntity[] powerEntity = mPowerStatsHALWrapper.getPowerEntityInfo();
+ PowerEntityUtils.packProtoMessage(powerEntity, pos);
+ if (DEBUG) PowerEntityUtils.print(powerEntity);
mPowerStatsResidencyStorage.read(new PowerStatsDataStorage.DataElementReadCallback() {
@Override
diff --git a/services/core/java/com/android/server/powerstats/PowerStatsService.java b/services/core/java/com/android/server/powerstats/PowerStatsService.java
index 64bddcd..b7e991c 100644
--- a/services/core/java/com/android/server/powerstats/PowerStatsService.java
+++ b/services/core/java/com/android/server/powerstats/PowerStatsService.java
@@ -18,9 +18,10 @@
import android.annotation.Nullable;
import android.content.Context;
-import android.hardware.power.stats.ChannelInfo;
+import android.hardware.power.stats.Channel;
+import android.hardware.power.stats.EnergyConsumer;
import android.hardware.power.stats.EnergyConsumerResult;
-import android.hardware.power.stats.PowerEntityInfo;
+import android.hardware.power.stats.PowerEntity;
import android.os.Binder;
import android.os.Environment;
import android.os.Handler;
@@ -34,9 +35,9 @@
import com.android.internal.util.function.pooled.PooledLambda;
import com.android.server.SystemService;
import com.android.server.powerstats.PowerStatsHALWrapper.IPowerStatsHALWrapper;
-import com.android.server.powerstats.ProtoStreamUtils.ChannelInfoUtils;
-import com.android.server.powerstats.ProtoStreamUtils.EnergyConsumerIdUtils;
-import com.android.server.powerstats.ProtoStreamUtils.PowerEntityInfoUtils;
+import com.android.server.powerstats.ProtoStreamUtils.ChannelUtils;
+import com.android.server.powerstats.ProtoStreamUtils.EnergyConsumerUtils;
+import com.android.server.powerstats.ProtoStreamUtils.PowerEntityUtils;
import java.io.File;
import java.io.FileDescriptor;
@@ -133,17 +134,17 @@
mPowerStatsLogger.writeResidencyDataToFile(fd);
}
} else if (args.length == 0) {
- pw.println("PowerStatsService dumpsys: available PowerEntityInfos");
- PowerEntityInfo[] powerEntityInfo = getPowerStatsHal().getPowerEntityInfo();
- PowerEntityInfoUtils.dumpsys(powerEntityInfo, pw);
+ pw.println("PowerStatsService dumpsys: available PowerEntities");
+ PowerEntity[] powerEntity = getPowerStatsHal().getPowerEntityInfo();
+ PowerEntityUtils.dumpsys(powerEntity, pw);
- pw.println("PowerStatsService dumpsys: available ChannelInfos");
- ChannelInfo[] channelInfo = getPowerStatsHal().getEnergyMeterInfo();
- ChannelInfoUtils.dumpsys(channelInfo, pw);
+ pw.println("PowerStatsService dumpsys: available Channels");
+ Channel[] channel = getPowerStatsHal().getEnergyMeterInfo();
+ ChannelUtils.dumpsys(channel, pw);
- pw.println("PowerStatsService dumpsys: available EnergyConsumerIds");
- int[] energyConsumerId = getPowerStatsHal().getEnergyConsumerInfo();
- EnergyConsumerIdUtils.dumpsys(energyConsumerId, pw);
+ pw.println("PowerStatsService dumpsys: available EnergyConsumers");
+ EnergyConsumer[] energyConsumer = getPowerStatsHal().getEnergyConsumerInfo();
+ EnergyConsumerUtils.dumpsys(energyConsumer, pw);
}
}
}
diff --git a/services/core/java/com/android/server/powerstats/ProtoStreamUtils.java b/services/core/java/com/android/server/powerstats/ProtoStreamUtils.java
index ab9b3e0..e71b962 100644
--- a/services/core/java/com/android/server/powerstats/ProtoStreamUtils.java
+++ b/services/core/java/com/android/server/powerstats/ProtoStreamUtils.java
@@ -16,11 +16,12 @@
package com.android.server.powerstats;
-import android.hardware.power.stats.ChannelInfo;
+import android.hardware.power.stats.Channel;
+import android.hardware.power.stats.EnergyConsumer;
import android.hardware.power.stats.EnergyConsumerResult;
import android.hardware.power.stats.EnergyMeasurement;
-import android.hardware.power.stats.PowerEntityInfo;
-import android.hardware.power.stats.StateInfo;
+import android.hardware.power.stats.PowerEntity;
+import android.hardware.power.stats.State;
import android.hardware.power.stats.StateResidency;
import android.hardware.power.stats.StateResidencyResult;
import android.util.Slog;
@@ -46,55 +47,54 @@
public class ProtoStreamUtils {
private static final String TAG = ProtoStreamUtils.class.getSimpleName();
- static class PowerEntityInfoUtils {
- public static void packProtoMessage(PowerEntityInfo[] powerEntityInfo,
+ static class PowerEntityUtils {
+ public static void packProtoMessage(PowerEntity[] powerEntity,
ProtoOutputStream pos) {
- if (powerEntityInfo == null) return;
+ if (powerEntity == null) return;
- for (int i = 0; i < powerEntityInfo.length; i++) {
- long peiToken = pos.start(PowerStatsServiceResidencyProto.POWER_ENTITY_INFO);
- pos.write(PowerEntityInfoProto.POWER_ENTITY_ID, powerEntityInfo[i].powerEntityId);
- pos.write(PowerEntityInfoProto.POWER_ENTITY_NAME,
- powerEntityInfo[i].powerEntityName);
- if (powerEntityInfo[i].states != null) {
- final int statesLength = powerEntityInfo[i].states.length;
+ for (int i = 0; i < powerEntity.length; i++) {
+ long peToken = pos.start(PowerStatsServiceResidencyProto.POWER_ENTITY);
+ pos.write(PowerEntityProto.ID, powerEntity[i].id);
+ pos.write(PowerEntityProto.NAME, powerEntity[i].name);
+ if (powerEntity[i].states != null) {
+ final int statesLength = powerEntity[i].states.length;
for (int j = 0; j < statesLength; j++) {
- final StateInfo state = powerEntityInfo[i].states[j];
- long siToken = pos.start(PowerEntityInfoProto.STATES);
- pos.write(StateInfoProto.STATE_ID, state.stateId);
- pos.write(StateInfoProto.STATE_NAME, state.stateName);
- pos.end(siToken);
+ final State state = powerEntity[i].states[j];
+ long stateToken = pos.start(PowerEntityProto.STATES);
+ pos.write(StateProto.ID, state.id);
+ pos.write(StateProto.NAME, state.name);
+ pos.end(stateToken);
}
}
- pos.end(peiToken);
+ pos.end(peToken);
}
}
- public static void print(PowerEntityInfo[] powerEntityInfo) {
- if (powerEntityInfo == null) return;
+ public static void print(PowerEntity[] powerEntity) {
+ if (powerEntity == null) return;
- for (int i = 0; i < powerEntityInfo.length; i++) {
- Slog.d(TAG, "PowerEntityId: " + powerEntityInfo[i].powerEntityId
- + ", PowerEntityName: " + powerEntityInfo[i].powerEntityName);
- if (powerEntityInfo[i].states != null) {
- for (int j = 0; j < powerEntityInfo[i].states.length; j++) {
- Slog.d(TAG, " StateId: " + powerEntityInfo[i].states[j].stateId
- + ", StateName: " + powerEntityInfo[i].states[j].stateName);
+ for (int i = 0; i < powerEntity.length; i++) {
+ Slog.d(TAG, "powerEntityId: " + powerEntity[i].id
+ + ", powerEntityName: " + powerEntity[i].name);
+ if (powerEntity[i].states != null) {
+ for (int j = 0; j < powerEntity[i].states.length; j++) {
+ Slog.d(TAG, " StateId: " + powerEntity[i].states[j].id
+ + ", StateName: " + powerEntity[i].states[j].name);
}
}
}
}
- public static void dumpsys(PowerEntityInfo[] powerEntityInfo, PrintWriter pw) {
- if (powerEntityInfo == null) return;
+ public static void dumpsys(PowerEntity[] powerEntity, PrintWriter pw) {
+ if (powerEntity == null) return;
- for (int i = 0; i < powerEntityInfo.length; i++) {
- pw.println("PowerEntityId: " + powerEntityInfo[i].powerEntityId
- + ", PowerEntityName: " + powerEntityInfo[i].powerEntityName);
- if (powerEntityInfo[i].states != null) {
- for (int j = 0; j < powerEntityInfo[i].states.length; j++) {
- pw.println(" StateId: " + powerEntityInfo[i].states[j].stateId
- + ", StateName: " + powerEntityInfo[i].states[j].stateName);
+ for (int i = 0; i < powerEntity.length; i++) {
+ pw.println("PowerEntityId: " + powerEntity[i].id
+ + ", PowerEntityName: " + powerEntity[i].name);
+ if (powerEntity[i].states != null) {
+ for (int j = 0; j < powerEntity[i].states.length; j++) {
+ pw.println(" StateId: " + powerEntity[i].states[j].id
+ + ", StateName: " + powerEntity[i].states[j].name);
}
}
}
@@ -115,13 +115,13 @@
for (int i = 0; i < stateResidencyResult.length; i++) {
final int stateLength = stateResidencyResult[i].stateResidencyData.length;
long srrToken = pos.start(PowerStatsServiceResidencyProto.STATE_RESIDENCY_RESULT);
- pos.write(StateResidencyResultProto.POWER_ENTITY_ID,
- stateResidencyResult[i].powerEntityId);
+ pos.write(StateResidencyResultProto.ID,
+ stateResidencyResult[i].id);
for (int j = 0; j < stateLength; j++) {
final StateResidency stateResidencyData =
stateResidencyResult[i].stateResidencyData[j];
long srdToken = pos.start(StateResidencyResultProto.STATE_RESIDENCY_DATA);
- pos.write(StateResidencyProto.STATE_ID, stateResidencyData.stateId);
+ pos.write(StateResidencyProto.ID, stateResidencyData.id);
pos.write(StateResidencyProto.TOTAL_TIME_IN_STATE_MS,
stateResidencyData.totalTimeInStateMs);
pos.write(StateResidencyProto.TOTAL_STATE_ENTRY_COUNT,
@@ -170,9 +170,8 @@
while (true) {
try {
switch (pis.nextField()) {
- case (int) StateResidencyResultProto.POWER_ENTITY_ID:
- stateResidencyResult.powerEntityId =
- pis.readInt(StateResidencyResultProto.POWER_ENTITY_ID);
+ case (int) StateResidencyResultProto.ID:
+ stateResidencyResult.id = pis.readInt(StateResidencyResultProto.ID);
break;
case (int) StateResidencyResultProto.STATE_RESIDENCY_DATA:
@@ -205,8 +204,8 @@
while (true) {
try {
switch (pis.nextField()) {
- case (int) StateResidencyProto.STATE_ID:
- stateResidency.stateId = pis.readInt(StateResidencyProto.STATE_ID);
+ case (int) StateResidencyProto.ID:
+ stateResidency.id = pis.readInt(StateResidencyProto.ID);
break;
case (int) StateResidencyProto.TOTAL_TIME_IN_STATE_MS:
@@ -244,10 +243,10 @@
if (stateResidencyResult == null) return;
for (int i = 0; i < stateResidencyResult.length; i++) {
- Slog.d(TAG, "PowerEntityId: " + stateResidencyResult[i].powerEntityId);
+ Slog.d(TAG, "PowerEntityId: " + stateResidencyResult[i].id);
for (int j = 0; j < stateResidencyResult[i].stateResidencyData.length; j++) {
Slog.d(TAG, " StateId: "
- + stateResidencyResult[i].stateResidencyData[j].stateId
+ + stateResidencyResult[i].stateResidencyData[j].id
+ ", TotalTimeInStateMs: "
+ stateResidencyResult[i].stateResidencyData[j].totalTimeInStateMs
+ ", TotalStateEntryCount: "
@@ -259,33 +258,33 @@
}
}
- static class ChannelInfoUtils {
- public static void packProtoMessage(ChannelInfo[] channelInfo, ProtoOutputStream pos) {
- if (channelInfo == null) return;
+ static class ChannelUtils {
+ public static void packProtoMessage(Channel[] channel, ProtoOutputStream pos) {
+ if (channel == null) return;
- for (int i = 0; i < channelInfo.length; i++) {
- long token = pos.start(PowerStatsServiceMeterProto.CHANNEL_INFO);
- pos.write(ChannelInfoProto.CHANNEL_ID, channelInfo[i].channelId);
- pos.write(ChannelInfoProto.CHANNEL_NAME, channelInfo[i].channelName);
+ for (int i = 0; i < channel.length; i++) {
+ long token = pos.start(PowerStatsServiceMeterProto.CHANNEL);
+ pos.write(ChannelProto.ID, channel[i].id);
+ pos.write(ChannelProto.NAME, channel[i].name);
pos.end(token);
}
}
- public static void print(ChannelInfo[] channelInfo) {
- if (channelInfo == null) return;
+ public static void print(Channel[] channel) {
+ if (channel == null) return;
- for (int i = 0; i < channelInfo.length; i++) {
- Slog.d(TAG, "ChannelId: " + channelInfo[i].channelId
- + ", ChannelName: " + channelInfo[i].channelName);
+ for (int i = 0; i < channel.length; i++) {
+ Slog.d(TAG, "ChannelId: " + channel[i].id
+ + ", ChannelName: " + channel[i].name);
}
}
- public static void dumpsys(ChannelInfo[] channelInfo, PrintWriter pw) {
- if (channelInfo == null) return;
+ public static void dumpsys(Channel[] channel, PrintWriter pw) {
+ if (channel == null) return;
- for (int i = 0; i < channelInfo.length; i++) {
- pw.println("ChannelId: " + channelInfo[i].channelId
- + ", ChannelName: " + channelInfo[i].channelName);
+ for (int i = 0; i < channel.length; i++) {
+ pw.println("ChannelId: " + channel[i].id
+ + ", ChannelName: " + channel[i].name);
}
}
}
@@ -303,8 +302,9 @@
for (int i = 0; i < energyMeasurement.length; i++) {
long token = pos.start(PowerStatsServiceMeterProto.ENERGY_MEASUREMENT);
- pos.write(EnergyMeasurementProto.CHANNEL_ID, energyMeasurement[i].channelId);
+ pos.write(EnergyMeasurementProto.ID, energyMeasurement[i].id);
pos.write(EnergyMeasurementProto.TIMESTAMP_MS, energyMeasurement[i].timestampMs);
+ pos.write(EnergyMeasurementProto.DURATION_MS, energyMeasurement[i].durationMs);
pos.write(EnergyMeasurementProto.ENERGY_UWS, energyMeasurement[i].energyUWs);
pos.end(token);
}
@@ -344,9 +344,9 @@
while (true) {
try {
switch (pis.nextField()) {
- case (int) EnergyMeasurementProto.CHANNEL_ID:
- energyMeasurement.channelId =
- pis.readInt(EnergyMeasurementProto.CHANNEL_ID);
+ case (int) EnergyMeasurementProto.ID:
+ energyMeasurement.id =
+ pis.readInt(EnergyMeasurementProto.ID);
break;
case (int) EnergyMeasurementProto.TIMESTAMP_MS:
@@ -354,6 +354,11 @@
pis.readLong(EnergyMeasurementProto.TIMESTAMP_MS);
break;
+ case (int) EnergyMeasurementProto.DURATION_MS:
+ energyMeasurement.durationMs =
+ pis.readLong(EnergyMeasurementProto.DURATION_MS);
+ break;
+
case (int) EnergyMeasurementProto.ENERGY_UWS:
energyMeasurement.energyUWs =
pis.readLong(EnergyMeasurementProto.ENERGY_UWS);
@@ -378,37 +383,48 @@
if (energyMeasurement == null) return;
for (int i = 0; i < energyMeasurement.length; i++) {
- Slog.d(TAG, "ChannelId: " + energyMeasurement[i].channelId
+ Slog.d(TAG, "ChannelId: " + energyMeasurement[i].id
+ ", Timestamp (ms): " + energyMeasurement[i].timestampMs
+ + ", Duration (ms): " + energyMeasurement[i].durationMs
+ ", Energy (uWs): " + energyMeasurement[i].energyUWs);
}
}
}
- static class EnergyConsumerIdUtils {
- public static void packProtoMessage(int[] energyConsumerId, ProtoOutputStream pos) {
- if (energyConsumerId == null) return;
+ static class EnergyConsumerUtils {
+ public static void packProtoMessage(EnergyConsumer[] energyConsumer,
+ ProtoOutputStream pos) {
+ if (energyConsumer == null) return;
- for (int i = 0; i < energyConsumerId.length; i++) {
- long token = pos.start(PowerStatsServiceModelProto.ENERGY_CONSUMER_ID);
- pos.write(EnergyConsumerIdProto.ENERGY_CONSUMER_ID, energyConsumerId[i]);
+ for (int i = 0; i < energyConsumer.length; i++) {
+ long token = pos.start(PowerStatsServiceModelProto.ENERGY_CONSUMER);
+ pos.write(EnergyConsumerProto.ID, energyConsumer[i].id);
+ pos.write(EnergyConsumerProto.ORDINAL, energyConsumer[i].ordinal);
+ pos.write(EnergyConsumerProto.TYPE, energyConsumer[i].type);
+ pos.write(EnergyConsumerProto.NAME, energyConsumer[i].name);
pos.end(token);
}
}
- public static void print(int[] energyConsumerId) {
- if (energyConsumerId == null) return;
+ public static void print(EnergyConsumer[] energyConsumer) {
+ if (energyConsumer == null) return;
- for (int i = 0; i < energyConsumerId.length; i++) {
- Slog.d(TAG, "EnergyConsumerId: " + energyConsumerId[i]);
+ for (int i = 0; i < energyConsumer.length; i++) {
+ Slog.d(TAG, "EnergyConsumerId: " + energyConsumer[i].id
+ + ", Ordinal: " + energyConsumer[i].ordinal
+ + ", Type: " + energyConsumer[i].type
+ + ", Name: " + energyConsumer[i].name);
}
}
- public static void dumpsys(int[] energyConsumerId, PrintWriter pw) {
- if (energyConsumerId == null) return;
+ public static void dumpsys(EnergyConsumer[] energyConsumer, PrintWriter pw) {
+ if (energyConsumer == null) return;
- for (int i = 0; i < energyConsumerId.length; i++) {
- pw.println("EnergyConsumerId: " + energyConsumerId[i]);
+ for (int i = 0; i < energyConsumer.length; i++) {
+ pw.println("EnergyConsumerId: " + energyConsumer[i].id
+ + ", Ordinal: " + energyConsumer[i].ordinal
+ + ", Type: " + energyConsumer[i].type
+ + ", Name: " + energyConsumer[i].name);
}
}
}
@@ -426,8 +442,7 @@
for (int i = 0; i < energyConsumerResult.length; i++) {
long token = pos.start(PowerStatsServiceModelProto.ENERGY_CONSUMER_RESULT);
- pos.write(EnergyConsumerResultProto.ENERGY_CONSUMER_ID,
- energyConsumerResult[i].energyConsumerId);
+ pos.write(EnergyConsumerResultProto.ID, energyConsumerResult[i].id);
pos.write(EnergyConsumerResultProto.TIMESTAMP_MS,
energyConsumerResult[i].timestampMs);
pos.write(EnergyConsumerResultProto.ENERGY_UWS, energyConsumerResult[i].energyUWs);
@@ -469,9 +484,8 @@
while (true) {
try {
switch (pis.nextField()) {
- case (int) EnergyConsumerResultProto.ENERGY_CONSUMER_ID:
- energyConsumerResult.energyConsumerId =
- pis.readInt(EnergyConsumerResultProto.ENERGY_CONSUMER_ID);
+ case (int) EnergyConsumerResultProto.ID:
+ energyConsumerResult.id = pis.readInt(EnergyConsumerResultProto.ID);
break;
case (int) EnergyConsumerResultProto.TIMESTAMP_MS:
@@ -503,7 +517,7 @@
if (energyConsumerResult == null) return;
for (int i = 0; i < energyConsumerResult.length; i++) {
- Slog.d(TAG, "EnergyConsumerId: " + energyConsumerResult[i].energyConsumerId
+ Slog.d(TAG, "EnergyConsumerId: " + energyConsumerResult[i].id
+ ", Timestamp (ms): " + energyConsumerResult[i].timestampMs
+ ", Energy (uWs): " + energyConsumerResult[i].energyUWs);
}
diff --git a/services/core/jni/com_android_server_powerstats_PowerStatsService.cpp b/services/core/jni/com_android_server_powerstats_PowerStatsService.cpp
index f5b851f..ec2549c 100644
--- a/services/core/jni/com_android_server_powerstats_PowerStatsService.cpp
+++ b/services/core/jni/com_android_server_powerstats_PowerStatsService.cpp
@@ -28,37 +28,37 @@
using android::hardware::power::stats::V1_0::RailInfo;
using android::hardware::power::stats::V1_0::Status;
-// ChannelInfo
-static jclass class_CI;
-static jmethodID method_CI_init;
-static jfieldID field_CI_channelId;
-static jfieldID field_CI_channelName;
+// Channel
+static jclass class_C;
+static jmethodID method_C_init;
+static jfieldID field_C_id;
+static jfieldID field_C_name;
// EnergyMeasurement
static jclass class_EM;
static jmethodID method_EM_init;
-static jfieldID field_EM_channelId;
+static jfieldID field_EM_id;
static jfieldID field_EM_timestampMs;
static jfieldID field_EM_durationMs;
static jfieldID field_EM_energyUWs;
-// StateInfo
-static jclass class_SI;
-static jmethodID method_SI_init;
-static jfieldID field_SI_stateId;
-static jfieldID field_SI_stateName;
+// State
+static jclass class_S;
+static jmethodID method_S_init;
+static jfieldID field_S_id;
+static jfieldID field_S_name;
-// PowerEntityInfo
-static jclass class_PEI;
-static jmethodID method_PEI_init;
-static jfieldID field_PEI_powerEntityId;
-static jfieldID field_PEI_powerEntityName;
-static jfieldID field_PEI_states;
+// PowerEntity
+static jclass class_PE;
+static jmethodID method_PE_init;
+static jfieldID field_PE_id;
+static jfieldID field_PE_name;
+static jfieldID field_PE_states;
// StateResidency
static jclass class_SR;
static jmethodID method_SR_init;
-static jfieldID field_SR_stateId;
+static jfieldID field_SR_id;
static jfieldID field_SR_totalTimeInStateMs;
static jfieldID field_SR_totalStateEntryCount;
static jfieldID field_SR_lastEntryTimestampMs;
@@ -66,7 +66,7 @@
// StateResidencyResult
static jclass class_SRR;
static jmethodID method_SRR_init;
-static jfieldID field_SRR_powerEntityId;
+static jfieldID field_SRR_id;
static jfieldID field_SRR_stateResidencyData;
namespace android {
@@ -134,24 +134,21 @@
return nullptr;
}
- jobjectArray powerEntityInfoArray = nullptr;
+ jobjectArray powerEntityArray = nullptr;
Return<void> ret = gPowerStatsHalV1_0_ptr->getPowerEntityInfo(
- [&env, &powerEntityInfoArray](auto infos, auto status) {
+ [&env, &powerEntityArray](auto infos, auto status) {
if (status != Status::SUCCESS) {
ALOGE("Error getting power entity info");
} else {
- powerEntityInfoArray = env->NewObjectArray(infos.size(), class_PEI, nullptr);
+ powerEntityArray = env->NewObjectArray(infos.size(), class_PE, nullptr);
for (int i = 0; i < infos.size(); i++) {
- jstring powerEntityName =
- env->NewStringUTF(infos[i].powerEntityName.c_str());
- jobject powerEntityInfo = env->NewObject(class_PEI, method_PEI_init);
- env->SetIntField(powerEntityInfo, field_PEI_powerEntityId,
- infos[i].powerEntityId);
- env->SetObjectField(powerEntityInfo, field_PEI_powerEntityName,
- powerEntityName);
- env->SetObjectArrayElement(powerEntityInfoArray, i, powerEntityInfo);
- env->DeleteLocalRef(powerEntityName);
- env->DeleteLocalRef(powerEntityInfo);
+ jstring name = env->NewStringUTF(infos[i].powerEntityName.c_str());
+ jobject powerEntity = env->NewObject(class_PE, method_PE_init);
+ env->SetIntField(powerEntity, field_PE_id, infos[i].powerEntityId);
+ env->SetObjectField(powerEntity, field_PE_name, name);
+ env->SetObjectArrayElement(powerEntityArray, i, powerEntity);
+ env->DeleteLocalRef(name);
+ env->DeleteLocalRef(powerEntity);
}
}
});
@@ -159,47 +156,44 @@
return nullptr;
}
- ret = gPowerStatsHalV1_0_ptr->getPowerEntityStateInfo(
- {}, [&env, &powerEntityInfoArray](auto infos, auto status) {
- if (status != Status::SUCCESS) {
- ALOGE("Error getting power entity state info");
- } else {
- for (int i = 0; i < infos.size(); i++) {
- jobjectArray stateInfoArray =
- env->NewObjectArray(infos[i].states.size(), class_SI, nullptr);
- for (int j = 0; j < infos[i].states.size(); j++) {
- jstring powerEntityStateName = env->NewStringUTF(
- infos[i].states[j].powerEntityStateName.c_str());
- jobject stateInfo = env->NewObject(class_SI, method_SI_init);
- env->SetIntField(stateInfo, field_SI_stateId,
- infos[i].states[j].powerEntityStateId);
- env->SetObjectField(stateInfo, field_SI_stateName,
- powerEntityStateName);
- env->SetObjectArrayElement(stateInfoArray, j, stateInfo);
- env->DeleteLocalRef(powerEntityStateName);
- env->DeleteLocalRef(stateInfo);
- }
+ ret = gPowerStatsHalV1_0_ptr
+ ->getPowerEntityStateInfo({}, [&env, &powerEntityArray](auto infos, auto status) {
+ if (status != Status::SUCCESS) {
+ ALOGE("Error getting power entity state info");
+ } else {
+ for (int i = 0; i < infos.size(); i++) {
+ jobjectArray stateArray =
+ env->NewObjectArray(infos[i].states.size(), class_S, nullptr);
+ for (int j = 0; j < infos[i].states.size(); j++) {
+ jstring name = env->NewStringUTF(
+ infos[i].states[j].powerEntityStateName.c_str());
+ jobject state = env->NewObject(class_S, method_S_init);
+ env->SetIntField(state, field_S_id,
+ infos[i].states[j].powerEntityStateId);
+ env->SetObjectField(state, field_S_name, name);
+ env->SetObjectArrayElement(stateArray, j, state);
+ env->DeleteLocalRef(name);
+ env->DeleteLocalRef(state);
+ }
- for (int j = 0; j < env->GetArrayLength(powerEntityInfoArray); j++) {
- jobject powerEntityInfo =
- env->GetObjectArrayElement(powerEntityInfoArray, j);
- if (env->GetIntField(powerEntityInfo, field_PEI_powerEntityId) ==
- infos[i].powerEntityId) {
- env->SetObjectField(powerEntityInfo, field_PEI_states,
- stateInfoArray);
- env->SetObjectArrayElement(powerEntityInfoArray, j,
- powerEntityInfo);
- break;
- }
- }
- }
- }
- });
+ for (int j = 0; j < env->GetArrayLength(powerEntityArray); j++) {
+ jobject powerEntity =
+ env->GetObjectArrayElement(powerEntityArray, j);
+ if (env->GetIntField(powerEntity, field_PE_id) ==
+ infos[i].powerEntityId) {
+ env->SetObjectField(powerEntity, field_PE_states, stateArray);
+ env->SetObjectArrayElement(powerEntityArray, j, powerEntity);
+ break;
+ }
+ }
+ }
+ }
+ });
if (!checkResult(ret, __func__)) {
return nullptr;
}
- return powerEntityInfoArray;
+ return powerEntityArray;
}
static jobjectArray nativeGetStateResidency(JNIEnv *env, jclass clazz, jintArray powerEntityIds) {
@@ -233,7 +227,7 @@
nullptr);
for (int j = 0; j < results[i].stateResidencyData.size(); j++) {
jobject stateResidency = env->NewObject(class_SR, method_SR_init);
- env->SetIntField(stateResidency, field_SR_stateId,
+ env->SetIntField(stateResidency, field_SR_id,
results[i].stateResidencyData[j].powerEntityStateId);
env->SetLongField(stateResidency, field_SR_totalTimeInStateMs,
results[i].stateResidencyData[j].totalTimeInStateMs);
@@ -249,7 +243,7 @@
env->DeleteLocalRef(stateResidency);
}
jobject stateResidencyResult = env->NewObject(class_SRR, method_SRR_init);
- env->SetIntField(stateResidencyResult, field_SRR_powerEntityId,
+ env->SetIntField(stateResidencyResult, field_SRR_id,
results[i].powerEntityId);
env->SetObjectField(stateResidencyResult, field_SRR_stateResidencyData,
stateResidencyArray);
@@ -274,21 +268,21 @@
return nullptr;
}
- jobjectArray channelInfoArray = nullptr;
- Return<void> ret = gPowerStatsHalV1_0_ptr->getRailInfo(
- [&env, &channelInfoArray](auto railInfo, auto status) {
+ jobjectArray channelArray = nullptr;
+ Return<void> ret =
+ gPowerStatsHalV1_0_ptr->getRailInfo([&env, &channelArray](auto railInfo, auto status) {
if (status != Status::SUCCESS) {
ALOGW("Error getting rail info");
} else {
- channelInfoArray = env->NewObjectArray(railInfo.size(), class_CI, nullptr);
+ channelArray = env->NewObjectArray(railInfo.size(), class_C, nullptr);
for (int i = 0; i < railInfo.size(); i++) {
- jstring channelName = env->NewStringUTF(railInfo[i].railName.c_str());
- jobject channelInfo = env->NewObject(class_CI, method_CI_init);
- env->SetIntField(channelInfo, field_CI_channelId, railInfo[i].index);
- env->SetObjectField(channelInfo, field_CI_channelName, channelName);
- env->SetObjectArrayElement(channelInfoArray, i, channelInfo);
- env->DeleteLocalRef(channelName);
- env->DeleteLocalRef(channelInfo);
+ jstring name = env->NewStringUTF(railInfo[i].railName.c_str());
+ jobject channel = env->NewObject(class_C, method_C_init);
+ env->SetIntField(channel, field_C_id, railInfo[i].index);
+ env->SetObjectField(channel, field_C_name, name);
+ env->SetObjectArrayElement(channelArray, i, channel);
+ env->DeleteLocalRef(name);
+ env->DeleteLocalRef(channel);
}
}
});
@@ -298,7 +292,7 @@
return nullptr;
}
- return channelInfoArray;
+ return channelArray;
}
static jobjectArray nativeReadEnergyMeters(JNIEnv *env, jclass clazz, jintArray channelIds) {
@@ -331,8 +325,7 @@
for (int i = 0; i < energyData.size(); i++) {
jobject energyMeasurement =
env->NewObject(class_EM, method_EM_init);
- env->SetIntField(energyMeasurement,
- field_EM_channelId,
+ env->SetIntField(energyMeasurement, field_EM_id,
energyData[i].index);
env->SetLongField(energyMeasurement,
field_EM_timestampMs,
@@ -360,43 +353,42 @@
static jboolean nativeInit(JNIEnv *env, jclass clazz) {
std::lock_guard<std::mutex> lock(gPowerStatsHalMutex);
- // ChannelInfo
- jclass temp = env->FindClass("android/hardware/power/stats/ChannelInfo");
- class_CI = (jclass)env->NewGlobalRef(temp);
- method_CI_init = env->GetMethodID(class_CI, "<init>", "()V");
- field_CI_channelId = env->GetFieldID(class_CI, "channelId", "I");
- field_CI_channelName = env->GetFieldID(class_CI, "channelName", "Ljava/lang/String;");
+ // Channel
+ jclass temp = env->FindClass("android/hardware/power/stats/Channel");
+ class_C = (jclass)env->NewGlobalRef(temp);
+ method_C_init = env->GetMethodID(class_C, "<init>", "()V");
+ field_C_id = env->GetFieldID(class_C, "id", "I");
+ field_C_name = env->GetFieldID(class_C, "name", "Ljava/lang/String;");
// EnergyMeasurement
temp = env->FindClass("android/hardware/power/stats/EnergyMeasurement");
class_EM = (jclass)env->NewGlobalRef(temp);
method_EM_init = env->GetMethodID(class_EM, "<init>", "()V");
- field_EM_channelId = env->GetFieldID(class_EM, "channelId", "I");
+ field_EM_id = env->GetFieldID(class_EM, "id", "I");
field_EM_timestampMs = env->GetFieldID(class_EM, "timestampMs", "J");
field_EM_durationMs = env->GetFieldID(class_EM, "durationMs", "J");
field_EM_energyUWs = env->GetFieldID(class_EM, "energyUWs", "J");
- // StateInfo
- temp = env->FindClass("android/hardware/power/stats/StateInfo");
- class_SI = (jclass)env->NewGlobalRef(temp);
- method_SI_init = env->GetMethodID(class_SI, "<init>", "()V");
- field_SI_stateId = env->GetFieldID(class_SI, "stateId", "I");
- field_SI_stateName = env->GetFieldID(class_SI, "stateName", "Ljava/lang/String;");
+ // State
+ temp = env->FindClass("android/hardware/power/stats/State");
+ class_S = (jclass)env->NewGlobalRef(temp);
+ method_S_init = env->GetMethodID(class_S, "<init>", "()V");
+ field_S_id = env->GetFieldID(class_S, "id", "I");
+ field_S_name = env->GetFieldID(class_S, "name", "Ljava/lang/String;");
- // PowerEntityInfo
- temp = env->FindClass("android/hardware/power/stats/PowerEntityInfo");
- class_PEI = (jclass)env->NewGlobalRef(temp);
- method_PEI_init = env->GetMethodID(class_PEI, "<init>", "()V");
- field_PEI_powerEntityId = env->GetFieldID(class_PEI, "powerEntityId", "I");
- field_PEI_powerEntityName = env->GetFieldID(class_PEI, "powerEntityName", "Ljava/lang/String;");
- field_PEI_states =
- env->GetFieldID(class_PEI, "states", "[Landroid/hardware/power/stats/StateInfo;");
+ // PowerEntity
+ temp = env->FindClass("android/hardware/power/stats/PowerEntity");
+ class_PE = (jclass)env->NewGlobalRef(temp);
+ method_PE_init = env->GetMethodID(class_PE, "<init>", "()V");
+ field_PE_id = env->GetFieldID(class_PE, "id", "I");
+ field_PE_name = env->GetFieldID(class_PE, "name", "Ljava/lang/String;");
+ field_PE_states = env->GetFieldID(class_PE, "states", "[Landroid/hardware/power/stats/State;");
// StateResidency
temp = env->FindClass("android/hardware/power/stats/StateResidency");
class_SR = (jclass)env->NewGlobalRef(temp);
method_SR_init = env->GetMethodID(class_SR, "<init>", "()V");
- field_SR_stateId = env->GetFieldID(class_SR, "stateId", "I");
+ field_SR_id = env->GetFieldID(class_SR, "id", "I");
field_SR_totalTimeInStateMs = env->GetFieldID(class_SR, "totalTimeInStateMs", "J");
field_SR_totalStateEntryCount = env->GetFieldID(class_SR, "totalStateEntryCount", "J");
field_SR_lastEntryTimestampMs = env->GetFieldID(class_SR, "lastEntryTimestampMs", "J");
@@ -405,7 +397,7 @@
temp = env->FindClass("android/hardware/power/stats/StateResidencyResult");
class_SRR = (jclass)env->NewGlobalRef(temp);
method_SRR_init = env->GetMethodID(class_SRR, "<init>", "()V");
- field_SRR_powerEntityId = env->GetFieldID(class_SRR, "powerEntityId", "I");
+ field_SRR_id = env->GetFieldID(class_SRR, "id", "I");
field_SRR_stateResidencyData =
env->GetFieldID(class_SRR, "stateResidencyData",
"[Landroid/hardware/power/stats/StateResidency;");
@@ -420,11 +412,11 @@
static const JNINativeMethod method_table[] = {
{"nativeInit", "()Z", (void *)nativeInit},
- {"nativeGetPowerEntityInfo", "()[Landroid/hardware/power/stats/PowerEntityInfo;",
+ {"nativeGetPowerEntityInfo", "()[Landroid/hardware/power/stats/PowerEntity;",
(void *)nativeGetPowerEntityInfo},
{"nativeGetStateResidency", "([I)[Landroid/hardware/power/stats/StateResidencyResult;",
(void *)nativeGetStateResidency},
- {"nativeGetEnergyMeterInfo", "()[Landroid/hardware/power/stats/ChannelInfo;",
+ {"nativeGetEnergyMeterInfo", "()[Landroid/hardware/power/stats/Channel;",
(void *)nativeGetEnergyMeterInfo},
{"nativeReadEnergyMeters", "([I)[Landroid/hardware/power/stats/EnergyMeasurement;",
(void *)nativeReadEnergyMeters},
diff --git a/services/tests/servicestests/src/com/android/server/powerstats/PowerStatsServiceTest.java b/services/tests/servicestests/src/com/android/server/powerstats/PowerStatsServiceTest.java
index a5039fb..b6ae855 100644
--- a/services/tests/servicestests/src/com/android/server/powerstats/PowerStatsServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/powerstats/PowerStatsServiceTest.java
@@ -20,11 +20,12 @@
import static org.junit.Assert.fail;
import android.content.Context;
-import android.hardware.power.stats.ChannelInfo;
+import android.hardware.power.stats.Channel;
+import android.hardware.power.stats.EnergyConsumer;
import android.hardware.power.stats.EnergyConsumerResult;
import android.hardware.power.stats.EnergyMeasurement;
-import android.hardware.power.stats.PowerEntityInfo;
-import android.hardware.power.stats.StateInfo;
+import android.hardware.power.stats.PowerEntity;
+import android.hardware.power.stats.State;
import android.hardware.power.stats.StateResidency;
import android.hardware.power.stats.StateResidencyResult;
@@ -32,11 +33,11 @@
import com.android.server.SystemService;
import com.android.server.powerstats.PowerStatsHALWrapper.IPowerStatsHALWrapper;
-import com.android.server.powerstats.nano.PowerEntityInfoProto;
+import com.android.server.powerstats.nano.PowerEntityProto;
import com.android.server.powerstats.nano.PowerStatsServiceMeterProto;
import com.android.server.powerstats.nano.PowerStatsServiceModelProto;
import com.android.server.powerstats.nano.PowerStatsServiceResidencyProto;
-import com.android.server.powerstats.nano.StateInfoProto;
+import com.android.server.powerstats.nano.StateProto;
import com.android.server.powerstats.nano.StateResidencyProto;
import com.android.server.powerstats.nano.StateResidencyResultProto;
@@ -68,6 +69,7 @@
private static final String CHANNEL_NAME = "channelname";
private static final String POWER_ENTITY_NAME = "powerentityinfo";
private static final String STATE_NAME = "stateinfo";
+ private static final String ENERGY_CONSUMER_NAME = "energyconsumer";
private static final int ENERGY_METER_COUNT = 8;
private static final int ENERGY_CONSUMER_COUNT = 2;
private static final int POWER_ENTITY_COUNT = 3;
@@ -142,20 +144,20 @@
public static final class TestPowerStatsHALWrapper implements IPowerStatsHALWrapper {
@Override
- public PowerEntityInfo[] getPowerEntityInfo() {
- PowerEntityInfo[] powerEntityInfoList = new PowerEntityInfo[POWER_ENTITY_COUNT];
- for (int i = 0; i < powerEntityInfoList.length; i++) {
- powerEntityInfoList[i] = new PowerEntityInfo();
- powerEntityInfoList[i].powerEntityId = i;
- powerEntityInfoList[i].powerEntityName = new String(POWER_ENTITY_NAME + i);
- powerEntityInfoList[i].states = new StateInfo[STATE_INFO_COUNT];
- for (int j = 0; j < powerEntityInfoList[i].states.length; j++) {
- powerEntityInfoList[i].states[j] = new StateInfo();
- powerEntityInfoList[i].states[j].stateId = j;
- powerEntityInfoList[i].states[j].stateName = new String(STATE_NAME + j);
+ public PowerEntity[] getPowerEntityInfo() {
+ PowerEntity[] powerEntityList = new PowerEntity[POWER_ENTITY_COUNT];
+ for (int i = 0; i < powerEntityList.length; i++) {
+ powerEntityList[i] = new PowerEntity();
+ powerEntityList[i].id = i;
+ powerEntityList[i].name = new String(POWER_ENTITY_NAME + i);
+ powerEntityList[i].states = new State[STATE_INFO_COUNT];
+ for (int j = 0; j < powerEntityList[i].states.length; j++) {
+ powerEntityList[i].states[j] = new State();
+ powerEntityList[i].states[j].id = j;
+ powerEntityList[i].states[j].name = new String(STATE_NAME + j);
}
}
- return powerEntityInfoList;
+ return powerEntityList;
}
@Override
@@ -164,12 +166,12 @@
new StateResidencyResult[POWER_ENTITY_COUNT];
for (int i = 0; i < stateResidencyResultList.length; i++) {
stateResidencyResultList[i] = new StateResidencyResult();
- stateResidencyResultList[i].powerEntityId = i;
+ stateResidencyResultList[i].id = i;
stateResidencyResultList[i].stateResidencyData =
new StateResidency[STATE_RESIDENCY_COUNT];
for (int j = 0; j < stateResidencyResultList[i].stateResidencyData.length; j++) {
stateResidencyResultList[i].stateResidencyData[j] = new StateResidency();
- stateResidencyResultList[i].stateResidencyData[j].stateId = j;
+ stateResidencyResultList[i].stateResidencyData[j].id = j;
stateResidencyResultList[i].stateResidencyData[j].totalTimeInStateMs = j;
stateResidencyResultList[i].stateResidencyData[j].totalStateEntryCount = j;
stateResidencyResultList[i].stateResidencyData[j].lastEntryTimestampMs = j;
@@ -180,12 +182,16 @@
}
@Override
- public int[] getEnergyConsumerInfo() {
- int[] energyConsumerInfoList = new int[ENERGY_CONSUMER_COUNT];
- for (int i = 0; i < energyConsumerInfoList.length; i++) {
- energyConsumerInfoList[i] = i;
+ public EnergyConsumer[] getEnergyConsumerInfo() {
+ EnergyConsumer[] energyConsumerList = new EnergyConsumer[ENERGY_CONSUMER_COUNT];
+ for (int i = 0; i < energyConsumerList.length; i++) {
+ energyConsumerList[i] = new EnergyConsumer();
+ energyConsumerList[i].id = i;
+ energyConsumerList[i].ordinal = i;
+ energyConsumerList[i].type = (byte) i;
+ energyConsumerList[i].name = new String(ENERGY_CONSUMER_NAME + i);
}
- return energyConsumerInfoList;
+ return energyConsumerList;
}
@Override
@@ -194,7 +200,7 @@
new EnergyConsumerResult[ENERGY_CONSUMER_COUNT];
for (int i = 0; i < energyConsumedList.length; i++) {
energyConsumedList[i] = new EnergyConsumerResult();
- energyConsumedList[i].energyConsumerId = i;
+ energyConsumedList[i].id = i;
energyConsumedList[i].timestampMs = i;
energyConsumedList[i].energyUWs = i;
}
@@ -202,14 +208,14 @@
}
@Override
- public ChannelInfo[] getEnergyMeterInfo() {
- ChannelInfo[] energyMeterInfoList = new ChannelInfo[ENERGY_METER_COUNT];
- for (int i = 0; i < energyMeterInfoList.length; i++) {
- energyMeterInfoList[i] = new ChannelInfo();
- energyMeterInfoList[i].channelId = i;
- energyMeterInfoList[i].channelName = new String(CHANNEL_NAME + i);
+ public Channel[] getEnergyMeterInfo() {
+ Channel[] energyMeterList = new Channel[ENERGY_METER_COUNT];
+ for (int i = 0; i < energyMeterList.length; i++) {
+ energyMeterList[i] = new Channel();
+ energyMeterList[i].id = i;
+ energyMeterList[i].name = new String(CHANNEL_NAME + i);
}
- return energyMeterInfoList;
+ return energyMeterList;
}
@Override
@@ -217,8 +223,9 @@
EnergyMeasurement[] energyMeasurementList = new EnergyMeasurement[ENERGY_METER_COUNT];
for (int i = 0; i < energyMeasurementList.length; i++) {
energyMeasurementList[i] = new EnergyMeasurement();
- energyMeasurementList[i].channelId = i;
+ energyMeasurementList[i].id = i;
energyMeasurementList[i].timestampMs = i;
+ energyMeasurementList[i].durationMs = i;
energyMeasurementList[i].energyUWs = i;
}
return energyMeasurementList;
@@ -260,18 +267,19 @@
// Parse the incident data into a PowerStatsServiceMeterProto object.
PowerStatsServiceMeterProto pssProto = PowerStatsServiceMeterProto.parseFrom(fileContent);
- // Validate the channelInfo array matches what was written to on-device storage.
- assertTrue(pssProto.channelInfo.length == ENERGY_METER_COUNT);
- for (int i = 0; i < pssProto.channelInfo.length; i++) {
- assertTrue(pssProto.channelInfo[i].channelId == i);
- assertTrue(pssProto.channelInfo[i].channelName.equals(CHANNEL_NAME + i));
+ // Validate the channel array matches what was written to on-device storage.
+ assertTrue(pssProto.channel.length == ENERGY_METER_COUNT);
+ for (int i = 0; i < pssProto.channel.length; i++) {
+ assertTrue(pssProto.channel[i].id == i);
+ assertTrue(pssProto.channel[i].name.equals(CHANNEL_NAME + i));
}
// Validate the energyMeasurement array matches what was written to on-device storage.
assertTrue(pssProto.energyMeasurement.length == ENERGY_METER_COUNT);
for (int i = 0; i < pssProto.energyMeasurement.length; i++) {
- assertTrue(pssProto.energyMeasurement[i].channelId == i);
+ assertTrue(pssProto.energyMeasurement[i].id == i);
assertTrue(pssProto.energyMeasurement[i].timestampMs == i);
+ assertTrue(pssProto.energyMeasurement[i].durationMs == i);
assertTrue(pssProto.energyMeasurement[i].energyUws == i);
}
}
@@ -301,16 +309,16 @@
// Parse the incident data into a PowerStatsServiceModelProto object.
PowerStatsServiceModelProto pssProto = PowerStatsServiceModelProto.parseFrom(fileContent);
- // Validate the energyConsumerId array matches what was written to on-device storage.
- assertTrue(pssProto.energyConsumerId.length == ENERGY_CONSUMER_COUNT);
- for (int i = 0; i < pssProto.energyConsumerId.length; i++) {
- assertTrue(pssProto.energyConsumerId[i].energyConsumerId == i);
+ // Validate the energyConsumer array matches what was written to on-device storage.
+ assertTrue(pssProto.energyConsumer.length == ENERGY_CONSUMER_COUNT);
+ for (int i = 0; i < pssProto.energyConsumer.length; i++) {
+ assertTrue(pssProto.energyConsumer[i].id == i);
}
// Validate the energyConsumerResult array matches what was written to on-device storage.
assertTrue(pssProto.energyConsumerResult.length == ENERGY_CONSUMER_COUNT);
for (int i = 0; i < pssProto.energyConsumerResult.length; i++) {
- assertTrue(pssProto.energyConsumerResult[i].energyConsumerId == i);
+ assertTrue(pssProto.energyConsumerResult[i].id == i);
assertTrue(pssProto.energyConsumerResult[i].timestampMs == i);
assertTrue(pssProto.energyConsumerResult[i].energyUws == i);
}
@@ -342,16 +350,16 @@
PowerStatsServiceResidencyProto pssProto =
PowerStatsServiceResidencyProto.parseFrom(fileContent);
- // Validate the powerEntityInfo array matches what was written to on-device storage.
- assertTrue(pssProto.powerEntityInfo.length == POWER_ENTITY_COUNT);
- for (int i = 0; i < pssProto.powerEntityInfo.length; i++) {
- PowerEntityInfoProto powerEntityInfo = pssProto.powerEntityInfo[i];
- assertTrue(powerEntityInfo.powerEntityId == i);
- assertTrue(powerEntityInfo.powerEntityName.equals(POWER_ENTITY_NAME + i));
- for (int j = 0; j < powerEntityInfo.states.length; j++) {
- StateInfoProto stateInfo = powerEntityInfo.states[j];
- assertTrue(stateInfo.stateId == j);
- assertTrue(stateInfo.stateName.equals(STATE_NAME + j));
+ // Validate the powerEntity array matches what was written to on-device storage.
+ assertTrue(pssProto.powerEntity.length == POWER_ENTITY_COUNT);
+ for (int i = 0; i < pssProto.powerEntity.length; i++) {
+ PowerEntityProto powerEntity = pssProto.powerEntity[i];
+ assertTrue(powerEntity.id == i);
+ assertTrue(powerEntity.name.equals(POWER_ENTITY_NAME + i));
+ for (int j = 0; j < powerEntity.states.length; j++) {
+ StateProto state = powerEntity.states[j];
+ assertTrue(state.id == j);
+ assertTrue(state.name.equals(STATE_NAME + j));
}
}
@@ -359,11 +367,11 @@
assertTrue(pssProto.stateResidencyResult.length == POWER_ENTITY_COUNT);
for (int i = 0; i < pssProto.stateResidencyResult.length; i++) {
StateResidencyResultProto stateResidencyResult = pssProto.stateResidencyResult[i];
- assertTrue(stateResidencyResult.powerEntityId == i);
+ assertTrue(stateResidencyResult.id == i);
assertTrue(stateResidencyResult.stateResidencyData.length == STATE_RESIDENCY_COUNT);
for (int j = 0; j < stateResidencyResult.stateResidencyData.length; j++) {
StateResidencyProto stateResidency = stateResidencyResult.stateResidencyData[j];
- assertTrue(stateResidency.stateId == j);
+ assertTrue(stateResidency.id == j);
assertTrue(stateResidency.totalTimeInStateMs == j);
assertTrue(stateResidency.totalStateEntryCount == j);
assertTrue(stateResidency.lastEntryTimestampMs == j);
@@ -400,12 +408,12 @@
// Parse the incident data into a PowerStatsServiceMeterProto object.
PowerStatsServiceMeterProto pssProto = PowerStatsServiceMeterProto.parseFrom(fileContent);
- // Valid channelInfo data is written to the incident report in the call to
+ // Valid channel data is written to the incident report in the call to
// mPowerStatsLogger.writeMeterDataToFile().
- assertTrue(pssProto.channelInfo.length == ENERGY_METER_COUNT);
- for (int i = 0; i < pssProto.channelInfo.length; i++) {
- assertTrue(pssProto.channelInfo[i].channelId == i);
- assertTrue(pssProto.channelInfo[i].channelName.equals(CHANNEL_NAME + i));
+ assertTrue(pssProto.channel.length == ENERGY_METER_COUNT);
+ for (int i = 0; i < pssProto.channel.length; i++) {
+ assertTrue(pssProto.channel[i].id == i);
+ assertTrue(pssProto.channel[i].name.equals(CHANNEL_NAME + i));
}
// No energyMeasurements should be written to the incident report since it
@@ -442,11 +450,11 @@
// Parse the incident data into a PowerStatsServiceModelProto object.
PowerStatsServiceModelProto pssProto = PowerStatsServiceModelProto.parseFrom(fileContent);
- // Valid energyConsumerId data is written to the incident report in the call to
+ // Valid energyConsumer data is written to the incident report in the call to
// mPowerStatsLogger.writeModelDataToFile().
- assertTrue(pssProto.energyConsumerId.length == ENERGY_CONSUMER_COUNT);
- for (int i = 0; i < pssProto.energyConsumerId.length; i++) {
- assertTrue(pssProto.energyConsumerId[i].energyConsumerId == i);
+ assertTrue(pssProto.energyConsumer.length == ENERGY_CONSUMER_COUNT);
+ for (int i = 0; i < pssProto.energyConsumer.length; i++) {
+ assertTrue(pssProto.energyConsumer[i].id == i);
}
// No energyConsumerResults should be written to the incident report since it
@@ -484,17 +492,17 @@
PowerStatsServiceResidencyProto pssProto =
PowerStatsServiceResidencyProto.parseFrom(fileContent);
- // Valid powerEntityInfo data is written to the incident report in the call to
+ // Valid powerEntity data is written to the incident report in the call to
// mPowerStatsLogger.writeResidencyDataToFile().
- assertTrue(pssProto.powerEntityInfo.length == POWER_ENTITY_COUNT);
- for (int i = 0; i < pssProto.powerEntityInfo.length; i++) {
- PowerEntityInfoProto powerEntityInfo = pssProto.powerEntityInfo[i];
- assertTrue(powerEntityInfo.powerEntityId == i);
- assertTrue(powerEntityInfo.powerEntityName.equals(POWER_ENTITY_NAME + i));
- for (int j = 0; j < powerEntityInfo.states.length; j++) {
- StateInfoProto stateInfo = powerEntityInfo.states[j];
- assertTrue(stateInfo.stateId == j);
- assertTrue(stateInfo.stateName.equals(STATE_NAME + j));
+ assertTrue(pssProto.powerEntity.length == POWER_ENTITY_COUNT);
+ for (int i = 0; i < pssProto.powerEntity.length; i++) {
+ PowerEntityProto powerEntity = pssProto.powerEntity[i];
+ assertTrue(powerEntity.id == i);
+ assertTrue(powerEntity.name.equals(POWER_ENTITY_NAME + i));
+ for (int j = 0; j < powerEntity.states.length; j++) {
+ StateProto state = powerEntity.states[j];
+ assertTrue(state.id == j);
+ assertTrue(state.name.equals(STATE_NAME + j));
}
}
@@ -533,12 +541,12 @@
// Parse the incident data into a PowerStatsServiceMeterProto object.
PowerStatsServiceMeterProto pssProto = PowerStatsServiceMeterProto.parseFrom(fileContent);
- // Valid channelInfo data is written to the incident report in the call to
+ // Valid channel data is written to the incident report in the call to
// mPowerStatsLogger.writeMeterDataToFile().
- assertTrue(pssProto.channelInfo.length == ENERGY_METER_COUNT);
- for (int i = 0; i < pssProto.channelInfo.length; i++) {
- assertTrue(pssProto.channelInfo[i].channelId == i);
- assertTrue(pssProto.channelInfo[i].channelName.equals(CHANNEL_NAME + i));
+ assertTrue(pssProto.channel.length == ENERGY_METER_COUNT);
+ for (int i = 0; i < pssProto.channel.length; i++) {
+ assertTrue(pssProto.channel[i].id == i);
+ assertTrue(pssProto.channel[i].name.equals(CHANNEL_NAME + i));
}
// No energyMeasurements should be written to the incident report since the
@@ -576,11 +584,11 @@
// Parse the incident data into a PowerStatsServiceModelProto object.
PowerStatsServiceModelProto pssProto = PowerStatsServiceModelProto.parseFrom(fileContent);
- // Valid energyConsumerId data is written to the incident report in the call to
+ // Valid energyConsumer data is written to the incident report in the call to
// mPowerStatsLogger.writeModelDataToFile().
- assertTrue(pssProto.energyConsumerId.length == ENERGY_CONSUMER_COUNT);
- for (int i = 0; i < pssProto.energyConsumerId.length; i++) {
- assertTrue(pssProto.energyConsumerId[i].energyConsumerId == i);
+ assertTrue(pssProto.energyConsumer.length == ENERGY_CONSUMER_COUNT);
+ for (int i = 0; i < pssProto.energyConsumer.length; i++) {
+ assertTrue(pssProto.energyConsumer[i].id == i);
}
// No energyConsumerResults should be written to the incident report since the
@@ -619,17 +627,17 @@
PowerStatsServiceResidencyProto pssProto =
PowerStatsServiceResidencyProto.parseFrom(fileContent);
- // Valid powerEntityInfo data is written to the incident report in the call to
+ // Valid powerEntity data is written to the incident report in the call to
// mPowerStatsLogger.writeResidencyDataToFile().
- assertTrue(pssProto.powerEntityInfo.length == POWER_ENTITY_COUNT);
- for (int i = 0; i < pssProto.powerEntityInfo.length; i++) {
- PowerEntityInfoProto powerEntityInfo = pssProto.powerEntityInfo[i];
- assertTrue(powerEntityInfo.powerEntityId == i);
- assertTrue(powerEntityInfo.powerEntityName.equals(POWER_ENTITY_NAME + i));
- for (int j = 0; j < powerEntityInfo.states.length; j++) {
- StateInfoProto stateInfo = powerEntityInfo.states[j];
- assertTrue(stateInfo.stateId == j);
- assertTrue(stateInfo.stateName.equals(STATE_NAME + j));
+ assertTrue(pssProto.powerEntity.length == POWER_ENTITY_COUNT);
+ for (int i = 0; i < pssProto.powerEntity.length; i++) {
+ PowerEntityProto powerEntity = pssProto.powerEntity[i];
+ assertTrue(powerEntity.id == i);
+ assertTrue(powerEntity.name.equals(POWER_ENTITY_NAME + i));
+ for (int j = 0; j < powerEntity.states.length; j++) {
+ StateProto state = powerEntity.states[j];
+ assertTrue(state.id == j);
+ assertTrue(state.name.equals(STATE_NAME + j));
}
}
diff --git a/tools/powerstats/PowerStatsServiceProtoParser.java b/tools/powerstats/PowerStatsServiceProtoParser.java
index 97a2a40..e4135b5 100644
--- a/tools/powerstats/PowerStatsServiceProtoParser.java
+++ b/tools/powerstats/PowerStatsServiceProtoParser.java
@@ -27,16 +27,16 @@
public class PowerStatsServiceProtoParser {
private static void printEnergyMeterInfo(PowerStatsServiceMeterProto proto) {
String csvHeader = new String();
- for (int i = 0; i < proto.getChannelInfoCount(); i++) {
- ChannelInfoProto energyMeterInfo = proto.getChannelInfo(i);
- csvHeader += "Index,Timestamp," + energyMeterInfo.getChannelId()
- + "/" + energyMeterInfo.getChannelName() + ",";
+ for (int i = 0; i < proto.getChannelCount(); i++) {
+ ChannelProto energyMeterInfo = proto.getChannel(i);
+ csvHeader += "Index,Timestamp,Duration," + energyMeterInfo.getId()
+ + "/" + energyMeterInfo.getName() + ",";
}
System.out.println(csvHeader);
}
private static void printEnergyMeasurements(PowerStatsServiceMeterProto proto) {
- int energyMeterInfoCount = proto.getChannelInfoCount();
+ int energyMeterInfoCount = proto.getChannelCount();
if (energyMeterInfoCount > 0) {
int energyMeasurementCount = proto.getEnergyMeasurementCount();
@@ -47,8 +47,9 @@
for (int j = 0; j < energyMeterInfoCount; j++) {
EnergyMeasurementProto energyMeasurement =
proto.getEnergyMeasurement(i * energyMeterInfoCount + j);
- csvRow += energyMeasurement.getChannelId() + ","
+ csvRow += energyMeasurement.getId() + ","
+ energyMeasurement.getTimestampMs() + ","
+ + energyMeasurement.getDurationMs() + ","
+ energyMeasurement.getEnergyUws() + ",";
}
System.out.println(csvRow);
@@ -58,47 +59,49 @@
}
}
- private static void printEnergyConsumerId(PowerStatsServiceModelProto proto) {
+ private static void printEnergyConsumer(PowerStatsServiceModelProto proto) {
String csvHeader = new String();
- for (int i = 0; i < proto.getEnergyConsumerIdCount(); i++) {
- EnergyConsumerIdProto energyConsumerId = proto.getEnergyConsumerId(i);
- csvHeader += "Index,Timestamp," + energyConsumerId.getEnergyConsumerId() + ",";
+ for (int i = 0; i < proto.getEnergyConsumerCount(); i++) {
+ EnergyConsumerProto energyConsumer = proto.getEnergyConsumer(i);
+ csvHeader += "Index,Timestamp," + energyConsumer.getId() + "/"
+ + energyConsumer.getOrdinal() + "/"
+ + energyConsumer.getType() + "/"
+ + energyConsumer.getName() + ",";
}
System.out.println(csvHeader);
}
private static void printEnergyConsumerResults(PowerStatsServiceModelProto proto) {
- int energyConsumerIdCount = proto.getEnergyConsumerIdCount();
+ int energyConsumerCount = proto.getEnergyConsumerCount();
- if (energyConsumerIdCount > 0) {
+ if (energyConsumerCount > 0) {
int energyConsumerResultCount = proto.getEnergyConsumerResultCount();
- int energyConsumerResultSetCount = energyConsumerResultCount / energyConsumerIdCount;
+ int energyConsumerResultSetCount = energyConsumerResultCount / energyConsumerCount;
for (int i = 0; i < energyConsumerResultSetCount; i++) {
String csvRow = new String();
- for (int j = 0; j < energyConsumerIdCount; j++) {
+ for (int j = 0; j < energyConsumerCount; j++) {
EnergyConsumerResultProto energyConsumerResult =
- proto.getEnergyConsumerResult(i * energyConsumerIdCount + j);
- csvRow += energyConsumerResult.getEnergyConsumerId() + ","
+ proto.getEnergyConsumerResult(i * energyConsumerCount + j);
+ csvRow += energyConsumerResult.getId() + ","
+ energyConsumerResult.getTimestampMs() + ","
+ energyConsumerResult.getEnergyUws() + ",";
}
System.out.println(csvRow);
}
} else {
- System.out.println("Error: energyConsumerIdCount is zero");
+ System.out.println("Error: energyConsumerCount is zero");
}
}
private static void printPowerEntityInfo(PowerStatsServiceResidencyProto proto) {
String csvHeader = new String();
- for (int i = 0; i < proto.getPowerEntityInfoCount(); i++) {
- PowerEntityInfoProto powerEntityInfo = proto.getPowerEntityInfo(i);
- csvHeader += powerEntityInfo.getPowerEntityId() + ","
- + powerEntityInfo.getPowerEntityName() + ",";
- for (int j = 0; j < powerEntityInfo.getStatesCount(); j++) {
- StateInfoProto stateInfo = powerEntityInfo.getStates(j);
- csvHeader += stateInfo.getStateId() + "," + stateInfo.getStateName() + ",";
+ for (int i = 0; i < proto.getPowerEntityCount(); i++) {
+ PowerEntityProto powerEntity = proto.getPowerEntity(i);
+ csvHeader += powerEntity.getId() + "," + powerEntity.getName() + ",";
+ for (int j = 0; j < powerEntity.getStatesCount(); j++) {
+ StateProto state = powerEntity.getStates(j);
+ csvHeader += state.getId() + "," + state.getName() + ",";
}
}
System.out.println(csvHeader);
@@ -109,11 +112,11 @@
String csvRow = new String();
StateResidencyResultProto stateResidencyResult = proto.getStateResidencyResult(i);
- csvRow += stateResidencyResult.getPowerEntityId() + ",";
+ csvRow += stateResidencyResult.getId() + ",";
for (int j = 0; j < stateResidencyResult.getStateResidencyDataCount(); j++) {
StateResidencyProto stateResidency = stateResidencyResult.getStateResidencyData(j);
- csvRow += stateResidency.getStateId() + ","
+ csvRow += stateResidency.getId() + ","
+ stateResidency.getTotalTimeInStateMs() + ","
+ stateResidency.getTotalStateEntryCount() + ","
+ stateResidency.getLastEntryTimestampMs() + ",";
@@ -142,7 +145,7 @@
if (irModelProto.hasIncidentReport()) {
PowerStatsServiceModelProto pssModelProto = irModelProto.getIncidentReport();
- printEnergyConsumerId(pssModelProto);
+ printEnergyConsumer(pssModelProto);
printEnergyConsumerResults(pssModelProto);
} else {
System.out.println("Model incident report not found. Exiting.");