in sample/src/main/java/com/facebook/battery/sample/BatteryApplication.java [70:115]
private void init() {
// Note -- Creating a collector instance that's shared across the application can be fairly
// useful. You can set it up and hook up all the individual metrics collectors,
// tweaking them once.
CompositeMetricsCollector.Builder collectorBuilder =
new CompositeMetricsCollector.Builder()
.addMetricsCollector(TimeMetrics.class, new TimeMetricsCollector())
.addMetricsCollector(CpuFrequencyMetrics.class, new CpuFrequencyMetricsCollector())
.addMetricsCollector(CpuMetrics.class, new CpuMetricsCollector())
.addMetricsCollector(NetworkMetrics.class, new NetworkMetricsCollector(this));
if (Build.VERSION.SDK_INT >= 24) {
collectorBuilder.addMetricsCollector(
HealthStatsMetrics.class, new HealthStatsMetricsCollector(this));
}
mMetricsCollector = collectorBuilder.build();
// Note -- The Reporter and Serializer mimic the collector; they were mainly split out into
// separate modules to keep it simple to include only what you really needed.
mMetricsReporter =
new CompositeMetricsReporter()
.addMetricsReporter(TimeMetrics.class, new TimeMetricsReporter())
.addMetricsReporter(CpuMetrics.class, new CpuMetricsReporter())
.addMetricsReporter(CpuFrequencyMetrics.class, new CpuFrequencyMetricsReporter())
.addMetricsReporter(NetworkMetrics.class, new NetworkMetricsReporter());
if (Build.VERSION.SDK_INT >= 24) {
mMetricsReporter.addMetricsReporter(
HealthStatsMetrics.class, new HealthStatsMetricsReporter());
}
mMetricsSerializer =
new CompositeMetricsSerializer()
.addMetricsSerializer(TimeMetrics.class, new TimeMetricsSerializer())
.addMetricsSerializer(CpuMetrics.class, new CpuMetricsSerializer())
.addMetricsSerializer(CpuFrequencyMetrics.class, new CpuFrequencyMetricsSerializer())
.addMetricsSerializer(NetworkMetrics.class, new NetworkMetricsSerializer());
if (Build.VERSION.SDK_INT >= 24) {
mMetricsSerializer.addMetricsSerializer(
HealthStatsMetrics.class, new HealthStatsMetricsSerializer());
}
// Note -- The stateful collector is a useful abstraction that maintains state about when it
// was last triggered, making it simple to observe changes since the last call.
// It's a very simple piece of code to reduce boilerplate, you should check out the
// underlying source code.
mStatefulCollector = new StatefulSystemMetricsCollector<>(mMetricsCollector);
}