Merge "Move all the ImageWallpaper logic outside the main thread" into tm-qpr-dev am: a90ccc4457

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20543207

Change-Id: I8543bce8c6b7798b7531de16529335fd73d59834
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
TreeHugger Robot
2022-12-09 19:35:28 +00:00
committed by Automerger Merge Worker
2 changed files with 16 additions and 25 deletions

View File

@@ -45,7 +45,6 @@ import androidx.annotation.NonNull;
import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting;
import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.concurrency.DelayableExecutor;
import com.android.systemui.wallpapers.canvas.WallpaperLocalColorExtractor; import com.android.systemui.wallpapers.canvas.WallpaperLocalColorExtractor;
@@ -57,7 +56,6 @@ import java.io.IOException;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.Executor;
import javax.inject.Inject; import javax.inject.Inject;
@@ -88,17 +86,12 @@ public class ImageWallpaper extends WallpaperService {
private final DelayableExecutor mBackgroundExecutor; private final DelayableExecutor mBackgroundExecutor;
private static final int DELAY_UNLOAD_BITMAP = 2000; private static final int DELAY_UNLOAD_BITMAP = 2000;
@Main
private final Executor mMainExecutor;
@Inject @Inject
public ImageWallpaper(FeatureFlags featureFlags, public ImageWallpaper(FeatureFlags featureFlags,
@Background DelayableExecutor backgroundExecutor, @Background DelayableExecutor backgroundExecutor) {
@Main Executor mainExecutor) {
super(); super();
mFeatureFlags = featureFlags; mFeatureFlags = featureFlags;
mBackgroundExecutor = backgroundExecutor; mBackgroundExecutor = backgroundExecutor;
mMainExecutor = mainExecutor;
} }
@Override @Override
@@ -662,13 +655,9 @@ public class ImageWallpaper extends WallpaperService {
loadWallpaperAndDrawFrameInternal(); loadWallpaperAndDrawFrameInternal();
} else { } else {
mBitmapUsages++; mBitmapUsages++;
drawFrameOnCanvas(mBitmap);
// drawing is done on the main thread reportEngineShown(false);
mMainExecutor.execute(() -> { unloadBitmapIfNotUsedInternal();
drawFrameOnCanvas(mBitmap);
reportEngineShown(false);
unloadBitmapIfNotUsed();
});
} }
} }
@@ -706,11 +695,15 @@ public class ImageWallpaper extends WallpaperService {
private void unloadBitmapIfNotUsedSynchronized() { private void unloadBitmapIfNotUsedSynchronized() {
synchronized (mLock) { synchronized (mLock) {
mBitmapUsages -= 1; unloadBitmapIfNotUsedInternal();
if (mBitmapUsages <= 0) { }
mBitmapUsages = 0; }
unloadBitmapInternal();
} private void unloadBitmapIfNotUsedInternal() {
mBitmapUsages -= 1;
if (mBitmapUsages <= 0) {
mBitmapUsages = 0;
unloadBitmapInternal();
} }
} }

View File

@@ -108,7 +108,6 @@ public class ImageWallpaperTest extends SysuiTestCase {
private FeatureFlags mFeatureFlags; private FeatureFlags mFeatureFlags;
FakeSystemClock mFakeSystemClock = new FakeSystemClock(); FakeSystemClock mFakeSystemClock = new FakeSystemClock();
FakeExecutor mFakeMainExecutor = new FakeExecutor(mFakeSystemClock);
FakeExecutor mFakeBackgroundExecutor = new FakeExecutor(mFakeSystemClock); FakeExecutor mFakeBackgroundExecutor = new FakeExecutor(mFakeSystemClock);
private CountDownLatch mEventCountdown; private CountDownLatch mEventCountdown;
@@ -163,7 +162,7 @@ public class ImageWallpaperTest extends SysuiTestCase {
} }
private ImageWallpaper createImageWallpaper() { private ImageWallpaper createImageWallpaper() {
return new ImageWallpaper(mFeatureFlags, mFakeBackgroundExecutor, mFakeMainExecutor) { return new ImageWallpaper(mFeatureFlags, mFakeBackgroundExecutor) {
@Override @Override
public Engine onCreateEngine() { public Engine onCreateEngine() {
return new GLEngine(mHandler) { return new GLEngine(mHandler) {
@@ -242,7 +241,7 @@ public class ImageWallpaperTest extends SysuiTestCase {
private ImageWallpaper createImageWallpaperCanvas() { private ImageWallpaper createImageWallpaperCanvas() {
return new ImageWallpaper(mFeatureFlags, mFakeBackgroundExecutor, mFakeMainExecutor) { return new ImageWallpaper(mFeatureFlags, mFakeBackgroundExecutor) {
@Override @Override
public Engine onCreateEngine() { public Engine onCreateEngine() {
return new CanvasEngine() { return new CanvasEngine() {
@@ -315,11 +314,10 @@ public class ImageWallpaperTest extends SysuiTestCase {
assertThat(mFakeBackgroundExecutor.numPending()).isAtLeast(1); assertThat(mFakeBackgroundExecutor.numPending()).isAtLeast(1);
int n = 0; int n = 0;
while (mFakeBackgroundExecutor.numPending() + mFakeMainExecutor.numPending() >= 1) { while (mFakeBackgroundExecutor.numPending() >= 1) {
n++; n++;
assertThat(n).isAtMost(10); assertThat(n).isAtMost(10);
mFakeBackgroundExecutor.runNextReady(); mFakeBackgroundExecutor.runNextReady();
mFakeMainExecutor.runNextReady();
mFakeSystemClock.advanceTime(1000); mFakeSystemClock.advanceTime(1000);
} }