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

Commit 96b9ddbc authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Reduce lock interactions in backup transport management" into oc-mr1-dev

parents 56afee3c 2f87cb2d
Loading
Loading
Loading
Loading
+10 −7
Original line number Diff line number Diff line
@@ -1983,7 +1983,7 @@ public class BackupManagerService implements BackupManagerServiceInterface {
                if (uri == null) {
                    return;
                }
                String pkgName = uri.getSchemeSpecificPart();
                final String pkgName = uri.getSchemeSpecificPart();
                if (pkgName != null) {
                    pkgList = new String[] { pkgName };
                }
@@ -1991,7 +1991,7 @@ public class BackupManagerService implements BackupManagerServiceInterface {
                // At package-changed we only care about looking at new transport states
                if (changed) {
                    String[] components =
                    final String[] components =
                            intent.getStringArrayExtra(Intent.EXTRA_CHANGED_COMPONENT_NAME_LIST);
                    if (MORE_DEBUG) {
@@ -2001,7 +2001,8 @@ public class BackupManagerService implements BackupManagerServiceInterface {
                        }
                    }
                    mTransportManager.onPackageChanged(pkgName, components);
                    mBackupHandler.post(
                            () -> mTransportManager.onPackageChanged(pkgName, components));
                    return; // nothing more to do in the PACKAGE_CHANGED case
                }
@@ -2033,7 +2034,7 @@ public class BackupManagerService implements BackupManagerServiceInterface {
                }
                // If they're full-backup candidates, add them there instead
                final long now = System.currentTimeMillis();
                for (String packageName : pkgList) {
                for (final String packageName : pkgList) {
                    try {
                        PackageInfo app = mPackageManager.getPackageInfo(packageName, 0);
                        if (appGetsFullBackup(app)
@@ -2050,7 +2051,8 @@ public class BackupManagerService implements BackupManagerServiceInterface {
                            writeFullBackupScheduleAsync();
                        }
                        mTransportManager.onPackageAdded(packageName);
                        mBackupHandler.post(
                                () -> mTransportManager.onPackageAdded(packageName));
                    } catch (NameNotFoundException e) {
                        // doesn't really exist; ignore it
@@ -2074,8 +2076,9 @@ public class BackupManagerService implements BackupManagerServiceInterface {
                        removePackageParticipantsLocked(pkgList, uid);
                    }
                }
                for (String pkgName : pkgList) {
                    mTransportManager.onPackageRemoved(pkgName);
                for (final String pkgName : pkgList) {
                    mBackupHandler.post(
                            () -> mTransportManager.onPackageRemoved(pkgName));
                }
            }
        }
+10 −7
Original line number Diff line number Diff line
@@ -1197,7 +1197,7 @@ public class RefactoredBackupManagerService implements BackupManagerServiceInter
                if (uri == null) {
                    return;
                }
                String pkgName = uri.getSchemeSpecificPart();
                final String pkgName = uri.getSchemeSpecificPart();
                if (pkgName != null) {
                    pkgList = new String[]{pkgName};
                }
@@ -1205,7 +1205,7 @@ public class RefactoredBackupManagerService implements BackupManagerServiceInter

                // At package-changed we only care about looking at new transport states
                if (changed) {
                    String[] components =
                    final String[] components =
                            intent.getStringArrayExtra(Intent.EXTRA_CHANGED_COMPONENT_NAME_LIST);

                    if (MORE_DEBUG) {
@@ -1215,7 +1215,8 @@ public class RefactoredBackupManagerService implements BackupManagerServiceInter
                        }
                    }

                    mTransportManager.onPackageChanged(pkgName, components);
                    mBackupHandler.post(
                            () -> mTransportManager.onPackageChanged(pkgName, components));
                    return; // nothing more to do in the PACKAGE_CHANGED case
                }

@@ -1247,7 +1248,7 @@ public class RefactoredBackupManagerService implements BackupManagerServiceInter
                }
                // If they're full-backup candidates, add them there instead
                final long now = System.currentTimeMillis();
                for (String packageName : pkgList) {
                for (final String packageName : pkgList) {
                    try {
                        PackageInfo app = mPackageManager.getPackageInfo(packageName, 0);
                        if (AppBackupUtils.appGetsFullBackup(app)
@@ -1265,7 +1266,8 @@ public class RefactoredBackupManagerService implements BackupManagerServiceInter
                            writeFullBackupScheduleAsync();
                        }

                        mTransportManager.onPackageAdded(packageName);
                        mBackupHandler.post(
                                () -> mTransportManager.onPackageAdded(packageName));

                    } catch (NameNotFoundException e) {
                        // doesn't really exist; ignore it
@@ -1289,8 +1291,9 @@ public class RefactoredBackupManagerService implements BackupManagerServiceInter
                        removePackageParticipantsLocked(pkgList, uid);
                    }
                }
                for (String pkgName : pkgList) {
                    mTransportManager.onPackageRemoved(pkgName);
                for (final String pkgName : pkgList) {
                    mBackupHandler.post(
                            () -> mTransportManager.onPackageRemoved(pkgName));
                }
            }
        }
+13 −14
Original line number Diff line number Diff line
@@ -316,9 +316,9 @@ public class TransportManager {
    private class TransportConnection implements ServiceConnection {

        // Hold mTransportsLock to access these fields so as to provide a consistent view of them.
        private IBackupTransport mBinder;
        private volatile IBackupTransport mBinder;
        private final List<SelectBackupTransportCallback> mListeners = new ArrayList<>();
        private String mTransportName;
        private volatile String mTransportName;

        private final ComponentName mTransportComponent;

@@ -401,27 +401,26 @@ public class TransportManager {
                    + rebindTimeout + "ms");
        }

        // Intentionally not synchronized -- the variable is volatile and changes to its value
        // are inside synchronized blocks, providing a memory sync barrier; and this method
        // does not touch any other state protected by that lock.
        private IBackupTransport getBinder() {
            synchronized (mTransportLock) {
            return mBinder;
        }
        }

        // Intentionally not synchronized; same as getBinder()
        private String getName() {
            synchronized (mTransportLock) {
            return mTransportName;
        }
        }

        // Intentionally not synchronized; same as getBinder()
        private void bindIfUnbound() {
            synchronized (mTransportLock) {
            if (mBinder == null) {
                Slog.d(TAG,
                        "Rebinding to transport " + mTransportComponent.flattenToShortString());
                bindToTransport(mTransportComponent, this);
            }
        }
        }

        private void addListener(SelectBackupTransportCallback listener) {
            synchronized (mTransportLock) {