public class CpuFrequencyMetrics extends SystemMetrics<CpuFrequencyMetrics>
To keep things simple, the number of cores is determined statically and fixed on the device so
that it can't change or cause unexpected bugs - see CpuFrequencyMetricsCollector.getTotalCores()
.
Modifier and Type | Field and Description |
---|---|
SparseIntArray[] |
timeInStateS |
Constructor and Description |
---|
CpuFrequencyMetrics() |
Modifier and Type | Method and Description |
---|---|
CpuFrequencyMetrics |
diff(CpuFrequencyMetrics b,
CpuFrequencyMetrics output)
Subtracts b from the current value while being aware of core restarts.
|
boolean |
equals(java.lang.Object o) |
int |
hashCode()
Based off
AbstractMap.hashCode() : returns the sum of the hashcodes of the entries. |
CpuFrequencyMetrics |
set(CpuFrequencyMetrics b)
Sets all fields in this to values from the SystemMetrics object passed in: a _deep_ copy that
shouldn't share any values with other metrics objects.
|
static boolean |
sparseIntArrayEquals(SparseIntArray a,
SparseIntArray b)
Based off
AbstractMap.equals(java.lang.Object) -- with simplifications because we're guaranteed
sparse int arrays with no nullable values or casts. |
CpuFrequencyMetrics |
sum(CpuFrequencyMetrics b,
CpuFrequencyMetrics output)
Add values from the SystemMetrics object passed in and sets them on the output object,
if available.
|
java.lang.String |
toString() |
diff, sum
public CpuFrequencyMetrics sum(@Nullable CpuFrequencyMetrics b, @Nullable CpuFrequencyMetrics output)
SystemMetrics
sum
in class SystemMetrics<CpuFrequencyMetrics>
public CpuFrequencyMetrics diff(@Nullable CpuFrequencyMetrics b, @Nullable CpuFrequencyMetrics output)
Cpu clusters can be switched on and off as required by some devices: in those cases, the measured frequency can go down across snapshots legally.
If the time in state for any core appears to have reduced, we can infer that the core was switched off and restarted. In that case, a better approximation is the current value of the snapshot instead of a meaningless subtraction.
Some tests make this behavior more explicit: CpuFrequencyMetricsTest.testDiff()
and
CpuFrequencyMetricsTest.testDiffWithCoreReset()
for expected behavior.
diff
in class SystemMetrics<CpuFrequencyMetrics>
public CpuFrequencyMetrics set(CpuFrequencyMetrics b)
SystemMetrics
set
in class SystemMetrics<CpuFrequencyMetrics>
public boolean equals(java.lang.Object o)
equals
in class java.lang.Object
public static boolean sparseIntArrayEquals(SparseIntArray a, SparseIntArray b)
AbstractMap.equals(java.lang.Object)
-- with simplifications because we're guaranteed
sparse int arrays with no nullable values or casts.
TODO Make this a utility method, along with hashcode.
public int hashCode()
AbstractMap.hashCode()
: returns the sum of the hashcodes of the entries.hashCode
in class java.lang.Object
public java.lang.String toString()
toString
in class java.lang.Object