Update to new version of PowerStats HAL 2.0
Bug: 178048034 Test: atest FrameworksServicesTests:PowerStatsServiceTest Change-Id: I714d2037a3576a3f6f89211d64ccf88cefa51abf
This commit is contained in:
@@ -53,12 +53,12 @@ message IncidentReportResidencyProto {
|
||||
/**
|
||||
* 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 @@ message PowerStatsServiceModelProto {
|
||||
* 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 @@ message PowerStatsServiceMeterProto {
|
||||
* 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 @@ message StateResidencyProto {
|
||||
/**
|
||||
* 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 @@ message StateResidencyProto {
|
||||
/**
|
||||
* 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 @@ message StateResidencyResultProto {
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 @@ message EnergyConsumerResultProto {
|
||||
* 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 ChannelInfoProto {
|
||||
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;
|
||||
|
||||
}
|
||||
|
||||
@@ -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 @@ public abstract class PowerStatsInternal {
|
||||
* consumer results for all listed {@link EnergyConsumerId}.
|
||||
*/
|
||||
public abstract CompletableFuture<EnergyConsumerResult[]> getEnergyConsumedAsync(
|
||||
@EnergyConsumerId int[] energyConsumerIds);
|
||||
/*@EnergyConsumerId*/ int[] energyConsumerIds);
|
||||
}
|
||||
|
||||
@@ -22,7 +22,6 @@ import android.annotation.Nullable;
|
||||
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 @@ class BatteryExternalStatsWorker implements BatteryStatsImpl.ExternalStatsSync {
|
||||
|
||||
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 @@ class BatteryExternalStatsWorker implements BatteryStatsImpl.ExternalStatsSync {
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
*/
|
||||
subsystems[i] = subsystem;
|
||||
energyUJ[i] = consumer.energyUWs;
|
||||
}
|
||||
|
||||
@@ -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 @@ public final class PowerStatsHALWrapper {
|
||||
*
|
||||
* @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 @@ public final class PowerStatsHALWrapper {
|
||||
* @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 @@ public final class PowerStatsHALWrapper {
|
||||
/**
|
||||
* 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 @@ public final class PowerStatsHALWrapper {
|
||||
}
|
||||
|
||||
@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 @@ public final class PowerStatsHALWrapper {
|
||||
}
|
||||
|
||||
@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 @@ public final class PowerStatsHALWrapper {
|
||||
}
|
||||
}
|
||||
|
||||
return energyConsumerInfoHAL;
|
||||
return energyConsumerHAL;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -220,8 +220,8 @@ public final class PowerStatsHALWrapper {
|
||||
}
|
||||
|
||||
@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 @@ public final class PowerStatsHALWrapper {
|
||||
|
||||
// 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 @@ public final class PowerStatsHALWrapper {
|
||||
}
|
||||
|
||||
@Override
|
||||
public android.hardware.power.stats.PowerEntityInfo[] getPowerEntityInfo() {
|
||||
public android.hardware.power.stats.PowerEntity[] getPowerEntityInfo() {
|
||||
return nativeGetPowerEntityInfo();
|
||||
}
|
||||
|
||||
@@ -293,7 +293,7 @@ public final class PowerStatsHALWrapper {
|
||||
}
|
||||
|
||||
@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 @@ public final class PowerStatsHALWrapper {
|
||||
}
|
||||
|
||||
@Override
|
||||
public android.hardware.power.stats.ChannelInfo[] getEnergyMeterInfo() {
|
||||
public android.hardware.power.stats.Channel[] getEnergyMeterInfo() {
|
||||
return nativeGetEnergyMeterInfo();
|
||||
}
|
||||
|
||||
|
||||
@@ -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.ProtoInputStream;
|
||||
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 @@ public final class PowerStatsLogger extends Handler {
|
||||
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 @@ public final class PowerStatsLogger extends Handler {
|
||||
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 @@ public final class PowerStatsLogger extends Handler {
|
||||
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
|
||||
|
||||
@@ -18,9 +18,10 @@ package com.android.server.powerstats;
|
||||
|
||||
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.DumpUtils;
|
||||
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 @@ public class PowerStatsService extends SystemService {
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 @@ import java.util.List;
|
||||
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 @@ public class ProtoStreamUtils {
|
||||
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 @@ public class ProtoStreamUtils {
|
||||
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 @@ public class ProtoStreamUtils {
|
||||
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 @@ public class ProtoStreamUtils {
|
||||
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 @@ public class ProtoStreamUtils {
|
||||
}
|
||||
}
|
||||
|
||||
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 @@ public class ProtoStreamUtils {
|
||||
|
||||
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 @@ public class ProtoStreamUtils {
|
||||
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 @@ public class ProtoStreamUtils {
|
||||
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 @@ public class ProtoStreamUtils {
|
||||
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 @@ public class ProtoStreamUtils {
|
||||
|
||||
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 @@ public class ProtoStreamUtils {
|
||||
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 @@ public class ProtoStreamUtils {
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -28,37 +28,37 @@ using android::hardware::power::stats::V1_0::EnergyData;
|
||||
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 @@ static jfieldID field_SR_lastEntryTimestampMs;
|
||||
// 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 @@ static jobjectArray nativeGetPowerEntityInfo(JNIEnv *env, jclass clazz) {
|
||||
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 @@ static jobjectArray nativeGetPowerEntityInfo(JNIEnv *env, jclass clazz) {
|
||||
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 @@ static jobjectArray nativeGetStateResidency(JNIEnv *env, jclass clazz, jintArray
|
||||
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 @@ static jobjectArray nativeGetStateResidency(JNIEnv *env, jclass clazz, jintArray
|
||||
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 @@ static jobjectArray nativeGetEnergyMeterInfo(JNIEnv *env, jclass clazz) {
|
||||
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 @@ static jobjectArray nativeGetEnergyMeterInfo(JNIEnv *env, jclass clazz) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return channelInfoArray;
|
||||
return channelArray;
|
||||
}
|
||||
|
||||
static jobjectArray nativeReadEnergyMeters(JNIEnv *env, jclass clazz, jintArray channelIds) {
|
||||
@@ -331,8 +325,7 @@ static jobjectArray nativeReadEnergyMeters(JNIEnv *env, jclass clazz, jintArray
|
||||
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 jobjectArray nativeReadEnergyMeters(JNIEnv *env, jclass clazz, jintArray
|
||||
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 @@ static jboolean nativeInit(JNIEnv *env, jclass clazz) {
|
||||
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 jboolean nativeInit(JNIEnv *env, jclass clazz) {
|
||||
|
||||
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},
|
||||
|
||||
@@ -20,11 +20,12 @@ import static org.junit.Assert.assertTrue;
|
||||
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 androidx.test.InstrumentationRegistry;
|
||||
|
||||
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 @@ public class PowerStatsServiceTest {
|
||||
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 class PowerStatsServiceTest {
|
||||
|
||||
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 @@ public class PowerStatsServiceTest {
|
||||
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 @@ public class PowerStatsServiceTest {
|
||||
}
|
||||
|
||||
@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 @@ public class PowerStatsServiceTest {
|
||||
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 @@ public class PowerStatsServiceTest {
|
||||
}
|
||||
|
||||
@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 @@ public class PowerStatsServiceTest {
|
||||
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 @@ public class PowerStatsServiceTest {
|
||||
// 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 @@ public class PowerStatsServiceTest {
|
||||
// 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 @@ public class PowerStatsServiceTest {
|
||||
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 @@ public class PowerStatsServiceTest {
|
||||
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 @@ public class PowerStatsServiceTest {
|
||||
// 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 @@ public class PowerStatsServiceTest {
|
||||
// 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 @@ public class PowerStatsServiceTest {
|
||||
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 @@ public class PowerStatsServiceTest {
|
||||
// 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 @@ public class PowerStatsServiceTest {
|
||||
// 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 @@ public class PowerStatsServiceTest {
|
||||
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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -27,16 +27,16 @@ import java.io.IOException;
|
||||
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 @@ public class PowerStatsServiceProtoParser {
|
||||
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 @@ public class PowerStatsServiceProtoParser {
|
||||
}
|
||||
}
|
||||
|
||||
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 @@ public class PowerStatsServiceProtoParser {
|
||||
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 @@ public class PowerStatsServiceProtoParser {
|
||||
|
||||
if (irModelProto.hasIncidentReport()) {
|
||||
PowerStatsServiceModelProto pssModelProto = irModelProto.getIncidentReport();
|
||||
printEnergyConsumerId(pssModelProto);
|
||||
printEnergyConsumer(pssModelProto);
|
||||
printEnergyConsumerResults(pssModelProto);
|
||||
} else {
|
||||
System.out.println("Model incident report not found. Exiting.");
|
||||
|
||||
Reference in New Issue
Block a user