summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Robert Carr <racarr@google.com> 2016-09-14 10:50:09 -0700
committer Robert Carr <racarr@google.com> 2016-09-19 11:19:40 -0700
commit68e5c9e93a8f1542cd988ac01ba1d98381ff4893 (patch)
tree0ea025dfff4843ca910547513bc641ef091397d7
parent3b716249cc2f94aa9842576b618998c28593be90 (diff)
Log transaction state to RemoteSurfaceTrace.
Test: cts-tradefed run singleCommand cts -o --module CtsWindowManagerHostTestCases --test android.server.cts.SurfaceViewMovementTests#testSurfaceMovesWithParent Change-Id: I2aeda867f0071bf6ac715153ab842a9f16cafa44
-rw-r--r--services/core/java/com/android/server/wm/DimLayer.java8
-rw-r--r--services/core/java/com/android/server/wm/DockedStackDividerController.java4
-rw-r--r--services/core/java/com/android/server/wm/DragState.java4
-rw-r--r--services/core/java/com/android/server/wm/RemoteEventTrace.java58
-rw-r--r--services/core/java/com/android/server/wm/RemoteSurfaceTrace.java11
-rw-r--r--services/core/java/com/android/server/wm/ScreenRotationAnimation.java21
-rw-r--r--services/core/java/com/android/server/wm/Session.java4
-rw-r--r--services/core/java/com/android/server/wm/Task.java4
-rw-r--r--services/core/java/com/android/server/wm/TaskPositioner.java4
-rw-r--r--services/core/java/com/android/server/wm/WindowAnimator.java8
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java45
-rw-r--r--services/core/java/com/android/server/wm/WindowStateAnimator.java4
-rw-r--r--services/core/java/com/android/server/wm/WindowSurfaceController.java28
-rw-r--r--services/core/java/com/android/server/wm/WindowSurfacePlacer.java8
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()");
}