diff --git a/cmds/statsd/src/StatsService.cpp b/cmds/statsd/src/StatsService.cpp index 3107b4dd7fce3ea6a0a4175f319daf550853f477..820da556eaaa883bb2fbe5bf2951dbe8d0adfc29 100644 --- a/cmds/statsd/src/StatsService.cpp +++ b/cmds/statsd/src/StatsService.cpp @@ -1089,6 +1089,14 @@ hardware::Return StatsService::reportBatteryCausedShutdown( return hardware::Void(); } +hardware::Return StatsService::reportUsbPortOverheatEvent( + const UsbPortOverheatEvent& usbPortOverheatEvent) { + LogEvent event(getWallClockSec() * NS_PER_SEC, getElapsedRealtimeNs(), usbPortOverheatEvent); + mProcessor->OnLogEvent(&event); + + return hardware::Void(); +} + void StatsService::binderDied(const wp & who) { ALOGW("statscompanion service died"); StatsdStats::getInstance().noteSystemServerRestart(getWallClockSec()); diff --git a/cmds/statsd/src/StatsService.h b/cmds/statsd/src/StatsService.h index 135a3c9cde51e8513b09c796178abb3a3b66ade8..e9b3d4f2f4db3ff83b310c5625a14b5e72eb7710 100644 --- a/cmds/statsd/src/StatsService.h +++ b/cmds/statsd/src/StatsService.h @@ -199,6 +199,12 @@ public: virtual Return reportBatteryCausedShutdown( const BatteryCausedShutdown& batteryCausedShutdown) override; + /** + * Binder call to get UsbPortOverheatEvent atom. + */ + virtual Return reportUsbPortOverheatEvent( + const UsbPortOverheatEvent& usbPortOverheatEvent) override; + /** IBinder::DeathRecipient */ virtual void binderDied(const wp& who) override; diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto index ef3eac017192057b094183442a9273de38781282..f06914f52a8025ad5467a7a3c15bfbc398d275ae 100644 --- a/cmds/statsd/src/atoms.proto +++ b/cmds/statsd/src/atoms.proto @@ -193,6 +193,7 @@ message Atom { 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 @@ message BinaryPushStateChanged { 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 2ff8aa1793ec39970101a372efeb4cd6e92c07a2..78a75c5ffaf070ff01fda97d9b2e04583bd52bac 100644 --- a/cmds/statsd/src/logd/LogEvent.cpp +++ b/cmds/statsd/src/logd/LogEvent.cpp @@ -276,6 +276,24 @@ LogEvent::LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, 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 43e6e4f72da9831993d0030fbf153accb2a4f083..3f47b7efdfb56e717f8c4bedc47caea47583b5f7 100644 --- a/cmds/statsd/src/logd/LogEvent.h +++ b/cmds/statsd/src/logd/LogEvent.h @@ -118,6 +118,9 @@ public: explicit LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, const BatteryCausedShutdown& batteryCausedShutdown); + explicit LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, + const UsbPortOverheatEvent& usbPortOverheatEvent); + ~LogEvent(); /**