diff options
14 files changed, 151 insertions, 60 deletions
diff --git a/services/core/java/com/android/server/wm/DimLayer.java b/services/core/java/com/android/server/wm/DimLayer.java index 052b2f542d28..b99dda15b22e 100644 --- a/services/core/java/com/android/server/wm/DimLayer.java +++ b/services/core/java/com/android/server/wm/DimLayer.java @@ -95,7 +95,7 @@ public class DimLayer { } private void constructSurface(WindowManagerService service) { - SurfaceControl.openTransaction(); + service.openSurfaceTransaction(); try { if (DEBUG_SURFACE_TRACE) { mDimSurface = new WindowSurfaceController.SurfaceTrace(service.mFxSession, @@ -116,7 +116,7 @@ public class DimLayer { } catch (Exception e) { Slog.e(TAG_WM, "Exception creating Dim surface", e); } finally { - SurfaceControl.closeTransaction(); + service.closeSurfaceTransaction(); } } @@ -227,12 +227,12 @@ public class DimLayer { mBounds.set(bounds); if (isDimming() && !mLastBounds.equals(bounds)) { try { - SurfaceControl.openTransaction(); + mService.openSurfaceTransaction(); adjustBounds(); } catch (RuntimeException e) { Slog.w(TAG, "Failure setting size", e); } finally { - SurfaceControl.closeTransaction(); + mService.closeSurfaceTransaction(); } } } diff --git a/services/core/java/com/android/server/wm/DockedStackDividerController.java b/services/core/java/com/android/server/wm/DockedStackDividerController.java index 573eca1eed84..0120a85257c0 100644 --- a/services/core/java/com/android/server/wm/DockedStackDividerController.java +++ b/services/core/java/com/android/server/wm/DockedStackDividerController.java @@ -465,7 +465,7 @@ public class DockedStackDividerController implements DimLayerUser { } void setResizeDimLayer(boolean visible, int targetStackId, float alpha) { - SurfaceControl.openTransaction(); + mService.openSurfaceTransaction(); final TaskStack stack = mDisplayContent.mService.mStackIdToStack.get(targetStackId); final TaskStack dockedStack = mDisplayContent.getDockedStackLocked(); boolean visibleAndValid = visible && stack != null && dockedStack != null; @@ -482,7 +482,7 @@ public class DockedStackDividerController implements DimLayerUser { if (!visibleAndValid) { mDimLayer.hide(); } - SurfaceControl.closeTransaction(); + mService.closeSurfaceTransaction(); } /** diff --git a/services/core/java/com/android/server/wm/DragState.java b/services/core/java/com/android/server/wm/DragState.java index d0167bb6f00b..588bb763040a 100644 --- a/services/core/java/com/android/server/wm/DragState.java +++ b/services/core/java/com/android/server/wm/DragState.java @@ -432,14 +432,14 @@ class DragState { // Move the surface to the given touch if (SHOW_LIGHT_TRANSACTIONS) Slog.i( TAG_WM, ">>> OPEN TRANSACTION notifyMoveLw"); - SurfaceControl.openTransaction(); + mService.openSurfaceTransaction(); try { mSurfaceControl.setPosition(x - mThumbOffsetX, y - mThumbOffsetY); if (SHOW_TRANSACTIONS) Slog.i(TAG_WM, " DRAG " + mSurfaceControl + ": pos=(" + (int)(x - mThumbOffsetX) + "," + (int)(y - mThumbOffsetY) + ")"); } finally { - SurfaceControl.closeTransaction(); + mService.closeSurfaceTransaction(); if (SHOW_LIGHT_TRANSACTIONS) Slog.i( TAG_WM, "<<< CLOSE TRANSACTION notifyMoveLw"); } diff --git a/services/core/java/com/android/server/wm/RemoteEventTrace.java b/services/core/java/com/android/server/wm/RemoteEventTrace.java new file mode 100644 index 000000000000..dbe961f44130 --- /dev/null +++ b/services/core/java/com/android/server/wm/RemoteEventTrace.java @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.wm; + +import java.io.FileDescriptor; +import java.io.FileOutputStream; +import java.io.DataOutputStream; + +import android.util.Slog; +import android.os.Debug; + +// Counterpart to remote surface trace for events which are not tied to a particular surface. +class RemoteEventTrace { + private static final String TAG = "RemoteEventTrace"; + private final WindowManagerService mService; + private final DataOutputStream mOut; + + RemoteEventTrace(WindowManagerService service, FileDescriptor fd) { + mService = service; + mOut = new DataOutputStream(new FileOutputStream(fd, false)); + } + + void openSurfaceTransaction() { + try { + mOut.writeUTF("OpenTransaction"); + } catch (Exception e) { + logException(e); + mService.disableSurfaceTrace(); + } + } + + void closeSurfaceTransaction() { + try { + mOut.writeUTF("CloseTransaction"); + } catch (Exception e) { + logException(e); + mService.disableSurfaceTrace(); + } + } + + static void logException(Exception e) { + Slog.i(TAG, "Exception writing to SurfaceTrace (client vanished?): " + e.toString()); + } +} diff --git a/services/core/java/com/android/server/wm/RemoteSurfaceTrace.java b/services/core/java/com/android/server/wm/RemoteSurfaceTrace.java index 53bb5e60808b..3113375d6757 100644 --- a/services/core/java/com/android/server/wm/RemoteSurfaceTrace.java +++ b/services/core/java/com/android/server/wm/RemoteSurfaceTrace.java @@ -83,7 +83,7 @@ class RemoteSurfaceTrace extends SurfaceControl { @Override public void setWindowCrop(Rect crop) { - writeRectEvent("WindowCrop", crop); + writeRectEvent("Crop", crop); super.setWindowCrop(crop); } @@ -107,13 +107,13 @@ class RemoteSurfaceTrace extends SurfaceControl { @Override public void hide() { - writeEvent("hide"); + writeEvent("Hide"); super.hide(); } @Override public void show() { - writeEvent("show"); + writeEvent("Show"); super.show(); } @@ -122,6 +122,7 @@ class RemoteSurfaceTrace extends SurfaceControl { mOut.writeUTF(tag); mOut.writeUTF(mWindow.getWindowTag().toString()); } catch (Exception e) { + RemoteEventTrace.logException(e); mService.disableSurfaceTrace(); } } @@ -134,6 +135,7 @@ class RemoteSurfaceTrace extends SurfaceControl { mOut.writeInt(value); } } catch (Exception e) { + RemoteEventTrace.logException(e); mService.disableSurfaceTrace(); } } @@ -146,11 +148,12 @@ class RemoteSurfaceTrace extends SurfaceControl { mOut.writeFloat(value); } } catch (Exception e) { + RemoteEventTrace.logException(e); mService.disableSurfaceTrace(); } } private void writeRectEvent(String tag, Rect value) { - writeFloatEvent(tag, value.top, value.left, value.right, value.bottom); + writeFloatEvent(tag, value.left, value.top, value.right, value.bottom); } } diff --git a/services/core/java/com/android/server/wm/ScreenRotationAnimation.java b/services/core/java/com/android/server/wm/ScreenRotationAnimation.java index c118a214077a..83337ca98e35 100644 --- a/services/core/java/com/android/server/wm/ScreenRotationAnimation.java +++ b/services/core/java/com/android/server/wm/ScreenRotationAnimation.java @@ -147,6 +147,8 @@ class ScreenRotationAnimation { private boolean mMoreStartFrame; long mHalfwayPoint; + private final WindowManagerService mService; + public void printTo(String prefix, PrintWriter pw) { pw.print(prefix); pw.print("mSurface="); pw.print(mSurfaceControl); pw.print(" mWidth="); pw.print(mWidth); @@ -216,7 +218,8 @@ class ScreenRotationAnimation { public ScreenRotationAnimation(Context context, DisplayContent displayContent, SurfaceSession session, boolean inTransaction, boolean forceDefaultOrientation, - boolean isSecure) { + boolean isSecure, WindowManagerService service) { + mService = service; mContext = context; mDisplayContent = displayContent; displayContent.getLogicalDisplayRect(mOriginalDisplayRect); @@ -253,7 +256,7 @@ class ScreenRotationAnimation { if (!inTransaction) { if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG_WM, ">>> OPEN TRANSACTION ScreenRotationAnimation"); - SurfaceControl.openTransaction(); + mService.openSurfaceTransaction(); } try { @@ -295,7 +298,7 @@ class ScreenRotationAnimation { setRotationInTransaction(originalRotation); } finally { if (!inTransaction) { - SurfaceControl.closeTransaction(); + mService.closeSurfaceTransaction(); if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG_WM, "<<< CLOSE TRANSACTION ScreenRotationAnimation"); } @@ -546,7 +549,7 @@ class ScreenRotationAnimation { if (SHOW_LIGHT_TRANSACTIONS || DEBUG_STATE) Slog.i( TAG_WM, ">>> OPEN TRANSACTION ScreenRotationAnimation.startAnimation"); - SurfaceControl.openTransaction(); + mService.openSurfaceTransaction(); // Compute the transformation matrix that must be applied // the the black frame to make it stay in the initial position @@ -566,7 +569,7 @@ class ScreenRotationAnimation { } catch (OutOfResourcesException e) { Slog.w(TAG, "Unable to allocate black surface", e); } finally { - SurfaceControl.closeTransaction(); + mService.closeSurfaceTransaction(); if (SHOW_LIGHT_TRANSACTIONS || DEBUG_STATE) Slog.i( TAG_WM, "<<< CLOSE TRANSACTION ScreenRotationAnimation.startAnimation"); @@ -577,7 +580,7 @@ class ScreenRotationAnimation { if (SHOW_LIGHT_TRANSACTIONS || DEBUG_STATE) Slog.i( TAG_WM, ">>> OPEN TRANSACTION ScreenRotationAnimation.startAnimation"); - SurfaceControl.openTransaction(); + mService.openSurfaceTransaction(); try { // Compute the transformation matrix that must be applied // the the black frame to make it stay in the initial position @@ -606,7 +609,7 @@ class ScreenRotationAnimation { } catch (OutOfResourcesException e) { Slog.w(TAG, "Unable to allocate black surface", e); } finally { - SurfaceControl.closeTransaction(); + mService.closeSurfaceTransaction(); if (SHOW_LIGHT_TRANSACTIONS || DEBUG_STATE) Slog.i( TAG_WM, "<<< CLOSE TRANSACTION ScreenRotationAnimation.startAnimation"); @@ -617,7 +620,7 @@ class ScreenRotationAnimation { if (SHOW_LIGHT_TRANSACTIONS || DEBUG_STATE) Slog.i( TAG_WM, ">>> OPEN TRANSACTION ScreenRotationAnimation.startAnimation"); - SurfaceControl.openTransaction(); + mService.openSurfaceTransaction(); try { Rect outer = new Rect(-finalWidth*1, -finalHeight*1, @@ -628,7 +631,7 @@ class ScreenRotationAnimation { } catch (OutOfResourcesException e) { Slog.w(TAG, "Unable to allocate black surface", e); } finally { - SurfaceControl.closeTransaction(); + mService.closeSurfaceTransaction(); if (SHOW_LIGHT_TRANSACTIONS || DEBUG_STATE) Slog.i( TAG_WM, "<<< CLOSE TRANSACTION ScreenRotationAnimation.startAnimation"); diff --git a/services/core/java/com/android/server/wm/Session.java b/services/core/java/com/android/server/wm/Session.java index e9ce0ea192f0..edd3a3b073e4 100644 --- a/services/core/java/com/android/server/wm/Session.java +++ b/services/core/java/com/android/server/wm/Session.java @@ -346,7 +346,7 @@ final class Session extends IWindowSession.Stub final SurfaceControl surfaceControl = mService.mDragState.mSurfaceControl; if (SHOW_LIGHT_TRANSACTIONS) Slog.i( TAG_WM, ">>> OPEN TRANSACTION performDrag"); - SurfaceControl.openTransaction(); + mService.openSurfaceTransaction(); try { surfaceControl.setPosition(touchX - thumbCenterX, touchY - thumbCenterY); @@ -354,7 +354,7 @@ final class Session extends IWindowSession.Stub surfaceControl.setLayerStack(display.getLayerStack()); surfaceControl.show(); } finally { - SurfaceControl.closeTransaction(); + mService.closeSurfaceTransaction(); if (SHOW_LIGHT_TRANSACTIONS) Slog.i( TAG_WM, "<<< CLOSE TRANSACTION performDrag"); } diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index f730fda2c685..63d0d7cb1af4 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -673,13 +673,13 @@ class Task implements DimLayer.DimLayerUser { } void forceWindowsScaleable(boolean force) { - SurfaceControl.openTransaction(); + mService.openSurfaceTransaction(); try { for (int i = mAppTokens.size() - 1; i >= 0; i--) { mAppTokens.get(i).forceWindowsScaleableInTransaction(force); } } finally { - SurfaceControl.closeTransaction(); + mService.closeSurfaceTransaction(); } } diff --git a/services/core/java/com/android/server/wm/TaskPositioner.java b/services/core/java/com/android/server/wm/TaskPositioner.java index c0971281268d..d43643ff41a6 100644 --- a/services/core/java/com/android/server/wm/TaskPositioner.java +++ b/services/core/java/com/android/server/wm/TaskPositioner.java @@ -459,13 +459,13 @@ class TaskPositioner implements DimLayer.DimLayerUser { mCurrentDimSide = dimSide; if (SHOW_TRANSACTIONS) Slog.i(TAG, ">>> OPEN TRANSACTION updateDimLayerVisibility"); - SurfaceControl.openTransaction(); + mService.openSurfaceTransaction(); if (mCurrentDimSide == CTRL_NONE) { mDimLayer.hide(); } else { showDimLayer(); } - SurfaceControl.closeTransaction(); + mService.closeSurfaceTransaction(); } /** diff --git a/services/core/java/com/android/server/wm/WindowAnimator.java b/services/core/java/com/android/server/wm/WindowAnimator.java index 6665a937516d..a13b6a16fbf9 100644 --- a/services/core/java/com/android/server/wm/WindowAnimator.java +++ b/services/core/java/com/android/server/wm/WindowAnimator.java @@ -609,7 +609,7 @@ public class WindowAnimator { if (SHOW_TRANSACTIONS) Slog.i( TAG, ">>> OPEN TRANSACTION animateLocked"); - SurfaceControl.openTransaction(); + mService.openSurfaceTransaction(); SurfaceControl.setAnimationTransaction(); try { final int numDisplays = mDisplayContentsAnimators.size(); @@ -686,7 +686,7 @@ public class WindowAnimator { } catch (RuntimeException e) { Slog.wtf(TAG, "Unhandled exception in Window Manager", e); } finally { - SurfaceControl.closeTransaction(); + mService.closeSurfaceTransaction(); if (SHOW_TRANSACTIONS) Slog.i( TAG, "<<< CLOSE TRANSACTION animateLocked"); } @@ -742,7 +742,7 @@ public class WindowAnimator { private void removeReplacedWindowsLocked() { if (SHOW_TRANSACTIONS) Slog.i(TAG, ">>> OPEN TRANSACTION removeReplacedWindows"); - SurfaceControl.openTransaction(); + mService.openSurfaceTransaction(); try { for (int i = mService.mDisplayContents.size() - 1; i >= 0; i--) { DisplayContent display = mService.mDisplayContents.valueAt(i); @@ -756,7 +756,7 @@ public class WindowAnimator { } } } finally { - SurfaceControl.closeTransaction(); + mService.closeSurfaceTransaction(); if (SHOW_TRANSACTIONS) Slog.i(TAG, "<<< CLOSE TRANSACTION removeReplacedWindows"); } mRemoveReplacedWindows = false; diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 5180e99b1d88..db605516b7d4 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -898,6 +898,25 @@ public class WindowManagerService extends IWindowManager.Stub // commands to mSurfaceTraceFd. boolean mSurfaceTraceEnabled; ParcelFileDescriptor mSurfaceTraceFd; + RemoteEventTrace mRemoteEventTrace; + + void openSurfaceTransaction() { + synchronized (mWindowMap) { + if (mSurfaceTraceEnabled) { + mRemoteEventTrace.openSurfaceTransaction(); + } + SurfaceControl.openTransaction(); + } + } + + void closeSurfaceTransaction() { + synchronized (mWindowMap) { + if (mSurfaceTraceEnabled) { + mRemoteEventTrace.closeSurfaceTransaction(); + } + SurfaceControl.closeTransaction(); + } + } /** Listener to notify activity manager about app transitions. */ final WindowManagerInternal.AppTransitionListener mActivityManagerAppTransitionNotifier @@ -1071,11 +1090,11 @@ public class WindowManagerService extends IWindowManager.Stub // Add ourself to the Watchdog monitors. Watchdog.getInstance().addMonitor(this); - SurfaceControl.openTransaction(); + openSurfaceTransaction(); try { createWatermarkInTransaction(); } finally { - SurfaceControl.closeTransaction(); + closeSurfaceTransaction(); } showEmulatorDisplayOverlayIfNeeded(); @@ -1954,6 +1973,7 @@ public class WindowManagerService extends IWindowManager.Stub disableSurfaceTrace(); } mSurfaceTraceEnabled = true; + mRemoteEventTrace = new RemoteEventTrace(this, fd); mSurfaceTraceFd = pfd; for (int displayNdx = mDisplayContents.size() - 1; displayNdx >= 0; --displayNdx) { DisplayContent dc = mDisplayContents.valueAt(displayNdx); @@ -1970,6 +1990,7 @@ public class WindowManagerService extends IWindowManager.Stub throw new SecurityException("Only shell can call disableSurfaceTrace"); } mSurfaceTraceEnabled = false; + mRemoteEventTrace = null; mSurfaceTraceFd = null; for (int displayNdx = mDisplayContents.size() - 1; displayNdx >= 0; --displayNdx) { DisplayContent dc = mDisplayContents.valueAt(displayNdx); @@ -2238,7 +2259,7 @@ public class WindowManagerService extends IWindowManager.Stub Slog.i(TAG_WM, ">>> OPEN TRANSACTION repositionChild"); } - SurfaceControl.openTransaction(); + openSurfaceTransaction(); try { @@ -2252,7 +2273,7 @@ public class WindowManagerService extends IWindowManager.Stub } } finally { - SurfaceControl.closeTransaction(); + closeSurfaceTransaction(); if (SHOW_TRANSACTIONS) { Slog.i(TAG_WM, "<<< CLOSE TRANSACTION repositionChild"); } @@ -5015,7 +5036,7 @@ public class WindowManagerService extends IWindowManager.Stub if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG_WM, ">>> OPEN TRANSACTION showCircularMask(visible=" + visible + ")"); - SurfaceControl.openTransaction(); + openSurfaceTransaction(); try { if (visible) { // TODO(multi-display): support multiple displays @@ -5038,7 +5059,7 @@ public class WindowManagerService extends IWindowManager.Stub mCircularDisplayMask = null; } } finally { - SurfaceControl.closeTransaction(); + closeSurfaceTransaction(); if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG_WM, "<<< CLOSE TRANSACTION showCircularMask(visible=" + visible + ")"); } @@ -5050,7 +5071,7 @@ public class WindowManagerService extends IWindowManager.Stub if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG_WM, ">>> OPEN TRANSACTION showEmulatorDisplayOverlay"); - SurfaceControl.openTransaction(); + openSurfaceTransaction(); try { if (mEmulatorDisplayOverlay == null) { mEmulatorDisplayOverlay = new EmulatorDisplayOverlay( @@ -5063,7 +5084,7 @@ public class WindowManagerService extends IWindowManager.Stub } mEmulatorDisplayOverlay.setVisibility(true); } finally { - SurfaceControl.closeTransaction(); + closeSurfaceTransaction(); if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG_WM, "<<< CLOSE TRANSACTION showEmulatorDisplayOverlay"); } @@ -5105,6 +5126,8 @@ public class WindowManagerService extends IWindowManager.Stub if (SHOW_VERBOSE_TRANSACTIONS) Slog.i(TAG_WM, ">>> OPEN TRANSACTION showStrictModeViolation"); + // TODO: Modify this to use the surface trace once it is not going crazy. + // b/31532461 SurfaceControl.openTransaction(); try { // TODO(multi-display): support multiple displays @@ -5745,7 +5768,7 @@ public class WindowManagerService extends IWindowManager.Stub if (SHOW_TRANSACTIONS) { Slog.i(TAG_WM, ">>> OPEN TRANSACTION setRotationUnchecked"); } - SurfaceControl.openTransaction(); + openSurfaceTransaction(); } try { // NOTE: We disable the rotation in the emulator because @@ -5770,7 +5793,7 @@ public class WindowManagerService extends IWindowManager.Stub mDisplayManagerInternal.performTraversalInTransactionFromWindowManager(); } finally { if (!inTransaction) { - SurfaceControl.closeTransaction(); + closeSurfaceTransaction(); if (SHOW_LIGHT_TRANSACTIONS) { Slog.i(TAG_WM, "<<< CLOSE TRANSACTION setRotationUnchecked"); } @@ -8711,7 +8734,7 @@ public class WindowManagerService extends IWindowManager.Stub // TODO(multidisplay): rotation on main screen only. displayContent.updateDisplayInfo(); screenRotationAnimation = new ScreenRotationAnimation(mContext, displayContent, - mFxSession, inTransaction, mPolicy.isDefaultOrientationForced(), isSecure); + mFxSession, inTransaction, mPolicy.isDefaultOrientationForced(), isSecure, this); mAnimator.setScreenRotationAnimationLocked(displayId, screenRotationAnimation); } } diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java index 4f6cf2ff85cb..125368c735d3 100644 --- a/services/core/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java @@ -1581,7 +1581,7 @@ class WindowStateAnimator { try { if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG, ">>> OPEN TRANSACTION setWallpaperOffset"); - SurfaceControl.openTransaction(); + mService.openSurfaceTransaction(); mSurfaceController.setPositionInTransaction(mWin.mFrame.left + left, mWin.mFrame.top + top, false); calculateSurfaceWindowCrop(mTmpClipRect, mTmpFinalClipRect); @@ -1590,7 +1590,7 @@ class WindowStateAnimator { Slog.w(TAG, "Error positioning surface of " + mWin + " pos=(" + left + "," + top + ")", e); } finally { - SurfaceControl.closeTransaction(); + mService.closeSurfaceTransaction(); if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG, "<<< CLOSE TRANSACTION setWallpaperOffset"); } diff --git a/services/core/java/com/android/server/wm/WindowSurfaceController.java b/services/core/java/com/android/server/wm/WindowSurfaceController.java index 60bdf2aae068..cc7235269e8b 100644 --- a/services/core/java/com/android/server/wm/WindowSurfaceController.java +++ b/services/core/java/com/android/server/wm/WindowSurfaceController.java @@ -71,6 +71,8 @@ class WindowSurfaceController { private boolean mHiddenForOtherReasons = true; private final String title; + private final WindowManagerService mService; + public WindowSurfaceController(SurfaceSession s, String name, int w, int h, int format, int flags, WindowStateAnimator animator) { mAnimator = animator; @@ -80,6 +82,8 @@ class WindowSurfaceController { title = name; + mService = animator.mService; + // For opaque child windows placed under parent windows, // we use a special SurfaceControl which mirrors commands // to a black-out layer placed one Z-layer below the surface. @@ -97,8 +101,8 @@ class WindowSurfaceController { s, name, w, h, format, flags); } - if (animator.mService.mSurfaceTraceEnabled) { - mSurfaceControl = new RemoteSurfaceTrace(animator.mService.mSurfaceTraceFd.getFileDescriptor(), + if (mService.mSurfaceTraceEnabled) { + mSurfaceControl = new RemoteSurfaceTrace(mService.mSurfaceTraceFd.getFileDescriptor(), mSurfaceControl, animator.mWin); } } @@ -141,7 +145,7 @@ class WindowSurfaceController { } void setPositionAndLayer(float left, float top, int layerStack, int layer) { - SurfaceControl.openTransaction(); + mService.openSurfaceTransaction(); try { mSurfaceX = left; mSurfaceY = top; @@ -160,7 +164,7 @@ class WindowSurfaceController { mAnimator.reclaimSomeSurfaceMemory("create-init", true); } } finally { - SurfaceControl.closeTransaction(); + mService.closeSurfaceTransaction(); if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG, "<<< CLOSE TRANSACTION setPositionAndLayer"); } @@ -244,11 +248,11 @@ class WindowSurfaceController { void setLayer(int layer) { if (mSurfaceControl != null) { - SurfaceControl.openTransaction(); + mService.openSurfaceTransaction(); try { mSurfaceControl.setLayer(layer); } finally { - SurfaceControl.closeTransaction(); + mService.closeSurfaceTransaction(); } } } @@ -352,11 +356,11 @@ class WindowSurfaceController { return; } if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG, ">>> OPEN TRANSACTION setTransparentRegion"); - SurfaceControl.openTransaction(); + mService.openSurfaceTransaction(); try { mSurfaceControl.setTransparentRegionHint(region); } finally { - SurfaceControl.closeTransaction(); + mService.closeSurfaceTransaction(); if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG, "<<< CLOSE TRANSACTION setTransparentRegion"); } @@ -370,11 +374,11 @@ class WindowSurfaceController { return; } if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG, ">>> OPEN TRANSACTION setOpaqueLocked"); - SurfaceControl.openTransaction(); + mService.openSurfaceTransaction(); try { mSurfaceControl.setOpaque(isOpaque); } finally { - SurfaceControl.closeTransaction(); + mService.closeSurfaceTransaction(); if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG, "<<< CLOSE TRANSACTION setOpaqueLocked"); } } @@ -387,11 +391,11 @@ class WindowSurfaceController { return; } if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG, ">>> OPEN TRANSACTION setSecureLocked"); - SurfaceControl.openTransaction(); + mService.openSurfaceTransaction(); try { mSurfaceControl.setSecure(isSecure); } finally { - SurfaceControl.closeTransaction(); + mService.closeSurfaceTransaction(); if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG, "<<< CLOSE TRANSACTION setSecureLocked"); } } diff --git a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java index 5025df6cad2b..cb7143952b95 100644 --- a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java +++ b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java @@ -310,13 +310,13 @@ class WindowSurfacePlacer { if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG, ">>> OPEN TRANSACTION performLayoutAndPlaceSurfaces"); - SurfaceControl.openTransaction(); + mService.openSurfaceTransaction(); try { applySurfaceChangesTransaction(recoveringMemory, numDisplays, defaultDw, defaultDh); } catch (RuntimeException e) { Slog.wtf(TAG, "Unhandled exception in Window Manager", e); } finally { - SurfaceControl.closeTransaction(); + mService.closeSurfaceTransaction(); if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG, "<<< CLOSE TRANSACTION performLayoutAndPlaceSurfaces"); } @@ -1256,11 +1256,11 @@ class WindowSurfacePlacer { if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG, ">>> OPEN TRANSACTION handleAppTransitionReadyLocked()"); - SurfaceControl.openTransaction(); + mService.openSurfaceTransaction(); try { mService.mAnimator.orAnimating(appAnimator.showAllWindowsLocked()); } finally { - SurfaceControl.closeTransaction(); + mService.closeSurfaceTransaction(); if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG, "<<< CLOSE TRANSACTION handleAppTransitionReadyLocked()"); } |