diff options
| author | 2018-08-26 12:20:16 -0700 | |
|---|---|---|
| committer | 2018-10-26 20:03:07 +0000 | |
| commit | 80c4474a7b12ecd82c96fa229d576ef629f0d1da (patch) | |
| tree | 6a2b703ad23fe7b15b9c693a9aa4840fdd1302b9 | |
| parent | 58d1ac473e0cd87886fe8ed666b6245097729927 (diff) | |
Log the thermal throttling event to enable conditional temperature pulling.
Test: statsd test
BUG: b/112432890
Change-Id: Ic0b175053ec6afe497eb67a31d3e1a7633df4c5b
Merged-in: If132bab9690043a9e3e89187dfb1a9ed8fd0c996
(cherry picked from commit e16189afcaa55d8480d658bfb0c6bd304f3c238d)
| -rw-r--r-- | cmds/statsd/src/atoms.proto | 23 | ||||
| -rw-r--r-- | services/core/java/com/android/server/stats/StatsCompanionService.java | 30 |
2 files changed, 51 insertions, 2 deletions
diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto index ab9c7e81a88e..18aa0d06d6dc 100644 --- a/cmds/statsd/src/atoms.proto +++ b/cmds/statsd/src/atoms.proto @@ -121,8 +121,7 @@ message Atom { ANROccurred anr_occurred = 79; WTFOccurred wtf_occurred = 80; LowMemReported low_mem_reported = 81; - - + ThermalThrottlingStateChanged thermal_throttling = 86; } // Pulled events will start at field 10000. @@ -198,6 +197,26 @@ message AttributionNode { */ /** + * Logs when the Thermal service HAL notifies the throttling start/stop events. + * + * Logged from: + * frameworks/base/services/core/java/com/android/server/stats/StatsCompanionService.java + */ +message ThermalThrottlingStateChanged { + optional android.os.TemperatureTypeEnum sensor_type = 1; + + enum State { + UNKNOWN = 0; + START = 1; + STOP = 2; + } + + optional State state = 2; + + optional float temperature = 3; +} + +/** * Logs when the screen state changes. * * Logged from: diff --git a/services/core/java/com/android/server/stats/StatsCompanionService.java b/services/core/java/com/android/server/stats/StatsCompanionService.java index 37984163e4a9..d683dbd9a675 100644 --- a/services/core/java/com/android/server/stats/StatsCompanionService.java +++ b/services/core/java/com/android/server/stats/StatsCompanionService.java @@ -43,6 +43,8 @@ import android.os.FileUtils; import android.os.IBinder; import android.os.IStatsCompanionService; import android.os.IStatsManager; +import android.os.IThermalEventListener; +import android.os.IThermalService; import android.os.Parcelable; import android.os.Process; import android.os.RemoteException; @@ -52,6 +54,7 @@ import android.os.StatsDimensionsValue; import android.os.StatsLogEventWrapper; import android.os.SynchronousResultReceiver; import android.os.SystemClock; +import android.os.Temperature; import android.os.UserHandle; import android.os.UserManager; import android.telephony.ModemActivityInfo; @@ -153,6 +156,8 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { private KernelUidCpuClusterTimeReader mKernelUidCpuClusterTimeReader = new KernelUidCpuClusterTimeReader(); + private static IThermalService sThermalService; + public StatsCompanionService(Context context) { super(); mContext = context; @@ -203,6 +208,24 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { long[] freqs = mKernelUidCpuFreqTimeReader.readFreqs(powerProfile); mKernelUidCpuClusterTimeReader.setThrottleInterval(0); mKernelUidCpuActiveTimeReader.setThrottleInterval(0); + + // Enable push notifications of throttling from vendor thermal + // management subsystem via thermalservice. + IBinder b = ServiceManager.getService("thermalservice"); + + if (b != null) { + sThermalService = IThermalService.Stub.asInterface(b); + try { + sThermalService.registerThermalEventListener( + new ThermalEventListener()); + Slog.i(TAG, "register thermal listener successfully"); + } catch (RemoteException e) { + // Should never happen. + Slog.e(TAG, "register thermal listener error"); + } + } else { + Slog.e(TAG, "cannot find thermalservice, no throttling push notifications"); + } } @Override @@ -1181,4 +1204,11 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { } } + // Thermal event received from vendor thermal management subsystem + private static final class ThermalEventListener extends IThermalEventListener.Stub { + @Override public void notifyThrottling(boolean isThrottling, Temperature temp) { + StatsLog.write(StatsLog.THERMAL_THROTTLING, temp.getType(), + isThrottling ? 1 : 0, temp.getValue()); + } + } } |