Library that helps in instrumenting battery related system metrics.
Switch branches/tags
Nothing to show
Clone or download
swkrueger and facebook-github-bot Treat invalid metrics as zeros for the sum of CompositeMetrics
Summary: When CompositeMetrics are deserialized, metrics that did not exist or that were invalid at the time of serialization will be marked as invalid. It is expected that, when a valid metric is then added to this invalid metric, that the invalid metrics will be treated as zeros and that the result will be valid.

Reviewed By: kunalb

Differential Revision: D10368456

fbshipit-source-id: bddf2da6256a0c78145594a53f86ea14955d7852
Latest commit ca22ce6 Oct 17, 2018

Battery Metrics

Battery Metrics is a lightweight android library to quickly instrument several metrics for understanding battery consumption.

As a developer, it's surprisingly hard to understand how your application affects battery life on Android — relying on the operating system level reported battery level tends to be inaccurate (because the reported levels are fairly coarse, affected by every app running on the device and smoothed out) and while it's possible to get really good measurements locally you don't really know what sort of experience users are having in the wild.

The library helps instrument hardware utilization to be able to understand how the application is behaving -- most of the underlying hardware metrics are either exposed by the OS, or not directly accessible -- which is where this library comes into play. We've written several metrics collectors that read from procfiles, or provide a consistent way to call into to instrument your application.

Adding BatteryMetrics

Add jcenter to your repositories –

repositories {

And add dependencies on the projects you'd like to use in build.gradle

dependencies {
    implementation 'com.facebook.battery:metrics:1.0.0'
    implementation 'com.facebook.battery:reporters:1.0.0'   // optional
    implementation 'com.facebook.battery:serializers:1.0.0' // optional

Quick Start

As a simple quickstart, let's instrument sample activity to check CPU time while the activity is being used in the foreground --

class SampleActivity extends Activity {

  private static final CpuMetricsCollector sCollector = new CpuMetricsCollector();
  private final CpuMetrics mInitialMetrics = sCollector.createMetrics();
  private final CpuMetrics mFinalMetrics = sCollector.createMetrics();

  protected void onResume() {

  protected void onPause() {

    Log.d("BatteryMetrics", mFinalMetrics.diff(mInitialMetrics).toString());

And foregrounding and background the application prints the metrics to logcat --

CpuMetrics{userTimeS=0.06, systemTimeS=0.04, childUserTimeS=0.0, childSystemTimeS=0.0}

Sample App

Building further on this, there are many more metrics to collect, and some utility classes to reduce boilerplate -- a more detailed deep dive into using the API is in the sample app: check out sample/../

You can quickly install and run the app --

./gradlew :sample:installDebug




BatteryMetrics is BSD-licensed. We also provide an additional patent grant.