Merge "Add wakeup attribution to trace" into udc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
4dd9366c10
@@ -66,6 +66,7 @@ import android.os.Process;
|
|||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.os.ServiceManager;
|
import android.os.ServiceManager;
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
|
import android.os.Trace;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.os.WakeLockStats;
|
import android.os.WakeLockStats;
|
||||||
import android.os.WorkSource;
|
import android.os.WorkSource;
|
||||||
@@ -140,6 +141,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub
|
|||||||
BatteryStatsImpl.EnergyStatsRetriever,
|
BatteryStatsImpl.EnergyStatsRetriever,
|
||||||
Watchdog.Monitor {
|
Watchdog.Monitor {
|
||||||
static final String TAG = "BatteryStatsService";
|
static final String TAG = "BatteryStatsService";
|
||||||
|
static final String TRACE_TRACK_WAKEUP_REASON = "wakeup_reason";
|
||||||
static final boolean DBG = false;
|
static final boolean DBG = false;
|
||||||
private static final boolean BATTERY_USAGE_STORE_ENABLED = true;
|
private static final boolean BATTERY_USAGE_STORE_ENABLED = true;
|
||||||
|
|
||||||
@@ -2482,6 +2484,10 @@ public final class BatteryStatsService extends IBatteryStats.Stub
|
|||||||
while ((reason = waitWakeup()) != null) {
|
while ((reason = waitWakeup()) != null) {
|
||||||
final long nowElapsed = SystemClock.elapsedRealtime();
|
final long nowElapsed = SystemClock.elapsedRealtime();
|
||||||
final long nowUptime = SystemClock.uptimeMillis();
|
final long nowUptime = SystemClock.uptimeMillis();
|
||||||
|
|
||||||
|
Trace.instantForTrack(Trace.TRACE_TAG_POWER, TRACE_TRACK_WAKEUP_REASON,
|
||||||
|
nowElapsed + " " + reason);
|
||||||
|
|
||||||
// Wait for the completion of pending works if there is any
|
// Wait for the completion of pending works if there is any
|
||||||
awaitCompletion();
|
awaitCompletion();
|
||||||
mCpuWakeupStats.noteWakeupTimeAndReason(nowElapsed, nowUptime, reason);
|
mCpuWakeupStats.noteWakeupTimeAndReason(nowElapsed, nowUptime, reason);
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import static android.os.BatteryStatsInternal.CPU_WAKEUP_SUBSYSTEM_WIFI;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.HandlerExecutor;
|
import android.os.HandlerExecutor;
|
||||||
|
import android.os.Trace;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.provider.DeviceConfig;
|
import android.provider.DeviceConfig;
|
||||||
import android.util.IndentingPrintWriter;
|
import android.util.IndentingPrintWriter;
|
||||||
@@ -55,6 +56,7 @@ public class CpuWakeupStats {
|
|||||||
|
|
||||||
private static final String SUBSYSTEM_ALARM_STRING = "Alarm";
|
private static final String SUBSYSTEM_ALARM_STRING = "Alarm";
|
||||||
private static final String SUBSYSTEM_ALARM_WIFI = "Wifi";
|
private static final String SUBSYSTEM_ALARM_WIFI = "Wifi";
|
||||||
|
private static final String TRACE_TRACK_WAKEUP_ATTRIBUTION = "wakeup_attribution";
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
static final long WAKEUP_REASON_HALF_WINDOW_MS = 500;
|
static final long WAKEUP_REASON_HALF_WINDOW_MS = 500;
|
||||||
private static final long WAKEUP_WRITE_DELAY_MS = TimeUnit.MINUTES.toMillis(2);
|
private static final long WAKEUP_WRITE_DELAY_MS = TimeUnit.MINUTES.toMillis(2);
|
||||||
@@ -94,13 +96,15 @@ public class CpuWakeupStats {
|
|||||||
return FrameworkStatsLog.KERNEL_WAKEUP_ATTRIBUTED__REASON__UNKNOWN;
|
return FrameworkStatsLog.KERNEL_WAKEUP_ATTRIBUTED__REASON__UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized void logWakeupToStatsLog(Wakeup wakeupToLog) {
|
private synchronized void logWakeupAttribution(Wakeup wakeupToLog) {
|
||||||
if (ArrayUtils.isEmpty(wakeupToLog.mDevices)) {
|
if (ArrayUtils.isEmpty(wakeupToLog.mDevices)) {
|
||||||
FrameworkStatsLog.write(FrameworkStatsLog.KERNEL_WAKEUP_ATTRIBUTED,
|
FrameworkStatsLog.write(FrameworkStatsLog.KERNEL_WAKEUP_ATTRIBUTED,
|
||||||
FrameworkStatsLog.KERNEL_WAKEUP_ATTRIBUTED__TYPE__TYPE_UNKNOWN,
|
FrameworkStatsLog.KERNEL_WAKEUP_ATTRIBUTED__TYPE__TYPE_UNKNOWN,
|
||||||
FrameworkStatsLog.KERNEL_WAKEUP_ATTRIBUTED__REASON__UNKNOWN,
|
FrameworkStatsLog.KERNEL_WAKEUP_ATTRIBUTED__REASON__UNKNOWN,
|
||||||
null,
|
null,
|
||||||
wakeupToLog.mElapsedMillis);
|
wakeupToLog.mElapsedMillis);
|
||||||
|
Trace.instantForTrack(Trace.TRACE_TAG_POWER, TRACE_TRACK_WAKEUP_ATTRIBUTION,
|
||||||
|
wakeupToLog.mElapsedMillis + " --");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -112,6 +116,9 @@ public class CpuWakeupStats {
|
|||||||
Slog.wtf(TAG, "Unexpected null attribution found for " + wakeupToLog);
|
Slog.wtf(TAG, "Unexpected null attribution found for " + wakeupToLog);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final StringBuilder traceEventBuilder = new StringBuilder();
|
||||||
|
|
||||||
for (int i = 0; i < wakeupAttribution.size(); i++) {
|
for (int i = 0; i < wakeupAttribution.size(); i++) {
|
||||||
final int subsystem = wakeupAttribution.keyAt(i);
|
final int subsystem = wakeupAttribution.keyAt(i);
|
||||||
final SparseBooleanArray uidMap = wakeupAttribution.valueAt(i);
|
final SparseBooleanArray uidMap = wakeupAttribution.valueAt(i);
|
||||||
@@ -132,7 +139,19 @@ public class CpuWakeupStats {
|
|||||||
subsystemToStatsReason(subsystem),
|
subsystemToStatsReason(subsystem),
|
||||||
uids,
|
uids,
|
||||||
wakeupToLog.mElapsedMillis);
|
wakeupToLog.mElapsedMillis);
|
||||||
|
|
||||||
|
if (Trace.isTagEnabled(Trace.TRACE_TAG_POWER)) {
|
||||||
|
if (i == 0) {
|
||||||
|
traceEventBuilder.append(wakeupToLog.mElapsedMillis + " ");
|
||||||
}
|
}
|
||||||
|
traceEventBuilder.append((subsystemToString(subsystem)));
|
||||||
|
traceEventBuilder.append(":");
|
||||||
|
traceEventBuilder.append(Arrays.toString(uids));
|
||||||
|
traceEventBuilder.append(" ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Trace.instantForTrack(Trace.TRACE_TAG_POWER, TRACE_TRACK_WAKEUP_ATTRIBUTION,
|
||||||
|
traceEventBuilder.toString().trim());
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Notes a wakeup reason as reported by SuspendControlService to battery stats. */
|
/** Notes a wakeup reason as reported by SuspendControlService to battery stats. */
|
||||||
@@ -160,7 +179,7 @@ public class CpuWakeupStats {
|
|||||||
for (int i = lastIdx; i >= 0; i--) {
|
for (int i = lastIdx; i >= 0; i--) {
|
||||||
mWakeupAttribution.removeAt(i);
|
mWakeupAttribution.removeAt(i);
|
||||||
}
|
}
|
||||||
mHandler.postDelayed(() -> logWakeupToStatsLog(parsedWakeup), WAKEUP_WRITE_DELAY_MS);
|
mHandler.postDelayed(() -> logWakeupAttribution(parsedWakeup), WAKEUP_WRITE_DELAY_MS);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Notes a waking activity that could have potentially woken up the CPU. */
|
/** Notes a waking activity that could have potentially woken up the CPU. */
|
||||||
|
|||||||
Reference in New Issue
Block a user