diff options
Diffstat (limited to 'packages/SystemUI/src/com/android/systemui/ImageWallpaper.java')
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/ImageWallpaper.java | 54 |
1 files changed, 46 insertions, 8 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java index bd91333100bd..29a7167394ae 100644 --- a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java +++ b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java @@ -20,6 +20,7 @@ import android.app.ActivityManager; import android.content.Context; import android.graphics.Rect; import android.os.HandlerThread; +import android.os.Trace; import android.service.wallpaper.WallpaperService; import android.util.Log; import android.util.Size; @@ -37,6 +38,8 @@ import com.android.systemui.statusbar.phone.DozeParameters; import java.io.FileDescriptor; import java.io.PrintWriter; +import javax.inject.Inject; + /** * Default built-in wallpaper that simply shows a static image. */ @@ -48,8 +51,16 @@ public class ImageWallpaper extends WallpaperService { private static final int DELAY_FINISH_RENDERING = 1000; private static final int INTERVAL_WAIT_FOR_RENDERING = 100; private static final int PATIENCE_WAIT_FOR_RENDERING = 10; + private static final boolean DEBUG = true; + private final DozeParameters mDozeParameters; private HandlerThread mWorker; + @Inject + public ImageWallpaper(DozeParameters dozeParameters) { + super(); + mDozeParameters = dozeParameters; + } + @Override public void onCreate() { super.onCreate(); @@ -59,7 +70,7 @@ public class ImageWallpaper extends WallpaperService { @Override public Engine onCreateEngine() { - return new GLEngine(this); + return new GLEngine(this, mDozeParameters); } @Override @@ -87,9 +98,9 @@ public class ImageWallpaper extends WallpaperService { // This variable can only be accessed in synchronized block. private boolean mWaitingForRendering; - GLEngine(Context context) { + GLEngine(Context context, DozeParameters dozeParameters) { mNeedTransition = ActivityManager.isHighEndGfx() - && !DozeParameters.getInstance(context).getDisplayNeedsBlanking(); + && !dozeParameters.getDisplayNeedsBlanking(); // We will preserve EGL context when we are in lock screen or aod // to avoid janking in following transition, we need to release when back to home. @@ -125,6 +136,10 @@ public class ImageWallpaper extends WallpaperService { @Override public void onAmbientModeChanged(boolean inAmbientMode, long animationDuration) { if (!mNeedTransition) return; + if (DEBUG) { + Log.d(TAG, "onAmbientModeChanged: inAmbient=" + inAmbientMode + + ", duration=" + animationDuration); + } mWorker.getThreadHandler().post( () -> mRenderer.updateAmbientMode(inAmbientMode, animationDuration)); if (inAmbientMode && animationDuration == 0) { @@ -184,17 +199,32 @@ public class ImageWallpaper extends WallpaperService { @Override public void onSurfaceRedrawNeeded(SurfaceHolder holder) { + if (DEBUG) { + Log.d(TAG, "onSurfaceRedrawNeeded: mNeedRedraw=" + mNeedRedraw); + } + mWorker.getThreadHandler().post(() -> { if (mNeedRedraw) { - preRender(); - requestRender(); - postRender(); + drawFrame(); mNeedRedraw = false; } }); } @Override + public void onVisibilityChanged(boolean visible) { + if (DEBUG) { + Log.d(TAG, "wallpaper visibility changes: " + visible); + } + } + + private void drawFrame() { + preRender(); + requestRender(); + postRender(); + } + + @Override public void onStatePostChange() { // When back to home, we try to release EGL, which is preserved in lock screen or aod. if (mController.getState() == StatusBarState.SHADE) { @@ -205,7 +235,9 @@ public class ImageWallpaper extends WallpaperService { @Override public void preRender() { // This method should only be invoked from worker thread. + Trace.beginSection("ImageWallpaper#preRender"); preRenderInternal(); + Trace.endSection(); } private void preRenderInternal() { @@ -240,7 +272,9 @@ public class ImageWallpaper extends WallpaperService { @Override public void requestRender() { // This method should only be invoked from worker thread. + Trace.beginSection("ImageWallpaper#requestRender"); requestRenderInternal(); + Trace.endSection(); } private void requestRenderInternal() { @@ -263,8 +297,10 @@ public class ImageWallpaper extends WallpaperService { @Override public void postRender() { // This method should only be invoked from worker thread. + Trace.beginSection("ImageWallpaper#postRender"); notifyWaitingThread(); scheduleFinishRendering(); + Trace.endSection(); } private void notifyWaitingThread() { @@ -289,12 +325,14 @@ public class ImageWallpaper extends WallpaperService { } private void finishRendering() { + Trace.beginSection("ImageWallpaper#finishRendering"); if (mEglHelper != null) { mEglHelper.destroyEglSurface(); if (!needPreserveEglContext()) { mEglHelper.destroyEglContext(); } } + Trace.endSection(); } private boolean needPreserveEglContext() { @@ -310,9 +348,9 @@ public class ImageWallpaper extends WallpaperService { boolean isHighEndGfx = ActivityManager.isHighEndGfx(); out.print(prefix); out.print("isHighEndGfx="); out.println(isHighEndGfx); - DozeParameters dozeParameters = DozeParameters.getInstance(getApplicationContext()); out.print(prefix); out.print("displayNeedsBlanking="); - out.println(dozeParameters != null ? dozeParameters.getDisplayNeedsBlanking() : "null"); + out.println( + mDozeParameters != null ? mDozeParameters.getDisplayNeedsBlanking() : "null"); out.print(prefix); out.print("mNeedTransition="); out.println(mNeedTransition); out.print(prefix); out.print("StatusBarState="); |