Loading core/proto/android/server/powerstatsservice.proto +3 −0 Original line number Diff line number Diff line Loading @@ -220,6 +220,9 @@ message ChannelProto { /** Name of the energy meter channel */ optional string name = 2; /** Name of the subsystem associated with this Channel. Opaque to framework */ optional string subsystem = 3; } /** Loading services/core/java/com/android/server/powerstats/ProtoStreamUtils.java +5 −2 Original line number Diff line number Diff line Loading @@ -266,6 +266,7 @@ public class ProtoStreamUtils { long token = pos.start(PowerStatsServiceMeterProto.CHANNEL); pos.write(ChannelProto.ID, channel[i].id); pos.write(ChannelProto.NAME, channel[i].name); pos.write(ChannelProto.SUBSYSTEM, channel[i].subsystem); pos.end(token); } } Loading @@ -275,7 +276,8 @@ public class ProtoStreamUtils { for (int i = 0; i < channel.length; i++) { Slog.d(TAG, "ChannelId: " + channel[i].id + ", ChannelName: " + channel[i].name); + ", ChannelName: " + channel[i].name + ", ChannelSubsystem: " + channel[i].subsystem); } } Loading @@ -284,7 +286,8 @@ public class ProtoStreamUtils { for (int i = 0; i < channel.length; i++) { pw.println("ChannelId: " + channel[i].id + ", ChannelName: " + channel[i].name); + ", ChannelName: " + channel[i].name + ", ChannelSubsystem: " + channel[i].subsystem); } } } Loading services/core/jni/com_android_server_powerstats_PowerStatsService.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ static jclass class_C; static jmethodID method_C_init; static jfieldID field_C_id; static jfieldID field_C_name; static jfieldID field_C_subsystem; // EnergyMeasurement static jclass class_EM; Loading Loading @@ -277,11 +278,14 @@ static jobjectArray nativeGetEnergyMeterInfo(JNIEnv *env, jclass clazz) { channelArray = env->NewObjectArray(railInfo.size(), class_C, nullptr); for (int i = 0; i < railInfo.size(); i++) { jstring name = env->NewStringUTF(railInfo[i].railName.c_str()); jstring subsystem = env->NewStringUTF(railInfo[i].subsysName.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->SetObjectField(channel, field_C_subsystem, subsystem); env->SetObjectArrayElement(channelArray, i, channel); env->DeleteLocalRef(name); env->DeleteLocalRef(subsystem); env->DeleteLocalRef(channel); } } Loading Loading @@ -359,6 +363,7 @@ static jboolean nativeInit(JNIEnv *env, jclass clazz) { 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;"); field_C_subsystem = env->GetFieldID(class_C, "subsystem", "Ljava/lang/String;"); // EnergyMeasurement temp = env->FindClass("android/hardware/power/stats/EnergyMeasurement"); Loading services/tests/servicestests/src/com/android/server/powerstats/PowerStatsServiceTest.java +5 −0 Original line number Diff line number Diff line Loading @@ -67,6 +67,7 @@ public class PowerStatsServiceTest { private static final String RESIDENCY_FILENAME = "residencytest"; private static final String PROTO_OUTPUT_FILENAME = "powerstats.proto"; private static final String CHANNEL_NAME = "channelname"; private static final String CHANNEL_SUBSYSTEM = "channelsubsystem"; private static final String POWER_ENTITY_NAME = "powerentityinfo"; private static final String STATE_NAME = "stateinfo"; private static final String ENERGY_CONSUMER_NAME = "energyconsumer"; Loading Loading @@ -214,6 +215,7 @@ public class PowerStatsServiceTest { energyMeterList[i] = new Channel(); energyMeterList[i].id = i; energyMeterList[i].name = new String(CHANNEL_NAME + i); energyMeterList[i].subsystem = new String(CHANNEL_SUBSYSTEM + i); } return energyMeterList; } Loading Loading @@ -272,6 +274,7 @@ public class PowerStatsServiceTest { for (int i = 0; i < pssProto.channel.length; i++) { assertTrue(pssProto.channel[i].id == i); assertTrue(pssProto.channel[i].name.equals(CHANNEL_NAME + i)); assertTrue(pssProto.channel[i].subsystem.equals(CHANNEL_SUBSYSTEM + i)); } // Validate the energyMeasurement array matches what was written to on-device storage. Loading Loading @@ -414,6 +417,7 @@ public class PowerStatsServiceTest { for (int i = 0; i < pssProto.channel.length; i++) { assertTrue(pssProto.channel[i].id == i); assertTrue(pssProto.channel[i].name.equals(CHANNEL_NAME + i)); assertTrue(pssProto.channel[i].subsystem.equals(CHANNEL_SUBSYSTEM + i)); } // No energyMeasurements should be written to the incident report since it Loading Loading @@ -547,6 +551,7 @@ public class PowerStatsServiceTest { for (int i = 0; i < pssProto.channel.length; i++) { assertTrue(pssProto.channel[i].id == i); assertTrue(pssProto.channel[i].name.equals(CHANNEL_NAME + i)); assertTrue(pssProto.channel[i].subsystem.equals(CHANNEL_SUBSYSTEM + i)); } // No energyMeasurements should be written to the incident report since the Loading tools/powerstats/PowerStatsServiceProtoParser.java +1 −1 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ public class PowerStatsServiceProtoParser { for (int i = 0; i < proto.getChannelCount(); i++) { ChannelProto energyMeterInfo = proto.getChannel(i); csvHeader += "Index,Timestamp,Duration," + energyMeterInfo.getId() + "/" + energyMeterInfo.getName() + ","; + "/" + energyMeterInfo.getName() + "/" + energyMeterInfo.getSubsystem() + ","; } System.out.println(csvHeader); } Loading Loading
core/proto/android/server/powerstatsservice.proto +3 −0 Original line number Diff line number Diff line Loading @@ -220,6 +220,9 @@ message ChannelProto { /** Name of the energy meter channel */ optional string name = 2; /** Name of the subsystem associated with this Channel. Opaque to framework */ optional string subsystem = 3; } /** Loading
services/core/java/com/android/server/powerstats/ProtoStreamUtils.java +5 −2 Original line number Diff line number Diff line Loading @@ -266,6 +266,7 @@ public class ProtoStreamUtils { long token = pos.start(PowerStatsServiceMeterProto.CHANNEL); pos.write(ChannelProto.ID, channel[i].id); pos.write(ChannelProto.NAME, channel[i].name); pos.write(ChannelProto.SUBSYSTEM, channel[i].subsystem); pos.end(token); } } Loading @@ -275,7 +276,8 @@ public class ProtoStreamUtils { for (int i = 0; i < channel.length; i++) { Slog.d(TAG, "ChannelId: " + channel[i].id + ", ChannelName: " + channel[i].name); + ", ChannelName: " + channel[i].name + ", ChannelSubsystem: " + channel[i].subsystem); } } Loading @@ -284,7 +286,8 @@ public class ProtoStreamUtils { for (int i = 0; i < channel.length; i++) { pw.println("ChannelId: " + channel[i].id + ", ChannelName: " + channel[i].name); + ", ChannelName: " + channel[i].name + ", ChannelSubsystem: " + channel[i].subsystem); } } } Loading
services/core/jni/com_android_server_powerstats_PowerStatsService.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ static jclass class_C; static jmethodID method_C_init; static jfieldID field_C_id; static jfieldID field_C_name; static jfieldID field_C_subsystem; // EnergyMeasurement static jclass class_EM; Loading Loading @@ -277,11 +278,14 @@ static jobjectArray nativeGetEnergyMeterInfo(JNIEnv *env, jclass clazz) { channelArray = env->NewObjectArray(railInfo.size(), class_C, nullptr); for (int i = 0; i < railInfo.size(); i++) { jstring name = env->NewStringUTF(railInfo[i].railName.c_str()); jstring subsystem = env->NewStringUTF(railInfo[i].subsysName.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->SetObjectField(channel, field_C_subsystem, subsystem); env->SetObjectArrayElement(channelArray, i, channel); env->DeleteLocalRef(name); env->DeleteLocalRef(subsystem); env->DeleteLocalRef(channel); } } Loading Loading @@ -359,6 +363,7 @@ static jboolean nativeInit(JNIEnv *env, jclass clazz) { 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;"); field_C_subsystem = env->GetFieldID(class_C, "subsystem", "Ljava/lang/String;"); // EnergyMeasurement temp = env->FindClass("android/hardware/power/stats/EnergyMeasurement"); Loading
services/tests/servicestests/src/com/android/server/powerstats/PowerStatsServiceTest.java +5 −0 Original line number Diff line number Diff line Loading @@ -67,6 +67,7 @@ public class PowerStatsServiceTest { private static final String RESIDENCY_FILENAME = "residencytest"; private static final String PROTO_OUTPUT_FILENAME = "powerstats.proto"; private static final String CHANNEL_NAME = "channelname"; private static final String CHANNEL_SUBSYSTEM = "channelsubsystem"; private static final String POWER_ENTITY_NAME = "powerentityinfo"; private static final String STATE_NAME = "stateinfo"; private static final String ENERGY_CONSUMER_NAME = "energyconsumer"; Loading Loading @@ -214,6 +215,7 @@ public class PowerStatsServiceTest { energyMeterList[i] = new Channel(); energyMeterList[i].id = i; energyMeterList[i].name = new String(CHANNEL_NAME + i); energyMeterList[i].subsystem = new String(CHANNEL_SUBSYSTEM + i); } return energyMeterList; } Loading Loading @@ -272,6 +274,7 @@ public class PowerStatsServiceTest { for (int i = 0; i < pssProto.channel.length; i++) { assertTrue(pssProto.channel[i].id == i); assertTrue(pssProto.channel[i].name.equals(CHANNEL_NAME + i)); assertTrue(pssProto.channel[i].subsystem.equals(CHANNEL_SUBSYSTEM + i)); } // Validate the energyMeasurement array matches what was written to on-device storage. Loading Loading @@ -414,6 +417,7 @@ public class PowerStatsServiceTest { for (int i = 0; i < pssProto.channel.length; i++) { assertTrue(pssProto.channel[i].id == i); assertTrue(pssProto.channel[i].name.equals(CHANNEL_NAME + i)); assertTrue(pssProto.channel[i].subsystem.equals(CHANNEL_SUBSYSTEM + i)); } // No energyMeasurements should be written to the incident report since it Loading Loading @@ -547,6 +551,7 @@ public class PowerStatsServiceTest { for (int i = 0; i < pssProto.channel.length; i++) { assertTrue(pssProto.channel[i].id == i); assertTrue(pssProto.channel[i].name.equals(CHANNEL_NAME + i)); assertTrue(pssProto.channel[i].subsystem.equals(CHANNEL_SUBSYSTEM + i)); } // No energyMeasurements should be written to the incident report since the Loading
tools/powerstats/PowerStatsServiceProtoParser.java +1 −1 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ public class PowerStatsServiceProtoParser { for (int i = 0; i < proto.getChannelCount(); i++) { ChannelProto energyMeterInfo = proto.getChannel(i); csvHeader += "Index,Timestamp,Duration," + energyMeterInfo.getId() + "/" + energyMeterInfo.getName() + ","; + "/" + energyMeterInfo.getName() + "/" + energyMeterInfo.getSubsystem() + ","; } System.out.println(csvHeader); } Loading