Merge "Add proto output of battery usage stats" into tm-qpr-dev am: eb59079888
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20107348 Change-Id: I4edeb8faa2a1c6cd7d4c48522cece62645bfaaf7 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -34,6 +34,7 @@ import org.xmlpull.v1.XmlPullParser;
|
|||||||
import org.xmlpull.v1.XmlPullParserException;
|
import org.xmlpull.v1.XmlPullParserException;
|
||||||
|
|
||||||
import java.io.Closeable;
|
import java.io.Closeable;
|
||||||
|
import java.io.FileDescriptor;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
@@ -449,6 +450,16 @@ public final class BatteryUsageStats implements Parcelable, Closeable {
|
|||||||
return proto.getBytes();
|
return proto.getBytes();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Writes contents in a binary protobuffer format, using
|
||||||
|
* the android.os.BatteryUsageStatsAtomsProto proto.
|
||||||
|
*/
|
||||||
|
public void dumpToProto(FileDescriptor fd) {
|
||||||
|
final ProtoOutputStream proto = new ProtoOutputStream(fd);
|
||||||
|
writeStatsProto(proto, /* max size */ Integer.MAX_VALUE);
|
||||||
|
proto.flush();
|
||||||
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
private void writeStatsProto(ProtoOutputStream proto, int maxRawSize) {
|
private void writeStatsProto(ProtoOutputStream proto, int maxRawSize) {
|
||||||
final BatteryConsumer deviceBatteryConsumer = getAggregateBatteryConsumer(
|
final BatteryConsumer deviceBatteryConsumer = getAggregateBatteryConsumer(
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ import android.net.ConnectivityManager;
|
|||||||
import android.net.INetworkManagementEventObserver;
|
import android.net.INetworkManagementEventObserver;
|
||||||
import android.net.Network;
|
import android.net.Network;
|
||||||
import android.net.NetworkCapabilities;
|
import android.net.NetworkCapabilities;
|
||||||
|
import android.os.BatteryConsumer;
|
||||||
import android.os.BatteryManagerInternal;
|
import android.os.BatteryManagerInternal;
|
||||||
import android.os.BatteryStats;
|
import android.os.BatteryStats;
|
||||||
import android.os.BatteryStatsInternal;
|
import android.os.BatteryStatsInternal;
|
||||||
@@ -2282,6 +2283,10 @@ public final class BatteryStatsService extends IBatteryStats.Stub
|
|||||||
pw.println(" --settings: dump the settings key/values related to batterystats");
|
pw.println(" --settings: dump the settings key/values related to batterystats");
|
||||||
pw.println(" --cpu: dump cpu stats for debugging purpose");
|
pw.println(" --cpu: dump cpu stats for debugging purpose");
|
||||||
pw.println(" --power-profile: dump the power profile constants");
|
pw.println(" --power-profile: dump the power profile constants");
|
||||||
|
pw.println(" --usage: write battery usage stats. Optional arguments:");
|
||||||
|
pw.println(" --proto: output as a binary protobuffer");
|
||||||
|
pw.println(" --model power-profile: use the power profile model"
|
||||||
|
+ " even if measured energy is available");
|
||||||
pw.println(" <package.name>: optional name of package to filter output by.");
|
pw.println(" <package.name>: optional name of package to filter output by.");
|
||||||
pw.println(" -h: print this help text.");
|
pw.println(" -h: print this help text.");
|
||||||
pw.println("Battery stats (batterystats) commands:");
|
pw.println("Battery stats (batterystats) commands:");
|
||||||
@@ -2325,6 +2330,31 @@ public final class BatteryStatsService extends IBatteryStats.Stub
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void dumpUsageStatsToProto(FileDescriptor fd, PrintWriter pw, int model,
|
||||||
|
boolean proto) {
|
||||||
|
awaitCompletion();
|
||||||
|
syncStats("dump", BatteryExternalStatsWorker.UPDATE_ALL);
|
||||||
|
|
||||||
|
BatteryUsageStatsQuery.Builder builder = new BatteryUsageStatsQuery.Builder()
|
||||||
|
.setMaxStatsAgeMs(0)
|
||||||
|
.includeProcessStateData()
|
||||||
|
.includePowerModels();
|
||||||
|
if (model == BatteryConsumer.POWER_MODEL_POWER_PROFILE) {
|
||||||
|
builder.powerProfileModeledOnly();
|
||||||
|
}
|
||||||
|
BatteryUsageStatsQuery query = builder.build();
|
||||||
|
synchronized (mStats) {
|
||||||
|
mStats.prepareForDumpLocked();
|
||||||
|
BatteryUsageStats batteryUsageStats =
|
||||||
|
mBatteryUsageStatsProvider.getBatteryUsageStats(query);
|
||||||
|
if (proto) {
|
||||||
|
batteryUsageStats.dumpToProto(fd);
|
||||||
|
} else {
|
||||||
|
batteryUsageStats.dump(pw, "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private int doEnableOrDisable(PrintWriter pw, int i, String[] args, boolean enable) {
|
private int doEnableOrDisable(PrintWriter pw, int i, String[] args, boolean enable) {
|
||||||
i++;
|
i++;
|
||||||
if (i >= args.length) {
|
if (i >= args.length) {
|
||||||
@@ -2478,6 +2508,35 @@ public final class BatteryStatsService extends IBatteryStats.Stub
|
|||||||
} else if ("--power-profile".equals(arg)) {
|
} else if ("--power-profile".equals(arg)) {
|
||||||
dumpPowerProfile(pw);
|
dumpPowerProfile(pw);
|
||||||
return;
|
return;
|
||||||
|
} else if ("--usage".equals(arg)) {
|
||||||
|
int model = BatteryConsumer.POWER_MODEL_UNDEFINED;
|
||||||
|
boolean proto = false;
|
||||||
|
for (int j = i + 1; j < args.length; j++) {
|
||||||
|
switch (args[j]) {
|
||||||
|
case "--proto":
|
||||||
|
proto = true;
|
||||||
|
break;
|
||||||
|
case "--model": {
|
||||||
|
if (j + 1 < args.length) {
|
||||||
|
j++;
|
||||||
|
if ("power-profile".equals(args[j])) {
|
||||||
|
model = BatteryConsumer.POWER_MODEL_POWER_PROFILE;
|
||||||
|
} else {
|
||||||
|
pw.println("Unknown power model: " + args[j]);
|
||||||
|
dumpHelp(pw);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
pw.println("--model without a value");
|
||||||
|
dumpHelp(pw);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dumpUsageStatsToProto(fd, pw, model, proto);
|
||||||
|
return;
|
||||||
} else if ("-a".equals(arg)) {
|
} else if ("-a".equals(arg)) {
|
||||||
flags |= BatteryStats.DUMP_VERBOSE;
|
flags |= BatteryStats.DUMP_VERBOSE;
|
||||||
} else if (arg.length() > 0 && arg.charAt(0) == '-'){
|
} else if (arg.length() > 0 && arg.charAt(0) == '-'){
|
||||||
|
|||||||
Reference in New Issue
Block a user