Further async settings write optimizations.
Bug: 252726591 Test: presubmit Change-Id: Ie08130539adefa71f95bebab65c60ff30eb83d26
This commit is contained in:
@@ -5613,8 +5613,7 @@ public final class Settings implements Watchable, Snappable {
|
||||
|
||||
// Low-priority handlers running on SystemBg thread.
|
||||
private final Handler mAsyncHandler = new MyHandler();
|
||||
private final Handler mPersistenceHandler = new Handler(
|
||||
BackgroundThread.getHandler().getLooper());
|
||||
private final Handler mPersistenceHandler = new PersistenceHandler();
|
||||
|
||||
private final Object mLock = new Object();
|
||||
|
||||
@@ -5761,20 +5760,22 @@ public final class Settings implements Watchable, Snappable {
|
||||
@NonNull WatchedArrayMap<String, SharedUserSetting> sharedUsers,
|
||||
@Nullable Handler pmHandler, @NonNull Object pmLock,
|
||||
boolean sync) {
|
||||
final int version;
|
||||
final String fingerprint;
|
||||
final boolean isLegacyPermissionStateStale;
|
||||
synchronized (mLock) {
|
||||
mAsyncHandler.removeMessages(userId);
|
||||
mWriteScheduled.delete(userId);
|
||||
|
||||
version = mVersions.get(userId, INITIAL_VERSION);
|
||||
fingerprint = mFingerprints.get(userId);
|
||||
isLegacyPermissionStateStale = mIsLegacyPermissionStateStale;
|
||||
mIsLegacyPermissionStateStale = false;
|
||||
}
|
||||
|
||||
Runnable writer = () -> {
|
||||
final int version;
|
||||
final String fingerprint;
|
||||
final boolean isLegacyPermissionStateStale;
|
||||
synchronized (mLock) {
|
||||
version = mVersions.get(userId, INITIAL_VERSION);
|
||||
fingerprint = mFingerprints.get(userId);
|
||||
isLegacyPermissionStateStale = mIsLegacyPermissionStateStale;
|
||||
mIsLegacyPermissionStateStale = false;
|
||||
}
|
||||
|
||||
final RuntimePermissionsState runtimePermissions;
|
||||
synchronized (pmLock) {
|
||||
if (sync || isLegacyPermissionStateStale) {
|
||||
@@ -5823,7 +5824,7 @@ public final class Settings implements Watchable, Snappable {
|
||||
}
|
||||
if (pmHandler != null) {
|
||||
// Async version.
|
||||
mPersistenceHandler.post(() -> writePendingStates());
|
||||
mPersistenceHandler.obtainMessage(userId).sendToTarget();
|
||||
} else {
|
||||
// Sync version.
|
||||
writePendingStates();
|
||||
@@ -6099,6 +6100,17 @@ public final class Settings implements Watchable, Snappable {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private final class PersistenceHandler extends Handler {
|
||||
PersistenceHandler() {
|
||||
super(BackgroundThread.getHandler().getLooper());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleMessage(Message message) {
|
||||
writePendingStates();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user