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.");