Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 16b3e381 authored by Michael Wachenschwanz's avatar Michael Wachenschwanz
Browse files

Fix PowerStatsService dumpsys and include PowerStatsLogger info

Bug: 283326935
Test: manual (`adb shell dumpsys powerstats`)
Change-Id: I267e05ae7cc7f9eb4859f81d3180ad5258201d57
Merged-In: I267e05ae7cc7f9eb4859f81d3180ad5258201d57
(cherry picked from commit 0971a0c3)
parent e43400a9
Loading
Loading
Loading
Loading
+49 −0
Original line number Diff line number Diff line
@@ -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();
        }
    }
}
+20 −0
Original line number Diff line number Diff line
@@ -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();
    }

}
+21 −7
Original line number Diff line number Diff line
@@ -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();

                }
            }
        }