Merge "Move all the ImageWallpaper logic outside the main thread" into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
a90ccc4457
@@ -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++;
|
||||||
|
|
||||||
// drawing is done on the main thread
|
|
||||||
mMainExecutor.execute(() -> {
|
|
||||||
drawFrameOnCanvas(mBitmap);
|
drawFrameOnCanvas(mBitmap);
|
||||||
reportEngineShown(false);
|
reportEngineShown(false);
|
||||||
unloadBitmapIfNotUsed();
|
unloadBitmapIfNotUsedInternal();
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -706,13 +695,17 @@ public class ImageWallpaper extends WallpaperService {
|
|||||||
|
|
||||||
private void unloadBitmapIfNotUsedSynchronized() {
|
private void unloadBitmapIfNotUsedSynchronized() {
|
||||||
synchronized (mLock) {
|
synchronized (mLock) {
|
||||||
|
unloadBitmapIfNotUsedInternal();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void unloadBitmapIfNotUsedInternal() {
|
||||||
mBitmapUsages -= 1;
|
mBitmapUsages -= 1;
|
||||||
if (mBitmapUsages <= 0) {
|
if (mBitmapUsages <= 0) {
|
||||||
mBitmapUsages = 0;
|
mBitmapUsages = 0;
|
||||||
unloadBitmapInternal();
|
unloadBitmapInternal();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private void unloadBitmapInternal() {
|
private void unloadBitmapInternal() {
|
||||||
Trace.beginSection("ImageWallpaper.CanvasEngine#unloadBitmap");
|
Trace.beginSection("ImageWallpaper.CanvasEngine#unloadBitmap");
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user