Log the thermal throttling event to enable conditional temperature pulling.
Test: statsd test BUG: b/112432890 Change-Id: If132bab9690043a9e3e89187dfb1a9ed8fd0c996
This commit is contained in:
@@ -132,6 +132,7 @@ message Atom {
|
||||
KeyValuePairsAtom key_value_pairs_atom = 83;
|
||||
VibratorStateChanged vibrator_state_changed = 84;
|
||||
DeferredJobStatsReported deferred_job_stats_reported = 85;
|
||||
ThermalThrottlingStateChanged thermal_throttling = 86;
|
||||
}
|
||||
|
||||
// Pulled events will start at field 10000.
|
||||
@@ -228,6 +229,26 @@ message KeyValuePairsAtom {
|
||||
* *****************************************************************************
|
||||
*/
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*
|
||||
|
||||
@@ -44,6 +44,8 @@ import android.os.IBinder;
|
||||
import android.os.IStatsCompanionService;
|
||||
import android.os.IStatsManager;
|
||||
import android.os.IStoraged;
|
||||
import android.os.IThermalEventListener;
|
||||
import android.os.IThermalService;
|
||||
import android.os.Parcelable;
|
||||
import android.os.Process;
|
||||
import android.os.RemoteException;
|
||||
@@ -53,6 +55,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.os.storage.StorageManager;
|
||||
@@ -169,6 +172,8 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {
|
||||
private KernelUidCpuClusterTimeReader mKernelUidCpuClusterTimeReader =
|
||||
new KernelUidCpuClusterTimeReader();
|
||||
|
||||
private static IThermalService sThermalService;
|
||||
|
||||
public StatsCompanionService(Context context) {
|
||||
super();
|
||||
mContext = context;
|
||||
@@ -213,6 +218,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
|
||||
@@ -1456,4 +1479,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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user