Reduce impact of RenderThread in system_server
- Don't try to persist snapshots during window animations. It can
wait and doing it later while decrease the load during window
animations, leading to less jank.
- Lower RT priority to 130 from system_server. It's only used for
background things.
Bug: 37631016
Bug: 36631902
Change-Id: I4fc21b53f257d0194a7f64c3064756ab2426ff17
diff --git a/services/core/java/com/android/server/wm/TaskSnapshotPersister.java b/services/core/java/com/android/server/wm/TaskSnapshotPersister.java
index e5c7a72..0287070 100644
--- a/services/core/java/com/android/server/wm/TaskSnapshotPersister.java
+++ b/services/core/java/com/android/server/wm/TaskSnapshotPersister.java
@@ -60,6 +60,8 @@
private final ArrayDeque<WriteQueueItem> mWriteQueue = new ArrayDeque<>();
@GuardedBy("mLock")
private boolean mQueueIdling;
+ @GuardedBy("mLock")
+ private boolean mPaused;
private boolean mStarted;
private final Object mLock = new Object();
private final DirectoryResolver mDirectoryResolver;
@@ -127,6 +129,15 @@
}
}
+ void setPaused(boolean paused) {
+ synchronized (mLock) {
+ mPaused = paused;
+ if (!paused) {
+ mLock.notifyAll();
+ }
+ }
+ }
+
@TestApi
void waitForQueueEmpty() {
while (true) {
@@ -142,7 +153,9 @@
@GuardedBy("mLock")
private void sendToQueueLocked(WriteQueueItem item) {
mWriteQueue.offer(item);
- mLock.notifyAll();
+ if (!mPaused) {
+ mLock.notifyAll();
+ }
}
private File getDirectory(int userId) {
@@ -185,7 +198,11 @@
while (true) {
WriteQueueItem next;
synchronized (mLock) {
- next = mWriteQueue.poll();
+ if (mPaused) {
+ next = null;
+ } else {
+ next = mWriteQueue.poll();
+ }
}
if (next != null) {
next.write();