PowerMetric


@RequiresApi(value = 29)
@ExperimentalMetricApi
class PowerMetric : Metric


Captures the change of power, energy or battery charge metrics over time for specified duration. A configurable output of power, energy, subsystems, and battery charge will be generated. Subsystem outputs will include the sum of all power or energy metrics within it. A metric total will also be generated for power and energy, as well as a metric which is the sum of all unselected metrics.

Summary

Nested types

sealed class PowerMetric.Type

Configures the PowerMetric request.

Public companion functions

PowerMetric.Type.Battery
PowerMetric.Type.Energy
PowerMetric.Type.Power
Boolean

Returns true if Type.Battery measurements can be performed, based on current device charge.

Boolean

Returns true if the current device can be used for high precision Power and Energy metrics.

Public constructors

Public companion functions

Battery

Added in 1.2.0
fun Battery(): PowerMetric.Type.Battery

Energy

fun Energy(
    categories: Map<PowerCategoryPowerCategoryDisplayLevel> = emptyMap()
): PowerMetric.Type.Energy

Power

fun Power(
    categories: Map<PowerCategoryPowerCategoryDisplayLevel> = emptyMap()
): PowerMetric.Type.Power

deviceBatteryHasMinimumCharge

Added in 1.3.0
fun deviceBatteryHasMinimumCharge(): Boolean

Returns true if Type.Battery measurements can be performed, based on current device charge.

This can be used to change behavior or throw a clear error before metric configuration, or to skip the test, e.g. with assumeTrue(PowerMetric.deviceBatteryHasMinimumCharge())

deviceSupportsHighPrecisionTracking

Added in 1.3.0
fun deviceSupportsHighPrecisionTracking(): Boolean

Returns true if the current device can be used for high precision Power and Energy metrics.

This can be used to change behavior or fall back to lower precision tracking:

metrics = listOf(
if (PowerMetric.deviceSupportsHighPrecisionTracking()) {
PowerMetric(Type.Energy()) // high precision tracking
} else {
PowerMetric(Type.Battery()) // fall back to less precise tracking
}
)

Or to skip a test when detailed tracking isn't available:

@Test fun myDetailedPowerBenchmark {
assumeTrue(PowerMetric.deviceSupportsHighPrecisionTracking())
macrobenchmarkRule.measureRepeated (
metrics = listOf(PowerMetric(Type.Energy(...)))
) {
...
}
}

Public constructors

PowerMetric

Added in 1.2.0
PowerMetric(type: PowerMetric.Type)
Parameters
type: PowerMetric.Type

Either Type.Energy or Type.Power, which can be configured to show components of system power usage, or Type.Battery, which will halt charging of device to measure power drain.

For Type.Energy or Type.Power, the sum of all categories will be displayed as a Total metric. The sum of all unrequested categories will be displayed as an Unselected metric. The subsystems that have not been categorized will be displayed as an Uncategorized metric. You can check if the local device supports this high precision tracking with deviceSupportsHighPrecisionTracking.

For Type.Battery, the charge for the start of the run and the end of the run will be displayed. An additional Diff metric will be displayed to indicate the charge drain over the course of the test.

The metrics will be stored in the format <type><name><unit>. This outputs measurements like the following:

Power metrics example:

powerCategoryDisplayUw       min       128.2,   median       128.7,   max       129.8
powerComponentCpuBigUw min 1.9, median 2.9, max 3.4
powerComponentCpuLittleUw min 65.8, median 76.2, max 79.7
powerComponentCpuMidUw min 10.8, median 13.3, max 13.6
powerTotalUw min 362.4, median 395.2, max 400.6
powerUnselectedUw min 155.3, median 170.8, max 177.8

Energy metrics example:

energyCategoryDisplayUws     min    610,086.0,   median    623,183.0,   max    627,259.0
energyComponentCpuBigUws min 9,233.0, median 13,566.0, max 16,536.0
energyComponentCpuLittleUws min 318,591.0, median 368,211.0, max 379,106.0
energyComponentCpuMidUws min 52,143.0, median 64,462.0, max 64,893.0
energyTotalUws min 1,755,261.0, median 1,880,687.0, max 1,935,402.0
energyUnselectedUws min 752,111.0, median 813,036.0, max 858,934.0

Battery metrics example:

batteryDiffMah       min         2.0,   median         2.0,   max         4.0
batteryEndMah min 3,266.0, median 3,270.0, max 3,276.0
batteryStartMah min 3,268.0, median 3,274.0, max 3,278.0

This measurement is not available prior to API 29.