Repository navigation
v5.4.0 - July 1, 2025
Pre-release
Pre-release
馃殌 New Features
- Added 3 more logs-to-metrics parser types.
sum_matchingcaptures 1 integer, and sums all captured values in the
heartbeat.distribution_minmeanmaxcaptures 1 double, and generates a min/mean/max
distribution for all captured values in the heartbeat.string_propertycaptures 1 string, and reports the latest value for that
string.
- Added tracking of the metered, temporarily unmetered, and roaming network
capabilities in HRT.- Added a
connectivity.metered.latestheartbeat metric for tracking metered
network usage.
- Added a
- Added new disk wear and disk write Device Vital heartbeat metrics. eMMC/UFS
lifetime estimation and version stats are collected from the Health HAL
implementation, falling back to a hardcoded UFS or eMMC filepath if not
implemented. Bytes written each heartbeat is collected by reading the sectors
written value from/proc/diskstatsfor matching physical devices in
/sys/blockmultiplied by the sector size to get a value in bytes.disk_wear.<source>.lifetime_remaining_pct.latestcaptures the lifetime
remaining estimation for type A flash in increments of 10%. The source can
be one of: "mmc0", "624000.ufshc", or "HealthHAL".disk_wear.<source>.lifetime_b_remaining_pct.latestcaptures the lifetime
remaining estimation for type B flash in increments of 10%. The source can
be one of: "mmc0", "624000.ufshc", or "HealthHAL".disk_wear.pre_eol.latestcaptures the pre-EOL status of consumed reserved
blocks, as "Normal", "Warning", or "Urgent".disk_wear.version.latestcaptures the version as described from the vendor
implementation of the Health HAL.disk_wear.vdc.bytes_writtencaptures the bytes written for that heartbeat.
- Added per-app CPU usage metrics. The CPU usage percentage for each heartbeat
is collected by parsing/proc/<pid>/stat/for system and user time
(stime+utime) divided by the total usage (sum of all fields from
/proc/stat).- By default, the SDK will only create heartbeat metrics for a defined set of
"interesting" processes. Please reach out to customer support to configure
this set. - Otherwise, the top 10 processes exceeding the 50% CPU usage threshold will
also be recorded. Please reach out to customer support to configure these
thresholds.
- By default, the SDK will only create heartbeat metrics for a defined set of
- Added support for Android 15.
馃搱 Improvements
- Added parsers for more HRT batterystats data.
screen_dozecaptures whether the display is dozing in a low power state
(link).flashlightcaptures whether the flashlight was turned on.bluetoothcaptures whether Bluetooth was enabled.usb_datacaptures whether a USB connection was established (as reported by
android.hardware.usb.action.USB_STATE).cellular_high_tx_powercaptures whether the modem spent more of its time
at the highest power level versus any other level.nr_statecaptures the service level of the 5G network that's connected
(link).
- Updated comments on various batterystats fields. More improvements to come in
clarifying the name and use of batterystats metrics! - Dumped any existing logs when continuous logging starts, to retain logs
captured from before a reboot. - Added control over the maximum age of sampled data, to match the controls over
unsampled data. - Added support for parsing the binary log buffers (events, security, stats)
with continuous logs. - Modified dumpstate to write bugreports to /data/misc/MemfaultBugReports
instead of to Bort's app dir. This is necessary for Android 15 support and CTS
compliance to work around neverallow sepolicy rules. This also allowed
deleting the custombort_app_data_fileapp label for the Bort app.
馃毀 Fixes
- Added explicit Android System AID mappings for more consistent system UID
attribution in tombstone and network stats parsing. - Added VPN and USB as explicitly defined network types using
connectivity.network. - Fixed a bug in PhoneState where the unknown
???state was reported as
null. - Added exponential backoff for EAGAIN errors in continuous logs. Each write is
fsync'd immediately after write to reduce the likelihood of data loss. - Added missing ignore.cil files for SDKs 32, 33, and 34.
馃彔 Internal
- Stopped running unit tests on release sources.
- Migrated the SDK to communicate over a named domain (*.memfault.test) rather
than localhost for local development. - Removed unneeded mockk init calls.
- Added some tests for unknown fields in device config.
- Refactored the unsampled holding area logic into a single class.
- Differentiated some continuous logging logs for easier debugging.