statsd implementation of USB port overheat event reporting
Bug: 119200347
Test: su 0 ./stats_client -u
Test: Observed USB port overheat event in statsd logs
Change-Id: Ic8801417c54c118e10bb9b631d8e77d68a65c799
Signed-off-by: Maggie White <maggiewhite@google.com>
diff --git a/cmds/statsd/src/StatsService.cpp b/cmds/statsd/src/StatsService.cpp
index 3107b4d..820da55 100644
--- a/cmds/statsd/src/StatsService.cpp
+++ b/cmds/statsd/src/StatsService.cpp
@@ -1089,6 +1089,14 @@
return hardware::Void();
}
+hardware::Return<void> StatsService::reportUsbPortOverheatEvent(
+ const UsbPortOverheatEvent& usbPortOverheatEvent) {
+ LogEvent event(getWallClockSec() * NS_PER_SEC, getElapsedRealtimeNs(), usbPortOverheatEvent);
+ mProcessor->OnLogEvent(&event);
+
+ return hardware::Void();
+}
+
void StatsService::binderDied(const wp <IBinder>& who) {
ALOGW("statscompanion service died");
StatsdStats::getInstance().noteSystemServerRestart(getWallClockSec());
diff --git a/cmds/statsd/src/StatsService.h b/cmds/statsd/src/StatsService.h
index 135a3c9..e9b3d4f 100644
--- a/cmds/statsd/src/StatsService.h
+++ b/cmds/statsd/src/StatsService.h
@@ -199,6 +199,12 @@
virtual Return<void> reportBatteryCausedShutdown(
const BatteryCausedShutdown& batteryCausedShutdown) override;
+ /**
+ * Binder call to get UsbPortOverheatEvent atom.
+ */
+ virtual Return<void> reportUsbPortOverheatEvent(
+ const UsbPortOverheatEvent& usbPortOverheatEvent) override;
+
/** IBinder::DeathRecipient */
virtual void binderDied(const wp<IBinder>& who) override;
diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto
index ef3eac0..f06914f 100644
--- a/cmds/statsd/src/atoms.proto
+++ b/cmds/statsd/src/atoms.proto
@@ -193,6 +193,7 @@
LowStorageStateChanged low_storage_state_changed = 130;
GnssNfwNotificationReported gnss_nfw_notification_reported = 131;
GnssConfigurationReported gnss_configuration_reported = 132;
+ UsbPortOverheatEvent usb_port_overheat_event_reported = 133;
}
// Pulled events will start at field 10000.
@@ -2468,6 +2469,24 @@
optional State state = 3;
}
+/** Represents USB port overheat event. */
+message UsbPortOverheatEvent {
+ /* Temperature of USB port at USB plug event, in 1/10ths of degree C. */
+ optional int32 plug_temperature_deci_c = 1;
+
+ /* Maximum temperature of USB port during overheat event, in 1/10ths of degree C. */
+ optional int32 max_temperature_deci_c = 2;
+
+ /* Time between USB plug event and overheat threshold trip, in seconds. */
+ optional int32 time_to_overheat_secs = 3;
+
+ /* Time between overheat threshold trip and hysteresis, in seconds. */
+ optional int32 time_to_hysteresis_secs = 4;
+
+ /* Time between hysteresis and active mitigation ending, in seconds. */
+ optional int32 time_to_inactive_secs = 5;
+};
+
/*
* Logs when a connection becomes available and lost.
* Logged in StatsCompanionService.java
diff --git a/cmds/statsd/src/logd/LogEvent.cpp b/cmds/statsd/src/logd/LogEvent.cpp
index 2ff8aa1..78a75c5 100644
--- a/cmds/statsd/src/logd/LogEvent.cpp
+++ b/cmds/statsd/src/logd/LogEvent.cpp
@@ -276,6 +276,24 @@
Value(batteryCausedShutdown.voltageMicroV)));
}
+LogEvent::LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs,
+ const UsbPortOverheatEvent& usbPortOverheatEvent) {
+ mLogdTimestampNs = wallClockTimestampNs;
+ mElapsedTimestampNs = elapsedTimestampNs;
+ mTagId = android::util::USB_PORT_OVERHEAT_EVENT_REPORTED;
+
+ mValues.push_back(FieldValue(Field(mTagId, getSimpleField(1)),
+ Value(usbPortOverheatEvent.plugTemperatureDeciC)));
+ mValues.push_back(FieldValue(Field(mTagId, getSimpleField(2)),
+ Value(usbPortOverheatEvent.maxTemperatureDeciC)));
+ mValues.push_back(FieldValue(Field(mTagId, getSimpleField(3)),
+ Value(usbPortOverheatEvent.timeToOverheat)));
+ mValues.push_back(FieldValue(Field(mTagId, getSimpleField(4)),
+ Value(usbPortOverheatEvent.timeToHysteresis)));
+ mValues.push_back(FieldValue(Field(mTagId, getSimpleField(5)),
+ Value(usbPortOverheatEvent.timeToInactive)));
+}
+
LogEvent::LogEvent(int32_t tagId, int64_t timestampNs) : LogEvent(tagId, timestampNs, 0) {}
LogEvent::LogEvent(int32_t tagId, int64_t timestampNs, int32_t uid) {
diff --git a/cmds/statsd/src/logd/LogEvent.h b/cmds/statsd/src/logd/LogEvent.h
index 43e6e4f..3f47b7e 100644
--- a/cmds/statsd/src/logd/LogEvent.h
+++ b/cmds/statsd/src/logd/LogEvent.h
@@ -118,6 +118,9 @@
explicit LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs,
const BatteryCausedShutdown& batteryCausedShutdown);
+ explicit LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs,
+ const UsbPortOverheatEvent& usbPortOverheatEvent);
+
~LogEvent();
/**