Merge "Fix PowerStatsService dumpsys and include PowerStatsLogger info" into udc-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
c9d30749cb
@@ -17,6 +17,7 @@
|
|||||||
package com.android.server.powerstats;
|
package com.android.server.powerstats;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.util.IndentingPrintWriter;
|
||||||
import android.util.Slog;
|
import android.util.Slog;
|
||||||
|
|
||||||
import com.android.internal.util.FileRotator;
|
import com.android.internal.util.FileRotator;
|
||||||
@@ -27,6 +28,7 @@ import java.io.IOException;
|
|||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.concurrent.locks.ReentrantLock;
|
import java.util.concurrent.locks.ReentrantLock;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -266,4 +268,51 @@ public class PowerStatsDataStorage {
|
|||||||
mLock.unlock();
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import android.os.Looper;
|
|||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
import android.util.AtomicFile;
|
import android.util.AtomicFile;
|
||||||
|
import android.util.IndentingPrintWriter;
|
||||||
import android.util.Slog;
|
import android.util.Slog;
|
||||||
import android.util.proto.ProtoInputStream;
|
import android.util.proto.ProtoInputStream;
|
||||||
import android.util.proto.ProtoOutputStream;
|
import android.util.proto.ProtoOutputStream;
|
||||||
@@ -354,4 +355,23 @@ public final class PowerStatsLogger extends Handler {
|
|||||||
updateCacheFile(residencyCacheFilename, powerEntityBytes);
|
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();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ import android.os.HandlerThread;
|
|||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.power.PowerStatsInternal;
|
import android.power.PowerStatsInternal;
|
||||||
|
import android.util.IndentingPrintWriter;
|
||||||
import android.util.Slog;
|
import android.util.Slog;
|
||||||
|
|
||||||
import com.android.internal.annotations.GuardedBy;
|
import com.android.internal.annotations.GuardedBy;
|
||||||
@@ -176,18 +177,31 @@ public class PowerStatsService extends SystemService {
|
|||||||
} else if ("residency".equals(args[1])) {
|
} else if ("residency".equals(args[1])) {
|
||||||
mPowerStatsLogger.writeResidencyDataToFile(fd);
|
mPowerStatsLogger.writeResidencyDataToFile(fd);
|
||||||
}
|
}
|
||||||
} else if (args.length == 0) {
|
} else {
|
||||||
pw.println("PowerStatsService dumpsys: available PowerEntities");
|
IndentingPrintWriter ipw = new IndentingPrintWriter(pw);
|
||||||
|
ipw.println("PowerStatsService dumpsys: available PowerEntities");
|
||||||
PowerEntity[] powerEntity = getPowerStatsHal().getPowerEntityInfo();
|
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();
|
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();
|
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();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user