Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f6ca9c52 authored by Ajay Panicker's avatar Ajay Panicker
Browse files

Add more statistics to scan logs

Added length of connection time to connections. Also added scan type
(opportunistic/background) to last X scans.

Example of new print:
GATT Client Map
  Entries: 2

  no.nordicsemi.android.mcp (Registered)
  LE scans (started/stopped)         : 2 / 2
  Scan time in ms (min/max/avg/total): 1604 / 7274 / 4439 / 8878
  Last 2 scans                       :
    1970/02/19 21:30:20 - 1604ms
    1970/02/19 23:59:00 - 7274ms
  Application ID                     : 6
  UUID                               : 0c452531-a57e-44df-9ac6-e2b780d2f715
  Connections: 1
    6: FF:08:11:53:44:A1 10008ms

  com.example.apanicke.bletest (Registered)
  LE scans (started/stopped)         : 2 / 2
  Scan time in ms (min/max/avg/total): 2946 / 9996 / 6471 / 12942
  Last 2 scans                       :
    1970/02/19 21:30:07 - 2946ms Opp
    1970/02/19 21:30:17 - 9996ms Opp
  Application ID                     : 5
  UUID                               : f25c1bdf-559f-43a6-8348-40ca92975b33
  Connections: 0

Bug: 27294154
Change-Id: I7460fb1568f20a1ce13b01d101517852cf9aec4a
parent 53dd65a5
Loading
Loading
Loading
Loading
+54 −26
Original line number Diff line number Diff line
@@ -57,6 +57,22 @@ import com.android.bluetooth.btservice.BluetoothProto;
     * on a per application basis.
     */
    class ScanStats {

        class LastScan {
            long durration;
            long timestamp;
            boolean opportunistic;
            boolean background;

            public LastScan(long timestamp, long durration,
                            boolean opportunistic, boolean background) {
                this.durration = durration;
                this.timestamp = timestamp;
                this.opportunistic = opportunistic;
                this.background = background;
            }
        }

        static final int NUM_SCAN_DURATIONS_KEPT = 5;

        String appName;
@@ -69,8 +85,7 @@ import com.android.bluetooth.btservice.BluetoothProto;
        long minScanTime = Long.MAX_VALUE;
        long maxScanTime = 0;
        long totalScanTime = 0;
        List<Long> lastScans = new ArrayList<Long>(NUM_SCAN_DURATIONS_KEPT + 1);
        List<Long> lastScanTimestamps = new ArrayList<Long>(NUM_SCAN_DURATIONS_KEPT + 1);
        List<LastScan> lastScans = new ArrayList<LastScan>(NUM_SCAN_DURATIONS_KEPT + 1);
        long startTime = 0;
        long stopTime = 0;

@@ -85,10 +100,6 @@ import com.android.bluetooth.btservice.BluetoothProto;
            this.scansStarted++;
            isScanning = true;
            startTime = System.currentTimeMillis();
            if (settings != null) {
                isOpportunisticScan = settings.getScanMode() == ScanSettings.SCAN_MODE_OPPORTUNISTIC;
                isBackgroundScan = (settings.getCallbackType() & ScanSettings.CALLBACK_TYPE_FIRST_MATCH) != 0;
            }

            BluetoothProto.ScanEvent scanEvent = new BluetoothProto.ScanEvent();
            scanEvent.setScanEventType(BluetoothProto.ScanEvent.SCAN_EVENT_START);
@@ -96,9 +107,11 @@ import com.android.bluetooth.btservice.BluetoothProto;
            scanEvent.setInitiator(appName);
            scanEvent.setEventTimeMillis(System.currentTimeMillis());

            lastScanTimestamps.add(startTime);
            if (lastScanTimestamps.size() > NUM_SCAN_DURATIONS_KEPT) {
                lastScanTimestamps.remove(0);
            lastScans.add(new LastScan(startTime, 0, false, false));

            if (settings != null) {
              isOpportunisticScan = settings.getScanMode() == ScanSettings.SCAN_MODE_OPPORTUNISTIC;
              isBackgroundScan = (settings.getCallbackType() & ScanSettings.CALLBACK_TYPE_FIRST_MATCH) != 0;
            }

            synchronized(mScanEvents) {
@@ -117,13 +130,18 @@ import com.android.bluetooth.btservice.BluetoothProto;
            stopTime = System.currentTimeMillis();
            long currTime = stopTime - startTime;

            isOpportunisticScan = false;
            isBackgroundScan = false;

            minScanTime = Math.min(currTime, minScanTime);
            maxScanTime = Math.max(currTime, maxScanTime);
            totalScanTime += currTime;
            lastScans.add(currTime);

            LastScan curr = lastScans.get(lastScans.size() - 1);
            curr.durration = currTime;
            curr.opportunistic = isOpportunisticScan;
            curr.background = isBackgroundScan;

            isOpportunisticScan = false;
            isBackgroundScan = false;

            if (lastScans.size() > NUM_SCAN_DURATIONS_KEPT) {
                lastScans.remove(0);
            }
@@ -175,19 +193,26 @@ import com.android.bluetooth.btservice.BluetoothProto;
            sb.append("  LE scans (started/stopped)         : " +
                      scansStarted + " / " +
                      scansStopped + "\n");
            sb.append("  Scan time in ms (min/max/avg)    : " +
            sb.append("  Scan time in ms (min/max/avg/total): " +
                      minScan + " / " +
                      maxScan + " / " +
                      avgScan + "\n");
                      avgScan + " / " +
                      totalScanTime + "\n");

            if (lastScans.size() != 0) {
                sb.append("  Last " + lastScans.size() +
                          " scans (timestamp - duration):\n");

                for (int i = 0; i < lastScans.size(); i++) {
                    Date timestamp = new Date(lastScanTimestamps.get(i));
                int lastScansSize = scansStopped < NUM_SCAN_DURATIONS_KEPT ?
                                    scansStopped : NUM_SCAN_DURATIONS_KEPT;
                sb.append("  Last " + lastScansSize +
                          " scans                       :\n");

                for (int i = 0; i < lastScansSize; i++) {
                    LastScan scan = lastScans.get(i);
                    Date timestamp = new Date(scan.timestamp);
                    sb.append("    " + dateFormat.format(timestamp) + " - ");
                    sb.append(lastScans.get(i) + "ms\n");
                    sb.append(scan.durration + "ms ");
                    if (scan.opportunistic) sb.append("Opp ");
                    if (scan.background) sb.append("Back");
                    sb.append("\n");
                }
            }

@@ -209,8 +234,9 @@ import com.android.bluetooth.btservice.BluetoothProto;
                Iterator<Connection> ii = connections.iterator();
                while(ii.hasNext()) {
                    Connection connection = ii.next();
                    long connectionTime = System.currentTimeMillis() - connection.startTime;
                    sb.append("    " + connection.connId + ": " +
                              connection.address + "\n");
                              connection.address + " " + connectionTime + "ms\n");
                }
            }
            sb.append("\n");
@@ -224,11 +250,13 @@ import com.android.bluetooth.btservice.BluetoothProto;
        int connId;
        String address;
        int appId;
        long startTime;

        Connection(int connId, String address,int appId) {
            this.connId = connId;
            this.address = address;
            this.appId = appId;
            this.startTime = System.currentTimeMillis();
        }
    }