Merge "Fix statsd ble scan logging" into pi-dev
am: f50e78d8f7
Change-Id: I5e3ab9952a44d51479389360fbed9dcfb548a8e2
This commit is contained in:
@@ -49,7 +49,7 @@ message Atom {
|
||||
oneof pushed {
|
||||
// For StatsLog reasons, 1 is illegal and will not work. Must start at 2.
|
||||
BleScanStateChanged ble_scan_state_changed = 2;
|
||||
BleUnoptimizedScanStateChanged ble_unoptimized_scan_state_changed = 3;
|
||||
// TODO: 3 is blank, but need not be
|
||||
BleScanResultReceived ble_scan_result_received = 4;
|
||||
SensorStateChanged sensor_state_changed = 5;
|
||||
GpsScanStateChanged gps_scan_state_changed = 6;
|
||||
@@ -247,31 +247,24 @@ message ProcessLifeCycleStateChanged {
|
||||
* Logged from:
|
||||
* frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
|
||||
*/
|
||||
// TODO: Consider changing to tracking per-scanner-id (log from AppScanStats).
|
||||
message BleScanStateChanged {
|
||||
repeated AttributionNode attribution_node = 1;
|
||||
|
||||
enum State {
|
||||
OFF = 0;
|
||||
ON = 1;
|
||||
// RESET indicates all ble stopped. Used when it (re)starts (e.g. after it crashes).
|
||||
RESET = 2;
|
||||
}
|
||||
optional State state = 2;
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs when an unoptimized ble scan state changes.
|
||||
*
|
||||
* Logged from:
|
||||
* frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
|
||||
*/
|
||||
// TODO: Consider changing to tracking per-scanner-id (log from AppScanStats).
|
||||
message BleUnoptimizedScanStateChanged {
|
||||
repeated AttributionNode attribution_node = 1;
|
||||
|
||||
enum State {
|
||||
OFF = 0;
|
||||
ON = 1;
|
||||
}
|
||||
optional State state = 2;
|
||||
// Does the scan have a filter.
|
||||
optional bool is_filtered = 3;
|
||||
// Whether the scan is a CALLBACK_TYPE_FIRST_MATCH scan. Called 'background' scan internally.
|
||||
optional bool is_first_match = 4;
|
||||
// Whether the scan set to piggy-back off the results of other scans (SCAN_MODE_OPPORTUNISTIC).
|
||||
optional bool is_opportunistic = 5;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -5666,29 +5666,7 @@ public class BatteryStatsImpl extends BatteryStats {
|
||||
mBluetoothScanTimer.startRunningLocked(elapsedRealtime);
|
||||
}
|
||||
mBluetoothScanNesting++;
|
||||
|
||||
if (workChain != null) {
|
||||
StatsLog.write(StatsLog.BLE_SCAN_STATE_CHANGED,
|
||||
workChain.getUids(), workChain.getTags(),
|
||||
StatsLog.BLE_SCAN_STATE_CHANGED__STATE__ON);
|
||||
if (isUnoptimized) {
|
||||
StatsLog.write(StatsLog.BLE_UNOPTIMIZED_SCAN_STATE_CHANGED,
|
||||
workChain.getUids(), workChain.getTags(),
|
||||
StatsLog.BLE_UNOPTIMIZED_SCAN_STATE_CHANGED__STATE__ON);
|
||||
}
|
||||
} else {
|
||||
StatsLog.write_non_chained(StatsLog.BLE_SCAN_STATE_CHANGED, uid, null,
|
||||
StatsLog.BLE_SCAN_STATE_CHANGED__STATE__ON);
|
||||
if (isUnoptimized) {
|
||||
StatsLog.write_non_chained(StatsLog.BLE_UNOPTIMIZED_SCAN_STATE_CHANGED, uid, null,
|
||||
StatsLog.BLE_UNOPTIMIZED_SCAN_STATE_CHANGED__STATE__ON);
|
||||
}
|
||||
}
|
||||
|
||||
getUidStatsLocked(uid).noteBluetoothScanStartedLocked(elapsedRealtime, isUnoptimized);
|
||||
if (workChain != null) {
|
||||
getUidStatsLocked(uid).addBluetoothWorkChain(workChain, isUnoptimized);
|
||||
}
|
||||
}
|
||||
|
||||
public void noteBluetoothScanStartedFromSourceLocked(WorkSource ws, boolean isUnoptimized) {
|
||||
@@ -5718,29 +5696,7 @@ public class BatteryStatsImpl extends BatteryStats {
|
||||
addHistoryRecordLocked(elapsedRealtime, uptime);
|
||||
mBluetoothScanTimer.stopRunningLocked(elapsedRealtime);
|
||||
}
|
||||
|
||||
if (workChain != null) {
|
||||
StatsLog.write(
|
||||
StatsLog.BLE_SCAN_STATE_CHANGED, workChain.getUids(), workChain.getTags(),
|
||||
StatsLog.BLE_SCAN_STATE_CHANGED__STATE__OFF);
|
||||
if (isUnoptimized) {
|
||||
StatsLog.write(StatsLog.BLE_UNOPTIMIZED_SCAN_STATE_CHANGED,
|
||||
workChain.getUids(), workChain.getTags(),
|
||||
StatsLog.BLE_UNOPTIMIZED_SCAN_STATE_CHANGED__STATE__OFF);
|
||||
}
|
||||
} else {
|
||||
StatsLog.write_non_chained(StatsLog.BLE_SCAN_STATE_CHANGED, uid, null,
|
||||
StatsLog.BLE_SCAN_STATE_CHANGED__STATE__OFF);
|
||||
if (isUnoptimized) {
|
||||
StatsLog.write_non_chained(StatsLog.BLE_UNOPTIMIZED_SCAN_STATE_CHANGED, uid, null,
|
||||
StatsLog.BLE_UNOPTIMIZED_SCAN_STATE_CHANGED__STATE__OFF);
|
||||
}
|
||||
}
|
||||
|
||||
getUidStatsLocked(uid).noteBluetoothScanStoppedLocked(elapsedRealtime, isUnoptimized);
|
||||
if (workChain != null) {
|
||||
getUidStatsLocked(uid).removeBluetoothWorkChain(workChain, isUnoptimized);
|
||||
}
|
||||
}
|
||||
|
||||
private int getAttributionUid(int uid, WorkChain workChain) {
|
||||
@@ -5775,33 +5731,9 @@ public class BatteryStatsImpl extends BatteryStats {
|
||||
+ Integer.toHexString(mHistoryCur.states2));
|
||||
addHistoryRecordLocked(elapsedRealtime, uptime);
|
||||
mBluetoothScanTimer.stopAllRunningLocked(elapsedRealtime);
|
||||
|
||||
|
||||
for (int i=0; i<mUidStats.size(); i++) {
|
||||
BatteryStatsImpl.Uid uid = mUidStats.valueAt(i);
|
||||
uid.noteResetBluetoothScanLocked(elapsedRealtime);
|
||||
|
||||
List<WorkChain> allWorkChains = uid.getAllBluetoothWorkChains();
|
||||
if (allWorkChains != null) {
|
||||
for (int j = 0; j < allWorkChains.size(); ++j) {
|
||||
StatsLog.write(StatsLog.BLE_SCAN_STATE_CHANGED,
|
||||
allWorkChains.get(j).getUids(),
|
||||
allWorkChains.get(j).getTags(),
|
||||
StatsLog.BLE_SCAN_STATE_CHANGED__STATE__OFF);
|
||||
}
|
||||
allWorkChains.clear();
|
||||
}
|
||||
|
||||
List<WorkChain> unoptimizedWorkChains = uid.getUnoptimizedBluetoothWorkChains();
|
||||
if (unoptimizedWorkChains != null) {
|
||||
for (int j = 0; j < unoptimizedWorkChains.size(); ++j) {
|
||||
StatsLog.write(StatsLog.BLE_UNOPTIMIZED_SCAN_STATE_CHANGED,
|
||||
unoptimizedWorkChains.get(j).getUids(),
|
||||
unoptimizedWorkChains.get(j).getTags(),
|
||||
StatsLog.BLE_UNOPTIMIZED_SCAN_STATE_CHANGED__STATE__OFF);
|
||||
}
|
||||
unoptimizedWorkChains.clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6873,15 +6805,6 @@ public class BatteryStatsImpl extends BatteryStats {
|
||||
*/
|
||||
final SparseArray<Pid> mPids = new SparseArray<>();
|
||||
|
||||
/**
|
||||
* The list of WorkChains associated with active bluetooth scans.
|
||||
*
|
||||
* NOTE: This is a hack and it only needs to exist because there's a "reset" API that is
|
||||
* supposed to stop and log all WorkChains that were currently active.
|
||||
*/
|
||||
ArrayList<WorkChain> mAllBluetoothChains = null;
|
||||
ArrayList<WorkChain> mUnoptimizedBluetoothChains = null;
|
||||
|
||||
public Uid(BatteryStatsImpl bsi, int uid) {
|
||||
mBsi = bsi;
|
||||
mUid = uid;
|
||||
@@ -7410,40 +7333,6 @@ public class BatteryStatsImpl extends BatteryStats {
|
||||
}
|
||||
}
|
||||
|
||||
public void addBluetoothWorkChain(WorkChain workChain, boolean isUnoptimized) {
|
||||
if (mAllBluetoothChains == null) {
|
||||
mAllBluetoothChains = new ArrayList<WorkChain>(4);
|
||||
}
|
||||
|
||||
if (isUnoptimized && mUnoptimizedBluetoothChains == null) {
|
||||
mUnoptimizedBluetoothChains = new ArrayList<WorkChain>(4);
|
||||
}
|
||||
|
||||
mAllBluetoothChains.add(workChain);
|
||||
if (isUnoptimized) {
|
||||
mUnoptimizedBluetoothChains.add(workChain);
|
||||
}
|
||||
}
|
||||
|
||||
public void removeBluetoothWorkChain(WorkChain workChain, boolean isUnoptimized) {
|
||||
if (mAllBluetoothChains != null) {
|
||||
mAllBluetoothChains.remove(workChain);
|
||||
}
|
||||
|
||||
if (isUnoptimized && mUnoptimizedBluetoothChains != null) {
|
||||
mUnoptimizedBluetoothChains.remove(workChain);
|
||||
}
|
||||
}
|
||||
|
||||
public List<WorkChain> getAllBluetoothWorkChains() {
|
||||
return mAllBluetoothChains;
|
||||
}
|
||||
|
||||
public List<WorkChain> getUnoptimizedBluetoothWorkChains() {
|
||||
return mUnoptimizedBluetoothChains;
|
||||
}
|
||||
|
||||
|
||||
public void noteResetBluetoothScanLocked(long elapsedRealtimeMs) {
|
||||
if (mBluetoothScanTimer != null) {
|
||||
mBluetoothScanTimer.stopAllRunningLocked(elapsedRealtimeMs);
|
||||
|
||||
@@ -272,53 +272,6 @@ public class BatteryStatsBackgroundStatsTest extends TestCase {
|
||||
assertEquals((3004 - 2001) * 1000, badBgTime);
|
||||
}
|
||||
|
||||
@SmallTest
|
||||
public void testAppBluetoothScan_workChainAccounting() throws Exception {
|
||||
final MockClocks clocks = new MockClocks();MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
|
||||
long curr = 0; // realtime in us
|
||||
|
||||
// On battery
|
||||
curr = 1000 * (clocks.realtime = clocks.uptime = 100);
|
||||
bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr); // on battery
|
||||
|
||||
// App in foreground
|
||||
bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND);
|
||||
|
||||
WorkSource ws = new WorkSource();
|
||||
ws.createWorkChain().addNode(500, "foo");
|
||||
ws.createWorkChain().addNode(500, "bar");
|
||||
|
||||
// Test start / stop and reset with isUnoptimized == false.
|
||||
bi.noteBluetoothScanStartedFromSourceLocked(ws, false);
|
||||
BatteryStatsImpl.Uid stats = (BatteryStatsImpl.Uid) bi.getUidStats().get(500);
|
||||
assertEquals(ws.getWorkChains(), stats.getAllBluetoothWorkChains());
|
||||
assertNull(stats.getUnoptimizedBluetoothWorkChains());
|
||||
|
||||
bi.noteBluetoothScanStoppedFromSourceLocked(ws, false);
|
||||
assertTrue(stats.getAllBluetoothWorkChains().isEmpty());
|
||||
assertNull(stats.getUnoptimizedBluetoothWorkChains());
|
||||
|
||||
bi.noteBluetoothScanStartedFromSourceLocked(ws, false);
|
||||
bi.noteResetBluetoothScanLocked();
|
||||
assertTrue(stats.getAllBluetoothWorkChains().isEmpty());
|
||||
assertNull(stats.getUnoptimizedBluetoothWorkChains());
|
||||
|
||||
// Test start / stop and reset with isUnoptimized == true.
|
||||
bi.noteBluetoothScanStartedFromSourceLocked(ws, true);
|
||||
stats = (BatteryStatsImpl.Uid) bi.getUidStats().get(500);
|
||||
assertEquals(ws.getWorkChains(), stats.getAllBluetoothWorkChains());
|
||||
assertEquals(ws.getWorkChains(), stats.getUnoptimizedBluetoothWorkChains());
|
||||
|
||||
bi.noteBluetoothScanStoppedFromSourceLocked(ws, true);
|
||||
assertTrue(stats.getAllBluetoothWorkChains().isEmpty());
|
||||
assertTrue(stats.getUnoptimizedBluetoothWorkChains().isEmpty());
|
||||
|
||||
bi.noteBluetoothScanStartedFromSourceLocked(ws, true);
|
||||
bi.noteResetBluetoothScanLocked();
|
||||
assertTrue(stats.getAllBluetoothWorkChains().isEmpty());
|
||||
assertTrue(stats.getUnoptimizedBluetoothWorkChains().isEmpty());
|
||||
}
|
||||
|
||||
@SmallTest
|
||||
public void testJob() throws Exception {
|
||||
final MockClocks clocks = new MockClocks();
|
||||
|
||||
Reference in New Issue
Block a user