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

Commit a66d8a46 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Move all the ImageWallpaper logic outside the main thread" into...

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

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



Change-Id: I318015eb5e1cd56b1d35f0281f7531895293e64d
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 1abb23d5 e219cbfa
Loading
Loading
Loading
Loading
+13 −20
Original line number Diff line number Diff line
@@ -46,7 +46,6 @@ import androidx.annotation.NonNull;

import com.android.internal.annotations.VisibleForTesting;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.util.concurrency.DelayableExecutor;
import com.android.systemui.wallpapers.canvas.WallpaperLocalColorExtractor;
@@ -58,7 +57,6 @@ import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executor;

import javax.inject.Inject;

@@ -89,17 +87,12 @@ public class ImageWallpaper extends WallpaperService {
    private final DelayableExecutor mBackgroundExecutor;
    private static final int DELAY_UNLOAD_BITMAP = 2000;

    @Main
    private final Executor mMainExecutor;

    @Inject
    public ImageWallpaper(FeatureFlags featureFlags,
            @Background DelayableExecutor backgroundExecutor,
            @Main Executor mainExecutor) {
            @Background DelayableExecutor backgroundExecutor) {
        super();
        mFeatureFlags = featureFlags;
        mBackgroundExecutor = backgroundExecutor;
        mMainExecutor = mainExecutor;
    }

    @Override
@@ -672,13 +665,9 @@ public class ImageWallpaper extends WallpaperService {
                loadWallpaperAndDrawFrameInternal();
            } else {
                mBitmapUsages++;

                // drawing is done on the main thread
                mMainExecutor.execute(() -> {
                drawFrameOnCanvas(mBitmap);
                reportEngineShown(false);
                    unloadBitmapIfNotUsed();
                });
                unloadBitmapIfNotUsedInternal();
            }
        }

@@ -716,13 +705,17 @@ public class ImageWallpaper extends WallpaperService {

        private void unloadBitmapIfNotUsedSynchronized() {
            synchronized (mLock) {
                unloadBitmapIfNotUsedInternal();
            }
        }

        private void unloadBitmapIfNotUsedInternal() {
            mBitmapUsages -= 1;
            if (mBitmapUsages <= 0) {
                mBitmapUsages = 0;
                unloadBitmapInternal();
            }
        }
        }

        private void unloadBitmapInternal() {
            Trace.beginSection("ImageWallpaper.CanvasEngine#unloadBitmap");
+3 −5
Original line number Diff line number Diff line
@@ -108,7 +108,6 @@ public class ImageWallpaperTest extends SysuiTestCase {
    private FeatureFlags mFeatureFlags;

    FakeSystemClock mFakeSystemClock = new FakeSystemClock();
    FakeExecutor mFakeMainExecutor = new FakeExecutor(mFakeSystemClock);
    FakeExecutor mFakeBackgroundExecutor = new FakeExecutor(mFakeSystemClock);

    private CountDownLatch mEventCountdown;
@@ -163,7 +162,7 @@ public class ImageWallpaperTest extends SysuiTestCase {
    }

    private ImageWallpaper createImageWallpaper() {
        return new ImageWallpaper(mFeatureFlags, mFakeBackgroundExecutor, mFakeMainExecutor) {
        return new ImageWallpaper(mFeatureFlags, mFakeBackgroundExecutor) {
            @Override
            public Engine onCreateEngine() {
                return new GLEngine(mHandler) {
@@ -242,7 +241,7 @@ public class ImageWallpaperTest extends SysuiTestCase {


    private ImageWallpaper createImageWallpaperCanvas() {
        return new ImageWallpaper(mFeatureFlags, mFakeBackgroundExecutor, mFakeMainExecutor) {
        return new ImageWallpaper(mFeatureFlags, mFakeBackgroundExecutor) {
            @Override
            public Engine onCreateEngine() {
                return new CanvasEngine() {
@@ -315,11 +314,10 @@ public class ImageWallpaperTest extends SysuiTestCase {
        assertThat(mFakeBackgroundExecutor.numPending()).isAtLeast(1);

        int n = 0;
        while (mFakeBackgroundExecutor.numPending() + mFakeMainExecutor.numPending() >= 1) {
        while (mFakeBackgroundExecutor.numPending() >= 1) {
            n++;
            assertThat(n).isAtMost(10);
            mFakeBackgroundExecutor.runNextReady();
            mFakeMainExecutor.runNextReady();
            mFakeSystemClock.advanceTime(1000);
        }