Loading packages/SystemUI/src/com/android/systemui/ImageWallpaper.java +32 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -48,6 +49,7 @@ 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 HandlerThread mWorker; @Override Loading Loading @@ -125,6 +127,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) { Loading Loading @@ -184,16 +190,31 @@ 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. Loading @@ -205,7 +226,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() { Loading Loading @@ -240,7 +263,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() { Loading @@ -263,8 +288,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() { Loading @@ -289,12 +316,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() { Loading packages/SystemUI/src/com/android/systemui/glwallpaper/EglHelper.java +16 −0 Original line number Diff line number Diff line Loading @@ -63,6 +63,7 @@ public class EglHelper { // Below two constants make drawing at low priority, so other things can preempt our drawing. private static final int EGL_CONTEXT_PRIORITY_LEVEL_IMG = 0x3100; private static final int EGL_CONTEXT_PRIORITY_LOW_IMG = 0x3103; private static final boolean DEBUG = true; private EGLDisplay mEglDisplay; private EGLConfig mEglConfig; Loading Loading @@ -146,6 +147,10 @@ public class EglHelper { * @return true if EglSurface is ready. */ public boolean createEglSurface(SurfaceHolder surfaceHolder) { if (DEBUG) { Log.d(TAG, "createEglSurface start"); } if (hasEglDisplay()) { mEglSurface = eglCreateWindowSurface(mEglDisplay, mEglConfig, surfaceHolder, null, 0); } else { Loading @@ -163,6 +168,9 @@ public class EglHelper { return false; } if (DEBUG) { Log.d(TAG, "createEglSurface done"); } return true; } Loading Loading @@ -190,6 +198,10 @@ public class EglHelper { * @return true if EglContext is ready. */ public boolean createEglContext() { if (DEBUG) { Log.d(TAG, "createEglContext start"); } int[] attrib_list = new int[] {EGL_CONTEXT_CLIENT_VERSION, 2, EGL_CONTEXT_PRIORITY_LEVEL_IMG, EGL_CONTEXT_PRIORITY_LOW_IMG, EGL_NONE}; if (hasEglDisplay()) { Loading @@ -203,6 +215,10 @@ public class EglHelper { Log.w(TAG, "eglCreateContext failed: " + GLUtils.getEGLErrorString(eglGetError())); return false; } if (DEBUG) { Log.d(TAG, "createEglContext done"); } return true; } Loading packages/SystemUI/src/com/android/systemui/glwallpaper/ImageRevealHelper.java +11 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.systemui.glwallpaper; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ValueAnimator; import android.util.Log; import com.android.systemui.Interpolators; Loading @@ -30,6 +31,7 @@ class ImageRevealHelper { private static final String TAG = ImageRevealHelper.class.getSimpleName(); private static final float MAX_REVEAL = 0f; private static final float MIN_REVEAL = 1f; private static final boolean DEBUG = true; private final ValueAnimator mAnimator; private final RevealStateListener mRevealListener; Loading Loading @@ -57,6 +59,9 @@ class ImageRevealHelper { @Override public void onAnimationEnd(Animator animation) { if (!mIsCanceled && mRevealListener != null) { if (DEBUG) { Log.d(TAG, "transition end"); } mRevealListener.onRevealEnd(); } mIsCanceled = false; Loading @@ -65,6 +70,9 @@ class ImageRevealHelper { @Override public void onAnimationStart(Animator animation) { if (mRevealListener != null) { if (DEBUG) { Log.d(TAG, "transition start"); } mRevealListener.onRevealStart(true /* animate */); } } Loading @@ -82,6 +90,9 @@ class ImageRevealHelper { } void updateAwake(boolean awake, long duration) { if (DEBUG) { Log.d(TAG, "updateAwake: awake=" + awake + ", duration=" + duration); } mAwake = awake; mAnimator.setDuration(duration); if (duration == 0) { Loading packages/SystemUI/src/com/android/systemui/glwallpaper/ImageWallpaperRenderer.java +8 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ public class ImageWallpaperRenderer implements GLWallpaperRenderer, private static final String TAG = ImageWallpaperRenderer.class.getSimpleName(); private static final float SCALE_VIEWPORT_MIN = 1f; private static final float SCALE_VIEWPORT_MAX = 1.1f; private static final boolean DEBUG = true; private final WallpaperManager mWallpaperManager; private final ImageGLProgram mProgram; Loading Loading @@ -107,6 +108,9 @@ public class ImageWallpaperRenderer implements GLWallpaperRenderer, } private boolean loadBitmap() { if (DEBUG) { Log.d(TAG, "loadBitmap: mBitmap=" + mBitmap); } if (mWallpaperManager != null && mBitmap == null) { mBitmap = mWallpaperManager.getBitmap(); mWallpaperManager.forgetLoadedWallpaper(); Loading @@ -119,6 +123,9 @@ public class ImageWallpaperRenderer implements GLWallpaperRenderer, mSurfaceSize.set(0, 0, surfaceWidth, surfaceHeight); } } if (DEBUG) { Log.d(TAG, "loadBitmap done"); } return mBitmap != null; } Loading Loading @@ -223,6 +230,7 @@ public class ImageWallpaperRenderer implements GLWallpaperRenderer, out.print(prefix); out.print("mXOffset="); out.print(mXOffset); out.print(prefix); out.print("mYOffset="); out.print(mYOffset); out.print(prefix); out.print("threshold="); out.print(mImageProcessHelper.getThreshold()); out.print(prefix); out.print("mReveal="); out.print(mImageRevealHelper.getReveal()); mWallpaper.dump(prefix, fd, out, args); } } Loading
packages/SystemUI/src/com/android/systemui/ImageWallpaper.java +32 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -48,6 +49,7 @@ 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 HandlerThread mWorker; @Override Loading Loading @@ -125,6 +127,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) { Loading Loading @@ -184,16 +190,31 @@ 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. Loading @@ -205,7 +226,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() { Loading Loading @@ -240,7 +263,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() { Loading @@ -263,8 +288,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() { Loading @@ -289,12 +316,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() { Loading
packages/SystemUI/src/com/android/systemui/glwallpaper/EglHelper.java +16 −0 Original line number Diff line number Diff line Loading @@ -63,6 +63,7 @@ public class EglHelper { // Below two constants make drawing at low priority, so other things can preempt our drawing. private static final int EGL_CONTEXT_PRIORITY_LEVEL_IMG = 0x3100; private static final int EGL_CONTEXT_PRIORITY_LOW_IMG = 0x3103; private static final boolean DEBUG = true; private EGLDisplay mEglDisplay; private EGLConfig mEglConfig; Loading Loading @@ -146,6 +147,10 @@ public class EglHelper { * @return true if EglSurface is ready. */ public boolean createEglSurface(SurfaceHolder surfaceHolder) { if (DEBUG) { Log.d(TAG, "createEglSurface start"); } if (hasEglDisplay()) { mEglSurface = eglCreateWindowSurface(mEglDisplay, mEglConfig, surfaceHolder, null, 0); } else { Loading @@ -163,6 +168,9 @@ public class EglHelper { return false; } if (DEBUG) { Log.d(TAG, "createEglSurface done"); } return true; } Loading Loading @@ -190,6 +198,10 @@ public class EglHelper { * @return true if EglContext is ready. */ public boolean createEglContext() { if (DEBUG) { Log.d(TAG, "createEglContext start"); } int[] attrib_list = new int[] {EGL_CONTEXT_CLIENT_VERSION, 2, EGL_CONTEXT_PRIORITY_LEVEL_IMG, EGL_CONTEXT_PRIORITY_LOW_IMG, EGL_NONE}; if (hasEglDisplay()) { Loading @@ -203,6 +215,10 @@ public class EglHelper { Log.w(TAG, "eglCreateContext failed: " + GLUtils.getEGLErrorString(eglGetError())); return false; } if (DEBUG) { Log.d(TAG, "createEglContext done"); } return true; } Loading
packages/SystemUI/src/com/android/systemui/glwallpaper/ImageRevealHelper.java +11 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.systemui.glwallpaper; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ValueAnimator; import android.util.Log; import com.android.systemui.Interpolators; Loading @@ -30,6 +31,7 @@ class ImageRevealHelper { private static final String TAG = ImageRevealHelper.class.getSimpleName(); private static final float MAX_REVEAL = 0f; private static final float MIN_REVEAL = 1f; private static final boolean DEBUG = true; private final ValueAnimator mAnimator; private final RevealStateListener mRevealListener; Loading Loading @@ -57,6 +59,9 @@ class ImageRevealHelper { @Override public void onAnimationEnd(Animator animation) { if (!mIsCanceled && mRevealListener != null) { if (DEBUG) { Log.d(TAG, "transition end"); } mRevealListener.onRevealEnd(); } mIsCanceled = false; Loading @@ -65,6 +70,9 @@ class ImageRevealHelper { @Override public void onAnimationStart(Animator animation) { if (mRevealListener != null) { if (DEBUG) { Log.d(TAG, "transition start"); } mRevealListener.onRevealStart(true /* animate */); } } Loading @@ -82,6 +90,9 @@ class ImageRevealHelper { } void updateAwake(boolean awake, long duration) { if (DEBUG) { Log.d(TAG, "updateAwake: awake=" + awake + ", duration=" + duration); } mAwake = awake; mAnimator.setDuration(duration); if (duration == 0) { Loading
packages/SystemUI/src/com/android/systemui/glwallpaper/ImageWallpaperRenderer.java +8 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ public class ImageWallpaperRenderer implements GLWallpaperRenderer, private static final String TAG = ImageWallpaperRenderer.class.getSimpleName(); private static final float SCALE_VIEWPORT_MIN = 1f; private static final float SCALE_VIEWPORT_MAX = 1.1f; private static final boolean DEBUG = true; private final WallpaperManager mWallpaperManager; private final ImageGLProgram mProgram; Loading Loading @@ -107,6 +108,9 @@ public class ImageWallpaperRenderer implements GLWallpaperRenderer, } private boolean loadBitmap() { if (DEBUG) { Log.d(TAG, "loadBitmap: mBitmap=" + mBitmap); } if (mWallpaperManager != null && mBitmap == null) { mBitmap = mWallpaperManager.getBitmap(); mWallpaperManager.forgetLoadedWallpaper(); Loading @@ -119,6 +123,9 @@ public class ImageWallpaperRenderer implements GLWallpaperRenderer, mSurfaceSize.set(0, 0, surfaceWidth, surfaceHeight); } } if (DEBUG) { Log.d(TAG, "loadBitmap done"); } return mBitmap != null; } Loading Loading @@ -223,6 +230,7 @@ public class ImageWallpaperRenderer implements GLWallpaperRenderer, out.print(prefix); out.print("mXOffset="); out.print(mXOffset); out.print(prefix); out.print("mYOffset="); out.print(mYOffset); out.print(prefix); out.print("threshold="); out.print(mImageProcessHelper.getThreshold()); out.print(prefix); out.print("mReveal="); out.print(mImageRevealHelper.getReveal()); mWallpaper.dump(prefix, fd, out, args); } }