From d100aed6386fc82e573909e6843cc0e1eb6fc06d Mon Sep 17 00:00:00 2001 From: Aurélien Pomini Date: Fri, 7 Oct 2022 14:36:15 +0000 Subject: Reintroduce WCG drawing if supported As introduced in ag/9752181 for the GLEngine of ImageWallpaper, the CanvasEngine now checks for WallpaperManager#wallpaperSupportsWcg and draw in WCG mode if this returns true. Test: manual Bug: 243402530 Change-Id: Icaa06d9cacf39471b9021b3603908771170acfa9 --- .../android/systemui/wallpapers/ImageWallpaper.java | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/wallpapers/ImageWallpaper.java b/packages/SystemUI/src/com/android/systemui/wallpapers/ImageWallpaper.java index 6b3beeb54c76..42d7d52a71ab 100644 --- a/packages/SystemUI/src/com/android/systemui/wallpapers/ImageWallpaper.java +++ b/packages/SystemUI/src/com/android/systemui/wallpapers/ImageWallpaper.java @@ -528,6 +528,7 @@ public class ImageWallpaper extends WallpaperService { @VisibleForTesting static final int MIN_SURFACE_HEIGHT = 128; private Bitmap mBitmap; + private boolean mWideColorGamut = false; /* * Counter to unload the bitmap as soon as possible. @@ -674,14 +675,16 @@ public class ImageWallpaper extends WallpaperService { @VisibleForTesting void drawFrameOnCanvas(Bitmap bitmap) { Trace.beginSection("ImageWallpaper.CanvasEngine#drawFrame"); - // TODO change SurfaceHolder API to add wcg support - Canvas c = mSurfaceHolder.lockHardwareCanvas(); - if (c != null) { + Surface surface = mSurfaceHolder.getSurface(); + Canvas canvas = mWideColorGamut + ? surface.lockHardwareWideColorGamutCanvas() + : surface.lockHardwareCanvas(); + if (canvas != null) { Rect dest = mSurfaceHolder.getSurfaceFrame(); try { - c.drawBitmap(bitmap, null, dest, null); + canvas.drawBitmap(bitmap, null, dest, null); } finally { - mSurfaceHolder.unlockCanvasAndPost(c); + surface.unlockCanvasAndPost(canvas); } } Trace.endSection(); @@ -778,6 +781,8 @@ public class ImageWallpaper extends WallpaperService { mBitmap.recycle(); } mBitmap = bitmap; + mWideColorGamut = mWallpaperManager.wallpaperSupportsWcg( + WallpaperManager.FLAG_SYSTEM); // +2 usages for the color extraction and the delayed unload. mBitmapUsages += 2; @@ -839,10 +844,6 @@ public class ImageWallpaper extends WallpaperService { public void onOffsetsChanged(float xOffset, float yOffset, float xOffsetStep, float yOffsetStep, int xPixelOffset, int yPixelOffset) { - /* - * TODO check this formula. mPages is always >= 4, even when launcher is single-paged - * this formula is also used in the GL engine - */ final int pages; if (xOffsetStep > 0 && xOffsetStep <= 1) { pages = Math.round(1 / xOffsetStep) + 1; -- cgit v1.2.3-59-g8ed1b