Merge "DO NOT MERGE Add debug log to trace wallpaper rendering" into qt-qpr1-dev

This commit is contained in:
Wu Ahan
2019-10-14 10:53:50 +00:00
committed by Android (Google) Code Review
3 changed files with 95 additions and 5 deletions

View File

@@ -20,6 +20,7 @@ import android.app.ActivityManager;
import android.content.Context; import android.content.Context;
import android.graphics.Rect; import android.graphics.Rect;
import android.os.HandlerThread; import android.os.HandlerThread;
import android.os.Trace;
import android.service.wallpaper.WallpaperService; import android.service.wallpaper.WallpaperService;
import android.util.Log; import android.util.Log;
import android.util.Size; import android.util.Size;
@@ -48,6 +49,7 @@ public class ImageWallpaper extends WallpaperService {
private static final int DELAY_FINISH_RENDERING = 1000; private static final int DELAY_FINISH_RENDERING = 1000;
private static final int INTERVAL_WAIT_FOR_RENDERING = 100; private static final int INTERVAL_WAIT_FOR_RENDERING = 100;
private static final int PATIENCE_WAIT_FOR_RENDERING = 10; private static final int PATIENCE_WAIT_FOR_RENDERING = 10;
private static final boolean DEBUG = true;
private HandlerThread mWorker; private HandlerThread mWorker;
@Override @Override
@@ -125,6 +127,10 @@ public class ImageWallpaper extends WallpaperService {
@Override @Override
public void onAmbientModeChanged(boolean inAmbientMode, long animationDuration) { public void onAmbientModeChanged(boolean inAmbientMode, long animationDuration) {
if (!mNeedTransition) return; if (!mNeedTransition) return;
if (DEBUG) {
Log.d(TAG, "onAmbientModeChanged: inAmbient=" + inAmbientMode
+ ", duration=" + animationDuration);
}
mWorker.getThreadHandler().post( mWorker.getThreadHandler().post(
() -> mRenderer.updateAmbientMode(inAmbientMode, animationDuration)); () -> mRenderer.updateAmbientMode(inAmbientMode, animationDuration));
if (inAmbientMode && animationDuration == 0) { if (inAmbientMode && animationDuration == 0) {
@@ -177,6 +183,10 @@ public class ImageWallpaper extends WallpaperService {
@Override @Override
public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height) { public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height) {
mWorker.getThreadHandler().post(() -> { mWorker.getThreadHandler().post(() -> {
if (DEBUG) {
Log.d(TAG, "onSurfaceChanged: w=" + width + ", h=" + height);
}
mRenderer.onSurfaceChanged(width, height); mRenderer.onSurfaceChanged(width, height);
mNeedRedraw = true; mNeedRedraw = true;
}); });
@@ -185,15 +195,30 @@ public class ImageWallpaper extends WallpaperService {
@Override @Override
public void onSurfaceRedrawNeeded(SurfaceHolder holder) { public void onSurfaceRedrawNeeded(SurfaceHolder holder) {
mWorker.getThreadHandler().post(() -> { mWorker.getThreadHandler().post(() -> {
if (DEBUG) {
Log.d(TAG, "onSurfaceRedrawNeeded: mNeedRedraw=" + mNeedRedraw);
}
if (mNeedRedraw) { if (mNeedRedraw) {
preRender(); drawFrame();
requestRender();
postRender();
mNeedRedraw = false; mNeedRedraw = false;
} }
}); });
} }
@Override
public void onVisibilityChanged(boolean visible) {
if (DEBUG) {
Log.d(TAG, "wallpaper visibility changes to: " + visible);
}
}
private void drawFrame() {
preRender();
requestRender();
postRender();
}
@Override @Override
public void onStatePostChange() { public void onStatePostChange() {
// When back to home, we try to release EGL, which is preserved in lock screen or aod. // When back to home, we try to release EGL, which is preserved in lock screen or aod.
@@ -204,8 +229,18 @@ public class ImageWallpaper extends WallpaperService {
@Override @Override
public void preRender() { public void preRender() {
if (DEBUG) {
Log.d(TAG, "preRender start");
}
// This method should only be invoked from worker thread. // This method should only be invoked from worker thread.
Trace.beginSection("ImageWallpaper#preRender");
preRenderInternal(); preRenderInternal();
Trace.endSection();
if (DEBUG) {
Log.d(TAG, "preRender end");
}
} }
private void preRenderInternal() { private void preRenderInternal() {
@@ -240,7 +275,9 @@ public class ImageWallpaper extends WallpaperService {
@Override @Override
public void requestRender() { public void requestRender() {
// This method should only be invoked from worker thread. // This method should only be invoked from worker thread.
Trace.beginSection("ImageWallpaper#requestRender");
requestRenderInternal(); requestRenderInternal();
Trace.endSection();
} }
private void requestRenderInternal() { private void requestRenderInternal() {
@@ -262,9 +299,19 @@ public class ImageWallpaper extends WallpaperService {
@Override @Override
public void postRender() { public void postRender() {
if (DEBUG) {
Log.d(TAG, "postRender start");
}
// This method should only be invoked from worker thread. // This method should only be invoked from worker thread.
Trace.beginSection("ImageWallpaper#postRender");
notifyWaitingThread(); notifyWaitingThread();
scheduleFinishRendering(); scheduleFinishRendering();
Trace.endSection();
if (DEBUG) {
Log.d(TAG, "postRender end");
}
} }
private void notifyWaitingThread() { private void notifyWaitingThread() {
@@ -289,12 +336,18 @@ public class ImageWallpaper extends WallpaperService {
} }
private void finishRendering() { private void finishRendering() {
if (DEBUG) {
Log.d(TAG, "finishRendering, preserve=" + needPreserveEglContext());
}
Trace.beginSection("ImageWallpaper#finishRendering");
if (mEglHelper != null) { if (mEglHelper != null) {
mEglHelper.destroyEglSurface(); mEglHelper.destroyEglSurface();
if (!needPreserveEglContext()) { if (!needPreserveEglContext()) {
mEglHelper.destroyEglContext(); mEglHelper.destroyEglContext();
} }
} }
Trace.endSection();
} }
private boolean needPreserveEglContext() { private boolean needPreserveEglContext() {

View File

@@ -19,6 +19,7 @@ package com.android.systemui.glwallpaper;
import android.animation.Animator; import android.animation.Animator;
import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorListenerAdapter;
import android.animation.ValueAnimator; import android.animation.ValueAnimator;
import android.util.Log;
import com.android.systemui.Interpolators; import com.android.systemui.Interpolators;
@@ -30,6 +31,7 @@ class ImageRevealHelper {
private static final String TAG = ImageRevealHelper.class.getSimpleName(); private static final String TAG = ImageRevealHelper.class.getSimpleName();
private static final float MAX_REVEAL = 0f; private static final float MAX_REVEAL = 0f;
private static final float MIN_REVEAL = 1f; private static final float MIN_REVEAL = 1f;
private static final boolean DEBUG = true;
private final ValueAnimator mAnimator; private final ValueAnimator mAnimator;
private final RevealStateListener mRevealListener; private final RevealStateListener mRevealListener;
@@ -56,8 +58,13 @@ class ImageRevealHelper {
@Override @Override
public void onAnimationEnd(Animator animation) { public void onAnimationEnd(Animator animation) {
if (!mIsCanceled && mRevealListener != null) { if (mRevealListener != null) {
mRevealListener.onRevealEnd(); if (DEBUG) {
Log.d(TAG, "transition end, cancel=" + mIsCanceled + ", reveal=" + mReveal);
}
if (!mIsCanceled) {
mRevealListener.onRevealEnd();
}
} }
mIsCanceled = false; mIsCanceled = false;
} }
@@ -65,6 +72,9 @@ class ImageRevealHelper {
@Override @Override
public void onAnimationStart(Animator animation) { public void onAnimationStart(Animator animation) {
if (mRevealListener != null) { if (mRevealListener != null) {
if (DEBUG) {
Log.d(TAG, "transition start");
}
mRevealListener.onRevealStart(true /* animate */); mRevealListener.onRevealStart(true /* animate */);
} }
} }
@@ -82,6 +92,9 @@ class ImageRevealHelper {
} }
void updateAwake(boolean awake, long duration) { void updateAwake(boolean awake, long duration) {
if (DEBUG) {
Log.d(TAG, "updateAwake: awake=" + awake + ", duration=" + duration);
}
mAwake = awake; mAwake = awake;
mAnimator.setDuration(duration); mAnimator.setDuration(duration);
if (duration == 0) { if (duration == 0) {

View File

@@ -46,6 +46,7 @@ public class ImageWallpaperRenderer implements GLWallpaperRenderer,
private static final String TAG = ImageWallpaperRenderer.class.getSimpleName(); private static final String TAG = ImageWallpaperRenderer.class.getSimpleName();
private static final float SCALE_VIEWPORT_MIN = 1f; private static final float SCALE_VIEWPORT_MIN = 1f;
private static final float SCALE_VIEWPORT_MAX = 1.1f; private static final float SCALE_VIEWPORT_MAX = 1.1f;
private static final boolean DEBUG = true;
private final WallpaperManager mWallpaperManager; private final WallpaperManager mWallpaperManager;
private final ImageGLProgram mProgram; private final ImageGLProgram mProgram;
@@ -107,6 +108,9 @@ public class ImageWallpaperRenderer implements GLWallpaperRenderer,
} }
private boolean loadBitmap() { private boolean loadBitmap() {
if (DEBUG) {
Log.d(TAG, "loadBitmap: mBitmap=" + mBitmap);
}
if (mWallpaperManager != null && mBitmap == null) { if (mWallpaperManager != null && mBitmap == null) {
mBitmap = mWallpaperManager.getBitmap(); mBitmap = mWallpaperManager.getBitmap();
mWallpaperManager.forgetLoadedWallpaper(); mWallpaperManager.forgetLoadedWallpaper();
@@ -119,6 +123,9 @@ public class ImageWallpaperRenderer implements GLWallpaperRenderer,
mSurfaceSize.set(0, 0, surfaceWidth, surfaceHeight); mSurfaceSize.set(0, 0, surfaceWidth, surfaceHeight);
} }
} }
if (DEBUG) {
Log.d(TAG, "loadBitmap done, surface size=" + mSurfaceSize);
}
return mBitmap != null; return mBitmap != null;
} }
@@ -193,16 +200,28 @@ public class ImageWallpaperRenderer implements GLWallpaperRenderer,
@Override @Override
public void onRevealStart(boolean animate) { public void onRevealStart(boolean animate) {
if (DEBUG) {
Log.v(TAG, "onRevealStart: start, anim=" + animate);
}
if (animate) { if (animate) {
mScissorMode = true; mScissorMode = true;
// Use current display area of texture. // Use current display area of texture.
mWallpaper.adjustTextureCoordinates(mSurfaceSize, mScissor, mXOffset, mYOffset); mWallpaper.adjustTextureCoordinates(mSurfaceSize, mScissor, mXOffset, mYOffset);
} }
mProxy.preRender(); mProxy.preRender();
if (DEBUG) {
Log.v(TAG, "onRevealStart: done");
}
} }
@Override @Override
public void onRevealEnd() { public void onRevealEnd() {
if (DEBUG) {
Log.v(TAG, "onRevealEnd: start, mScissorMode=" + mScissorMode);
}
if (mScissorMode) { if (mScissorMode) {
mScissorMode = false; mScissorMode = false;
// reset texture coordinates to use full texture. // reset texture coordinates to use full texture.
@@ -211,6 +230,10 @@ public class ImageWallpaperRenderer implements GLWallpaperRenderer,
mProxy.requestRender(); mProxy.requestRender();
} }
mProxy.postRender(); mProxy.postRender();
if (DEBUG) {
Log.v(TAG, "onRevealEnd: done");
}
} }
@Override @Override
@@ -223,6 +246,7 @@ public class ImageWallpaperRenderer implements GLWallpaperRenderer,
out.print(prefix); out.print("mXOffset="); out.print(mXOffset); out.print(prefix); out.print("mXOffset="); out.print(mXOffset);
out.print(prefix); out.print("mYOffset="); out.print(mYOffset); out.print(prefix); out.print("mYOffset="); out.print(mYOffset);
out.print(prefix); out.print("threshold="); out.print(mImageProcessHelper.getThreshold()); 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); mWallpaper.dump(prefix, fd, out, args);
} }
} }