Loading core/java/android/view/SurfaceControl.java +7 −0 Original line number Diff line number Diff line Loading @@ -55,6 +55,8 @@ public class SurfaceControl { private static native void nativeSetAnimationTransaction(); private static native void nativeSetLayer(long nativeObject, int zorder); private static native void nativeSetRelativeLayer(long nativeObject, IBinder relativeTo, int zorder); private static native void nativeSetPosition(long nativeObject, float x, float y); private static native void nativeSetGeometryAppliesWithResize(long nativeObject); private static native void nativeSetSize(long nativeObject, int w, int h); Loading Loading @@ -461,6 +463,11 @@ public class SurfaceControl { nativeSetLayer(mNativeObject, zorder); } public void setRelativeLayer(IBinder relativeTo, int zorder) { checkNotReleased(); nativeSetRelativeLayer(mNativeObject, relativeTo, zorder); } public void setPosition(float x, float y) { checkNotReleased(); nativeSetPosition(mNativeObject, x, y); Loading core/jni/android_view_SurfaceControl.cpp +10 −0 Original line number Diff line number Diff line Loading @@ -289,6 +289,14 @@ static void nativeSetLayer(JNIEnv* env, jclass clazz, jlong nativeObject, jint z } } static void nativeSetRelativeLayer(JNIEnv* env, jclass clazz, jlong nativeObject, jobject relativeTo, jint zorder) { auto ctrl = reinterpret_cast<SurfaceControl *>(nativeObject); sp<IBinder> handle = ibinderForJavaObject(env, relativeTo); ctrl->setRelativeLayer(handle, zorder); } static void nativeSetPosition(JNIEnv* env, jclass clazz, jlong nativeObject, jfloat x, jfloat y) { SurfaceControl* const ctrl = reinterpret_cast<SurfaceControl *>(nativeObject); status_t err = ctrl->setPosition(x, y); Loading Loading @@ -774,6 +782,8 @@ static const JNINativeMethod sSurfaceControlMethods[] = { (void*)nativeSetAnimationTransaction }, {"nativeSetLayer", "(JI)V", (void*)nativeSetLayer }, {"nativeSetRelativeLayer", "(JLandroid/os/IBinder;I)V", (void*)nativeSetRelativeLayer }, {"nativeSetPosition", "(JFF)V", (void*)nativeSetPosition }, {"nativeSetGeometryAppliesWithResize", "(J)V", Loading services/core/java/com/android/server/wm/WindowState.java +11 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_WILL_NOT_REPL import static android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE; import static android.view.WindowManager.LayoutParams.SOFT_INPUT_MASK_ADJUST; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA_OVERLAY; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING; import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION; import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER; Loading Loading @@ -4411,4 +4412,14 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP nowGone = true; } } boolean usesRelativeZOrdering() { if (!isChildWindow()) { return false; } else if (mAttrs.type == TYPE_APPLICATION_MEDIA_OVERLAY) { return true; } else { return false; } } } services/core/java/com/android/server/wm/WindowStateAnimator.java +12 −2 Original line number Diff line number Diff line Loading @@ -714,7 +714,16 @@ class WindowStateAnimator { } // Start a new transaction and apply position & offset. mSurfaceController.setPositionAndLayer(mTmpSize.left, mTmpSize.top, getLayerStack(), mAnimLayer); mService.openSurfaceTransaction(); try { mSurfaceController.setPositionInTransaction(mTmpSize.left, mTmpSize.top, false); mSurfaceController.setLayerStackInTransaction(getLayerStack()); mSurfaceController.setLayer(mAnimLayer); } finally { mService.closeSurfaceTransaction(); } mLastHidden = true; if (WindowManagerService.localLOGV) Slog.v(TAG, "Created surface " + this); Loading Loading @@ -1521,12 +1530,13 @@ class WindowStateAnimator { + "," + mDsDy + "*" + w.mVScale + "]", false); boolean prepared = mSurfaceController.prepareToShowInTransaction(mShownAlpha, mAnimLayer, mSurfaceController.prepareToShowInTransaction(mShownAlpha, mDsDx * w.mHScale * mExtraHScale, mDtDx * w.mVScale * mExtraVScale, mDtDy * w.mHScale * mExtraHScale, mDsDy * w.mVScale * mExtraVScale, recoveringMemory); mSurfaceController.setLayer(mAnimLayer); if (prepared && mLastHidden && mDrawState == HAS_DRAWN) { if (showSurfaceRobustlyLocked()) { Loading services/core/java/com/android/server/wm/WindowSurfaceController.java +10 −30 Original line number Diff line number Diff line Loading @@ -163,32 +163,6 @@ class WindowSurfaceController { } } void setPositionAndLayer(float left, float top, int layerStack, int layer) { mService.openSurfaceTransaction(); try { mSurfaceX = left; mSurfaceY = top; try { if (SHOW_TRANSACTIONS) logSurface( "POS (setPositionAndLayer) @ (" + left + "," + top + ")", null); mSurfaceControl.setPosition(left, top); mSurfaceControl.setLayerStack(layerStack); mSurfaceControl.setLayer(layer); mSurfaceControl.setAlpha(0); setShown(false); } catch (RuntimeException e) { Slog.w(TAG, "Error creating surface in " + this, e); mAnimator.reclaimSomeSurfaceMemory("create-init", true); } } finally { mService.closeSurfaceTransaction(); if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG, "<<< CLOSE TRANSACTION setPositionAndLayer"); } } void destroyInTransaction() { if (SHOW_TRANSACTIONS || SHOW_SURFACE_ALLOC) { Slog.i(TAG, "Destroying surface " + this + " called by " + Debug.getCallers(8)); Loading Loading @@ -269,7 +243,15 @@ class WindowSurfaceController { if (mSurfaceControl != null) { mService.openSurfaceTransaction(); try { if (mAnimator.mWin.usesRelativeZOrdering()) { mSurfaceControl.setRelativeLayer( mAnimator.mWin.getParentWindow() .mWinAnimator.mSurfaceController.mSurfaceControl.getHandle(), -1); } else { mSurfaceLayer = layer; mSurfaceControl.setLayer(layer); } } finally { mService.closeSurfaceTransaction(); } Loading Loading @@ -363,15 +345,13 @@ class WindowSurfaceController { return false; } boolean prepareToShowInTransaction(float alpha, int layer, boolean prepareToShowInTransaction(float alpha, float dsdx, float dtdx, float dsdy, float dtdy, boolean recoveringMemory) { if (mSurfaceControl != null) { try { mSurfaceAlpha = alpha; mSurfaceControl.setAlpha(alpha); mSurfaceLayer = layer; mSurfaceControl.setLayer(layer); mLastDsdx = dsdx; mLastDtdx = dtdx; mLastDsdy = dsdy; Loading Loading
core/java/android/view/SurfaceControl.java +7 −0 Original line number Diff line number Diff line Loading @@ -55,6 +55,8 @@ public class SurfaceControl { private static native void nativeSetAnimationTransaction(); private static native void nativeSetLayer(long nativeObject, int zorder); private static native void nativeSetRelativeLayer(long nativeObject, IBinder relativeTo, int zorder); private static native void nativeSetPosition(long nativeObject, float x, float y); private static native void nativeSetGeometryAppliesWithResize(long nativeObject); private static native void nativeSetSize(long nativeObject, int w, int h); Loading Loading @@ -461,6 +463,11 @@ public class SurfaceControl { nativeSetLayer(mNativeObject, zorder); } public void setRelativeLayer(IBinder relativeTo, int zorder) { checkNotReleased(); nativeSetRelativeLayer(mNativeObject, relativeTo, zorder); } public void setPosition(float x, float y) { checkNotReleased(); nativeSetPosition(mNativeObject, x, y); Loading
core/jni/android_view_SurfaceControl.cpp +10 −0 Original line number Diff line number Diff line Loading @@ -289,6 +289,14 @@ static void nativeSetLayer(JNIEnv* env, jclass clazz, jlong nativeObject, jint z } } static void nativeSetRelativeLayer(JNIEnv* env, jclass clazz, jlong nativeObject, jobject relativeTo, jint zorder) { auto ctrl = reinterpret_cast<SurfaceControl *>(nativeObject); sp<IBinder> handle = ibinderForJavaObject(env, relativeTo); ctrl->setRelativeLayer(handle, zorder); } static void nativeSetPosition(JNIEnv* env, jclass clazz, jlong nativeObject, jfloat x, jfloat y) { SurfaceControl* const ctrl = reinterpret_cast<SurfaceControl *>(nativeObject); status_t err = ctrl->setPosition(x, y); Loading Loading @@ -774,6 +782,8 @@ static const JNINativeMethod sSurfaceControlMethods[] = { (void*)nativeSetAnimationTransaction }, {"nativeSetLayer", "(JI)V", (void*)nativeSetLayer }, {"nativeSetRelativeLayer", "(JLandroid/os/IBinder;I)V", (void*)nativeSetRelativeLayer }, {"nativeSetPosition", "(JFF)V", (void*)nativeSetPosition }, {"nativeSetGeometryAppliesWithResize", "(J)V", Loading
services/core/java/com/android/server/wm/WindowState.java +11 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_WILL_NOT_REPL import static android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE; import static android.view.WindowManager.LayoutParams.SOFT_INPUT_MASK_ADJUST; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA_OVERLAY; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING; import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION; import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER; Loading Loading @@ -4411,4 +4412,14 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP nowGone = true; } } boolean usesRelativeZOrdering() { if (!isChildWindow()) { return false; } else if (mAttrs.type == TYPE_APPLICATION_MEDIA_OVERLAY) { return true; } else { return false; } } }
services/core/java/com/android/server/wm/WindowStateAnimator.java +12 −2 Original line number Diff line number Diff line Loading @@ -714,7 +714,16 @@ class WindowStateAnimator { } // Start a new transaction and apply position & offset. mSurfaceController.setPositionAndLayer(mTmpSize.left, mTmpSize.top, getLayerStack(), mAnimLayer); mService.openSurfaceTransaction(); try { mSurfaceController.setPositionInTransaction(mTmpSize.left, mTmpSize.top, false); mSurfaceController.setLayerStackInTransaction(getLayerStack()); mSurfaceController.setLayer(mAnimLayer); } finally { mService.closeSurfaceTransaction(); } mLastHidden = true; if (WindowManagerService.localLOGV) Slog.v(TAG, "Created surface " + this); Loading Loading @@ -1521,12 +1530,13 @@ class WindowStateAnimator { + "," + mDsDy + "*" + w.mVScale + "]", false); boolean prepared = mSurfaceController.prepareToShowInTransaction(mShownAlpha, mAnimLayer, mSurfaceController.prepareToShowInTransaction(mShownAlpha, mDsDx * w.mHScale * mExtraHScale, mDtDx * w.mVScale * mExtraVScale, mDtDy * w.mHScale * mExtraHScale, mDsDy * w.mVScale * mExtraVScale, recoveringMemory); mSurfaceController.setLayer(mAnimLayer); if (prepared && mLastHidden && mDrawState == HAS_DRAWN) { if (showSurfaceRobustlyLocked()) { Loading
services/core/java/com/android/server/wm/WindowSurfaceController.java +10 −30 Original line number Diff line number Diff line Loading @@ -163,32 +163,6 @@ class WindowSurfaceController { } } void setPositionAndLayer(float left, float top, int layerStack, int layer) { mService.openSurfaceTransaction(); try { mSurfaceX = left; mSurfaceY = top; try { if (SHOW_TRANSACTIONS) logSurface( "POS (setPositionAndLayer) @ (" + left + "," + top + ")", null); mSurfaceControl.setPosition(left, top); mSurfaceControl.setLayerStack(layerStack); mSurfaceControl.setLayer(layer); mSurfaceControl.setAlpha(0); setShown(false); } catch (RuntimeException e) { Slog.w(TAG, "Error creating surface in " + this, e); mAnimator.reclaimSomeSurfaceMemory("create-init", true); } } finally { mService.closeSurfaceTransaction(); if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG, "<<< CLOSE TRANSACTION setPositionAndLayer"); } } void destroyInTransaction() { if (SHOW_TRANSACTIONS || SHOW_SURFACE_ALLOC) { Slog.i(TAG, "Destroying surface " + this + " called by " + Debug.getCallers(8)); Loading Loading @@ -269,7 +243,15 @@ class WindowSurfaceController { if (mSurfaceControl != null) { mService.openSurfaceTransaction(); try { if (mAnimator.mWin.usesRelativeZOrdering()) { mSurfaceControl.setRelativeLayer( mAnimator.mWin.getParentWindow() .mWinAnimator.mSurfaceController.mSurfaceControl.getHandle(), -1); } else { mSurfaceLayer = layer; mSurfaceControl.setLayer(layer); } } finally { mService.closeSurfaceTransaction(); } Loading Loading @@ -363,15 +345,13 @@ class WindowSurfaceController { return false; } boolean prepareToShowInTransaction(float alpha, int layer, boolean prepareToShowInTransaction(float alpha, float dsdx, float dtdx, float dsdy, float dtdy, boolean recoveringMemory) { if (mSurfaceControl != null) { try { mSurfaceAlpha = alpha; mSurfaceControl.setAlpha(alpha); mSurfaceLayer = layer; mSurfaceControl.setLayer(layer); mLastDsdx = dsdx; mLastDtdx = dtdx; mLastDsdy = dsdy; Loading