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

Commit 939ea088 authored by Ajay Panicker's avatar Ajay Panicker Committed by Gerrit Code Review
Browse files

Merge "Add more statistics to scan logs"

parents 53dd65a5 f6ca9c52
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();
        }
    }