From fc1aa59dff2e9a5b9951a3c9a4de2b9782725dd6 Mon Sep 17 00:00:00 2001 From: Maggie White Date: Wed, 28 Nov 2018 21:55:23 -0800 Subject: [PATCH] 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 --- cmds/statsd/src/StatsService.cpp | 8 ++++++++ cmds/statsd/src/StatsService.h | 6 ++++++ cmds/statsd/src/atoms.proto | 19 +++++++++++++++++++ cmds/statsd/src/logd/LogEvent.cpp | 18 ++++++++++++++++++ cmds/statsd/src/logd/LogEvent.h | 3 +++ 5 files changed, 54 insertions(+) diff --git a/cmds/statsd/src/StatsService.cpp b/cmds/statsd/src/StatsService.cpp index 3107b4dd7fce..820da556eaaa 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 135a3c9cde51..e9b3d4f2f4db 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 ef3eac017192..f06914f52a80 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 2ff8aa1793ec..78a75c5ffaf0 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 43e6e4f72da9..3f47b7efdfb5 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(); /** -- GitLab