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

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

Change scan downgrading to be app independent

Before this patch, every time an app started a new scan it would reset the
timer to downgrade apps down to opportunistic. Now each app is kept track
of individually so that another app doing frequent short scans doesn't cause
a long scanning app to avoid downgrading.

Fixes: 34224062
Test: Tested scanning multiple times with multiple apps / TestTracker:73279
Change-Id: Ibcae9115dcd0fb5325f7bc9fc5d6e0fe4bf6e062
(cherry picked from commit c2d42557)
parent ce3b602a
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -64,6 +64,9 @@ import com.android.bluetooth.btservice.BluetoothProto;
    // earliest recorded scan exits this window.
    static final long EXCESSIVE_SCANNING_PERIOD_MS = 30 * 1000;

    // Maximum msec before scan gets downgraded to opportunistic
    static final int SCAN_TIMEOUT_MS = 30 * 60 * 1000;

    String appName;
    int scansStarted = 0;
    int scansStopped = 0;
@@ -160,6 +163,14 @@ import com.android.bluetooth.btservice.BluetoothProto;
            EXCESSIVE_SCANNING_PERIOD_MS;
    }

    synchronized boolean isScanningTooLong() {
        if (lastScans.isEmpty() || !isScanning) {
            return false;
        }

        return (System.currentTimeMillis() - startTime) > SCAN_TIMEOUT_MS;
    }

    // This function truncates the app name for privacy reasons. Apps with
    // four part package names or more get truncated to three parts, and apps
    // with three part package names names get truncated to two. Apps with two
+8 −14
Original line number Diff line number Diff line
@@ -70,9 +70,6 @@ public class ScanManager {
    private static final int MSG_FLUSH_BATCH_RESULTS = 2;
    private static final int MSG_SCAN_TIMEOUT = 3;

    // Maximum msec before scan gets downgraded to opportunistic
    private static final int SCAN_TIMEOUT_MS = 30 * 60 * 1000;

    private static final String ACTION_REFRESH_BATCHED_SCAN =
            "com.android.bluetooth.gatt.REFRESH_BATCHED_SCAN";

@@ -199,7 +196,7 @@ public class ScanManager {
                    handleFlushBatchResults(client);
                    break;
                case MSG_SCAN_TIMEOUT:
                    mScanNative.regularScanTimeout();
                    mScanNative.regularScanTimeout(client);
                    break;
                default:
                    // Shouldn't happen.
@@ -234,8 +231,7 @@ public class ScanManager {
                        Message msg = mHandler.obtainMessage(MSG_SCAN_TIMEOUT);
                        msg.obj = client;
                        // Only one timeout message should exist at any time
                        mHandler.removeMessages(MSG_SCAN_TIMEOUT);
                        mHandler.sendMessageDelayed(msg, SCAN_TIMEOUT_MS);
                        mHandler.sendMessageDelayed(msg, AppScanStats.SCAN_TIMEOUT_MS);
                    }
                }

@@ -679,15 +675,13 @@ public class ScanManager {
            removeScanFilters(client.clientIf);
        }

        void regularScanTimeout() {
            for (ScanClient client : mRegularScanClients) {
                if (!isExemptFromScanDowngrade(client)) {
                    Log.w(TAG, "Moving scan client to opportunistic (clientIf "
                          + client.clientIf + ")");
        void regularScanTimeout(ScanClient client) {
            if (!isExemptFromScanDowngrade(client) && client.stats.isScanningTooLong()) {
                Log.w(TAG,
                        "Moving scan client to opportunistic (clientIf " + client.clientIf + ")");
                setOpportunisticScanClient(client);
                client.stats.setScanTimeout();
            }
            }

            // The scan should continue for background scans
            configureRegularScanParams();