diff options
| author | 2023-07-26 03:57:39 +0000 | |
|---|---|---|
| committer | 2023-07-26 03:57:39 +0000 | |
| commit | a0638f14c9151aef9a79be32532f5e061f8e46fa (patch) | |
| tree | d19a45a3a57581e8e2acd5da87c2abafe26fe21c | |
| parent | bcdca7c9c26ab994927ababf2fe0c2842baca72f (diff) | |
| parent | 16b3e381b158bb98092b6df0212d7be30b895a9a (diff) | |
Merge "Fix PowerStatsService dumpsys and include PowerStatsLogger info" into udc-d1-dev
3 files changed, 90 insertions, 7 deletions
diff --git a/services/core/java/com/android/server/powerstats/PowerStatsDataStorage.java b/services/core/java/com/android/server/powerstats/PowerStatsDataStorage.java index d8e6c262359d..d770792dffec 100644 --- a/services/core/java/com/android/server/powerstats/PowerStatsDataStorage.java +++ b/services/core/java/com/android/server/powerstats/PowerStatsDataStorage.java @@ -17,6 +17,7 @@ package com.android.server.powerstats; import android.content.Context; +import android.util.IndentingPrintWriter; import android.util.Slog; import com.android.internal.util.FileRotator; @@ -27,6 +28,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.nio.ByteBuffer; +import java.util.Date; import java.util.concurrent.locks.ReentrantLock; /** @@ -266,4 +268,51 @@ public class PowerStatsDataStorage { mLock.unlock(); } } + + /** + * Dump stats about stored data. + */ + public void dump(IndentingPrintWriter ipw) { + mLock.lock(); + try { + final int versionDot = mDataStorageFilename.lastIndexOf('.'); + final String beforeVersionDot = mDataStorageFilename.substring(0, versionDot); + final File[] files = mDataStorageDir.listFiles(); + + int number = 0; + int dataSize = 0; + long earliestLogEpochTime = Long.MAX_VALUE; + for (int i = 0; i < files.length; i++) { + // Check that the stems before the version match. + final File file = files[i]; + final String fileName = file.getName(); + if (files[i].getName().startsWith(beforeVersionDot)) { + number++; + dataSize += file.length(); + final int firstTimeChar = fileName.lastIndexOf('.') + 1; + final int endChar = fileName.lastIndexOf('-'); + try { + final Long startTime = + Long.parseLong(fileName.substring(firstTimeChar, endChar)); + if (startTime != null && startTime < earliestLogEpochTime) { + earliestLogEpochTime = startTime; + } + } catch (NumberFormatException nfe) { + Slog.e(TAG, + "Failed to extract start time from file : " + fileName, nfe); + } + } + } + + if (earliestLogEpochTime != Long.MAX_VALUE) { + ipw.println("Earliest data time : " + new Date(earliestLogEpochTime)); + } else { + ipw.println("Failed to parse earliest data time!!!"); + } + ipw.println("# files : " + number); + ipw.println("Total data size (B) : " + dataSize); + } finally { + mLock.unlock(); + } + } } diff --git a/services/core/java/com/android/server/powerstats/PowerStatsLogger.java b/services/core/java/com/android/server/powerstats/PowerStatsLogger.java index 39ead13b03fe..e80a86d73f90 100644 --- a/services/core/java/com/android/server/powerstats/PowerStatsLogger.java +++ b/services/core/java/com/android/server/powerstats/PowerStatsLogger.java @@ -30,6 +30,7 @@ import android.os.Looper; import android.os.Message; import android.os.SystemClock; import android.util.AtomicFile; +import android.util.IndentingPrintWriter; import android.util.Slog; import android.util.proto.ProtoInputStream; import android.util.proto.ProtoOutputStream; @@ -354,4 +355,23 @@ public final class PowerStatsLogger extends Handler { updateCacheFile(residencyCacheFilename, powerEntityBytes); } } + + /** + * Dump stats about stored data. + */ + public void dump(IndentingPrintWriter ipw) { + ipw.println("PowerStats Meter Data:"); + ipw.increaseIndent(); + mPowerStatsMeterStorage.dump(ipw); + ipw.decreaseIndent(); + ipw.println("PowerStats Model Data:"); + ipw.increaseIndent(); + mPowerStatsModelStorage.dump(ipw); + ipw.decreaseIndent(); + ipw.println("PowerStats State Residency Data:"); + ipw.increaseIndent(); + mPowerStatsResidencyStorage.dump(ipw); + ipw.decreaseIndent(); + } + } diff --git a/services/core/java/com/android/server/powerstats/PowerStatsService.java b/services/core/java/com/android/server/powerstats/PowerStatsService.java index 2638f34fe7df..ffc9a0178971 100644 --- a/services/core/java/com/android/server/powerstats/PowerStatsService.java +++ b/services/core/java/com/android/server/powerstats/PowerStatsService.java @@ -31,6 +31,7 @@ import android.os.HandlerThread; import android.os.Looper; import android.os.UserHandle; import android.power.PowerStatsInternal; +import android.util.IndentingPrintWriter; import android.util.Slog; import com.android.internal.annotations.GuardedBy; @@ -176,18 +177,31 @@ public class PowerStatsService extends SystemService { } else if ("residency".equals(args[1])) { mPowerStatsLogger.writeResidencyDataToFile(fd); } - } else if (args.length == 0) { - pw.println("PowerStatsService dumpsys: available PowerEntities"); + } else { + IndentingPrintWriter ipw = new IndentingPrintWriter(pw); + ipw.println("PowerStatsService dumpsys: available PowerEntities"); PowerEntity[] powerEntity = getPowerStatsHal().getPowerEntityInfo(); - PowerEntityUtils.dumpsys(powerEntity, pw); + ipw.increaseIndent(); + PowerEntityUtils.dumpsys(powerEntity, ipw); + ipw.decreaseIndent(); - pw.println("PowerStatsService dumpsys: available Channels"); + ipw.println("PowerStatsService dumpsys: available Channels"); Channel[] channel = getPowerStatsHal().getEnergyMeterInfo(); - ChannelUtils.dumpsys(channel, pw); + ipw.increaseIndent(); + ChannelUtils.dumpsys(channel, ipw); + ipw.decreaseIndent(); - pw.println("PowerStatsService dumpsys: available EnergyConsumers"); + ipw.println("PowerStatsService dumpsys: available EnergyConsumers"); EnergyConsumer[] energyConsumer = getPowerStatsHal().getEnergyConsumerInfo(); - EnergyConsumerUtils.dumpsys(energyConsumer, pw); + ipw.increaseIndent(); + EnergyConsumerUtils.dumpsys(energyConsumer, ipw); + ipw.decreaseIndent(); + + ipw.println("PowerStatsService dumpsys: PowerStatsLogger stats"); + ipw.increaseIndent(); + mPowerStatsLogger.dump(ipw); + ipw.decreaseIndent(); + } } } |