Loading services/core/java/com/android/server/wm/Session.java +7 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.server.wm; import static android.Manifest.permission.INTERNAL_SYSTEM_WINDOW; import static android.content.pm.PackageManager.PERMISSION_GRANTED; import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; import static android.view.WindowManager.LayoutParams.isSystemAlertWindowType; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_DRAG; Loading @@ -37,6 +38,7 @@ import android.os.Parcel; import android.os.Process; import android.os.RemoteException; import android.os.ServiceManager; import android.os.Trace; import android.os.UserHandle; import android.util.MergedConfiguration; import android.util.Slog; Loading Loading @@ -85,6 +87,7 @@ public class Session extends IWindowSession.Stub private boolean mClientDead = false; private float mLastReportedAnimatorScale; private String mPackageName; private String mRelayoutTag; public Session(WindowManagerService service, IWindowSessionCallback callback, IInputMethodClient client, IInputContext inputContext) { Loading Loading @@ -221,10 +224,12 @@ public class Session extends IWindowSession.Stub MergedConfiguration mergedConfiguration, Surface outSurface) { if (false) Slog.d(TAG_WM, ">>>>>> ENTERED relayout from " + Binder.getCallingPid()); Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, mRelayoutTag); int res = mService.relayoutWindow(this, window, seq, attrs, requestedWidth, requestedHeight, viewFlags, flags, outFrame, outOverscanInsets, outContentInsets, outVisibleInsets, outStableInsets, outsets, outBackdropFrame, mergedConfiguration, outSurface); Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); if (false) Slog.d(TAG_WM, "<<<<<< EXITING relayout to " + Binder.getCallingPid()); return res; Loading Loading @@ -550,6 +555,7 @@ public class Session extends IWindowSession.Stub void windowAddedLocked(String packageName) { mPackageName = packageName; mRelayoutTag = "relayoutWindow: " + mPackageName; if (mSurfaceSession == null) { if (WindowManagerService.localLOGV) Slog.v( TAG_WM, "First window added to " + this + ", creating SurfaceSession"); Loading Loading @@ -673,6 +679,7 @@ public class Session extends IWindowSession.Stub pw.print(" mAlertWindowSurfaces="); pw.print(mAlertWindowSurfaces); pw.print(" mClientDead="); pw.print(mClientDead); pw.print(" mSurfaceSession="); pw.println(mSurfaceSession); pw.print(prefix); pw.print("mPackageName="); pw.println(mPackageName); } @Override Loading services/core/java/com/android/server/wm/WindowManagerService.java +67 −24 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import static android.os.Process.SHELL_UID; import static android.os.Process.SYSTEM_UID; import static android.os.Process.THREAD_PRIORITY_DISPLAY; import static android.os.Process.myPid; import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER; import static android.os.UserHandle.USER_NULL; import static android.view.Display.DEFAULT_DISPLAY; import static android.view.Display.INVALID_DISPLAY; Loading Loading @@ -884,12 +885,17 @@ public class WindowManagerService extends IWindowManager.Stub } void openSurfaceTransaction() { try { Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "openSurfaceTransaction"); synchronized (mWindowMap) { if (mRoot.mSurfaceTraceEnabled) { mRoot.mRemoteEventTrace.openSurfaceTransaction(); } SurfaceControl.openTransaction(); } } finally { Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); } } void closeSurfaceTransaction() { Loading @@ -904,6 +910,8 @@ public class WindowManagerService extends IWindowManager.Stub * blocks and we call it repeatedly, like we do for animations. */ void closeSurfaceTransaction(boolean withLockHeld) { try { Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "closeSurfaceTransaction"); synchronized (mWindowMap) { if (mRoot.mSurfaceTraceEnabled) { mRoot.mRemoteEventTrace.closeSurfaceTransaction(); Loading @@ -915,6 +923,9 @@ public class WindowManagerService extends IWindowManager.Stub if (!withLockHeld) { SurfaceControl.closeTransaction(); } } finally { Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); } } /** Listener to notify activity manager about app transitions. */ Loading Loading @@ -1988,6 +1999,8 @@ public class WindowManagerService extends IWindowManager.Stub (win.mAppToken == null || win.mAttrs.type == TYPE_APPLICATION_STARTING || !win.mAppToken.isClientHidden())) { Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "relayoutWindow: viewVisibility_1"); // We are about to create a surface, but we didn't run a layout yet. So better run // a layout now that we already know the right size, as a resize call will make the // surface transaction blocking until next vsync and slow us down. Loading @@ -1999,6 +2012,7 @@ public class WindowManagerService extends IWindowManager.Stub } result = win.relayoutVisibleWindow(mergedConfiguration, result, attrChanges, oldVisibility); try { result = createSurfaceControl(outSurface, result, win, winAnimator); } catch (Exception e) { Loading @@ -2018,7 +2032,10 @@ public class WindowManagerService extends IWindowManager.Stub imMayMove = true; } win.adjustStartingWindowFlags(); Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); } else { Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "relayoutWindow: viewVisibility_2"); winAnimator.mEnterAnimationPending = false; winAnimator.mEnteringAnimation = false; final boolean usingSavedSurfaceBeforeVisible = Loading Loading @@ -2053,18 +2070,22 @@ public class WindowManagerService extends IWindowManager.Stub // We already told the client to go invisible, but the message may not be // handled yet, or it might want to draw a last frame. If we already have a // surface, let the client use that, but don't create new surface at this point. Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "relayoutWindow: getSurface"); winAnimator.mSurfaceController.getSurface(outSurface); Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); } else { if (DEBUG_VISIBILITY) Slog.i(TAG_WM, "Releasing surface in: " + win); try { Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "wmReleaseOutSurface_" Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "wmReleaseOutSurface_" + win.mAttrs.getTitle()); outSurface.release(); } finally { Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER); Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); } } Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); } if (focusMayChange) { Loading Loading @@ -2102,7 +2123,10 @@ public class WindowManagerService extends IWindowManager.Stub win.setDisplayLayoutNeeded(); win.mGivenInsetsPending = (flags & WindowManagerGlobal.RELAYOUT_INSETS_PENDING) != 0; Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "relayoutWindow: updateOrientationFromAppTokens"); configChanged = updateOrientationFromAppTokensLocked(false, displayId); Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); // We may be deferring layout passes at the moment, but since the client is interested // in the new out values right now we need to force a layout. Loading Loading @@ -2155,7 +2179,9 @@ public class WindowManagerService extends IWindowManager.Stub } if (configChanged) { Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "relayoutWindow: sendNewConfiguration"); sendNewConfiguration(displayId); Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); } Binder.restoreCallingIdentity(origId); return result; Loading Loading @@ -2216,8 +2242,14 @@ public class WindowManagerService extends IWindowManager.Stub if (!win.mHasSurface) { result |= RELAYOUT_RES_SURFACE_CHANGED; } WindowSurfaceController surfaceController = winAnimator.createSurfaceLocked( win.mAttrs.type, win.mOwnerUid); WindowSurfaceController surfaceController; try { Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "createSurfaceControl"); surfaceController = winAnimator.createSurfaceLocked(win.mAttrs.type, win.mOwnerUid); } finally { Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); } if (surfaceController != null) { surfaceController.getSurface(outSurface); if (SHOW_TRANSACTIONS) Slog.i(TAG_WM, " OUT SURFACE " + outSurface + ": copied"); Loading @@ -2227,6 +2259,7 @@ public class WindowManagerService extends IWindowManager.Stub Slog.w(TAG_WM, "Failed to create surface control for " + win); outSurface.release(); } return result; } Loading Loading @@ -2273,7 +2306,7 @@ public class WindowManagerService extends IWindowManager.Stub // frozen, there is no reason to animate and it can cause strange // artifacts when we unfreeze the display if some different animation // is running. Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "WM#applyAnimationLocked"); Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "WM#applyAnimationLocked"); if (okToDisplay()) { final DisplayContent displayContent = atoken.getTask().getDisplayContent(); final DisplayInfo displayInfo = displayContent.getDisplayInfo(); Loading Loading @@ -2329,7 +2362,7 @@ public class WindowManagerService extends IWindowManager.Stub } else { atoken.mAppAnimator.clearAnimation(); } Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER); Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); return atoken.mAppAnimator.animation != null; } Loading Loading @@ -3412,7 +3445,7 @@ public class WindowManagerService extends IWindowManager.Stub if (!mBootAnimationStopped) { // Do this one time. Trace.asyncTraceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "Stop bootanim", 0); Trace.asyncTraceBegin(TRACE_TAG_WINDOW_MANAGER, "Stop bootanim", 0); try { IBinder surfaceFlinger = ServiceManager.getService("SurfaceFlinger"); if (surfaceFlinger != null) { Loading @@ -3435,7 +3468,7 @@ public class WindowManagerService extends IWindowManager.Stub } EventLog.writeEvent(EventLogTags.WM_BOOT_ANIMATION_DONE, SystemClock.uptimeMillis()); Trace.asyncTraceEnd(Trace.TRACE_TAG_WINDOW_MANAGER, "Stop bootanim", 0); Trace.asyncTraceEnd(TRACE_TAG_WINDOW_MANAGER, "Stop bootanim", 0); mDisplayEnabled = true; if (DEBUG_SCREEN_ON || DEBUG_BOOT) Slog.i(TAG_WM, "******************** ENABLING SCREEN!"); Loading Loading @@ -3666,12 +3699,12 @@ public class WindowManagerService extends IWindowManager.Stub throw new SecurityException("Requires READ_FRAME_BUFFER permission"); } try { Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "screenshotWallpaper"); Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "screenshotWallpaper"); return screenshotApplications(null /* appToken */, DEFAULT_DISPLAY, -1 /* width */, -1 /* height */, true /* includeFullDisplay */, 1f /* frameScale */, Bitmap.Config.ARGB_8888, true /* wallpaperOnly */, false /* includeDecor */); } finally { Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER); Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); } } Loading Loading @@ -3857,6 +3890,8 @@ public class WindowManagerService extends IWindowManager.Stub + " alwaysSendConfiguration=" + alwaysSendConfiguration + " forceRelayout=" + forceRelayout); Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "updateRotation"); long origId = Binder.clearCallingIdentity(); try { Loading @@ -3865,20 +3900,28 @@ public class WindowManagerService extends IWindowManager.Stub final int displayId; synchronized (mWindowMap) { final DisplayContent displayContent = getDefaultDisplayContentLocked(); Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "updateRotation: display"); rotationChanged = displayContent.updateRotationUnchecked( false /* inTransaction */); Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); if (!rotationChanged || forceRelayout) { displayContent.setLayoutNeeded(); Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "updateRotation: performSurfacePlacement"); mWindowPlacerLocked.performSurfacePlacement(); Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); } displayId = displayContent.getDisplayId(); } if (rotationChanged || alwaysSendConfiguration) { Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "updateRotation: sendNewConfiguration"); sendNewConfiguration(displayId); Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); } } finally { Binder.restoreCallingIdentity(origId); Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); } } Loading Loading @@ -5806,7 +5849,7 @@ public class WindowManagerService extends IWindowManager.Stub boolean updateFocusedWindowLocked(int mode, boolean updateInputWindows) { WindowState newFocus = mRoot.computeFocusedWindow(); if (mCurrentFocus != newFocus) { Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "wmUpdateFocus"); Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "wmUpdateFocus"); // This check makes sure that we don't already have the focus // change message pending. mH.removeMessages(H.REPORT_FOCUS_CHANGE); Loading Loading @@ -5882,7 +5925,7 @@ public class WindowManagerService extends IWindowManager.Stub // other apps' UI. displayContent.scheduleToastWindowsTimeoutIfNeededLocked(oldFocus, newFocus); Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER); Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); return true; } return false; Loading services/core/java/com/android/server/wm/WindowSurfaceController.java +4 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.server.wm; import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER; import static com.android.server.wm.WindowManagerDebugConfig.SHOW_SURFACE_ALLOC; import static com.android.server.wm.WindowManagerDebugConfig.SHOW_TRANSACTIONS; import static com.android.server.wm.WindowManagerDebugConfig.SHOW_LIGHT_TRANSACTIONS; Loading @@ -33,6 +34,7 @@ import android.graphics.Rect; import android.graphics.Region; import android.os.IBinder; import android.os.Debug; import android.os.Trace; import android.view.Surface; import android.view.SurfaceControl; import android.view.SurfaceSession; Loading Loading @@ -101,8 +103,10 @@ class WindowSurfaceController { mSurfaceControl = new SurfaceTrace( s, name, w, h, format, flags, windowType, ownerUid); } else { Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "new SurfaceControl"); mSurfaceControl = new SurfaceControl( s, name, w, h, format, flags, windowType, ownerUid); Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); } if (mService.mRoot.mSurfaceTraceEnabled) { Loading Loading
services/core/java/com/android/server/wm/Session.java +7 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.server.wm; import static android.Manifest.permission.INTERNAL_SYSTEM_WINDOW; import static android.content.pm.PackageManager.PERMISSION_GRANTED; import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; import static android.view.WindowManager.LayoutParams.isSystemAlertWindowType; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_DRAG; Loading @@ -37,6 +38,7 @@ import android.os.Parcel; import android.os.Process; import android.os.RemoteException; import android.os.ServiceManager; import android.os.Trace; import android.os.UserHandle; import android.util.MergedConfiguration; import android.util.Slog; Loading Loading @@ -85,6 +87,7 @@ public class Session extends IWindowSession.Stub private boolean mClientDead = false; private float mLastReportedAnimatorScale; private String mPackageName; private String mRelayoutTag; public Session(WindowManagerService service, IWindowSessionCallback callback, IInputMethodClient client, IInputContext inputContext) { Loading Loading @@ -221,10 +224,12 @@ public class Session extends IWindowSession.Stub MergedConfiguration mergedConfiguration, Surface outSurface) { if (false) Slog.d(TAG_WM, ">>>>>> ENTERED relayout from " + Binder.getCallingPid()); Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, mRelayoutTag); int res = mService.relayoutWindow(this, window, seq, attrs, requestedWidth, requestedHeight, viewFlags, flags, outFrame, outOverscanInsets, outContentInsets, outVisibleInsets, outStableInsets, outsets, outBackdropFrame, mergedConfiguration, outSurface); Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); if (false) Slog.d(TAG_WM, "<<<<<< EXITING relayout to " + Binder.getCallingPid()); return res; Loading Loading @@ -550,6 +555,7 @@ public class Session extends IWindowSession.Stub void windowAddedLocked(String packageName) { mPackageName = packageName; mRelayoutTag = "relayoutWindow: " + mPackageName; if (mSurfaceSession == null) { if (WindowManagerService.localLOGV) Slog.v( TAG_WM, "First window added to " + this + ", creating SurfaceSession"); Loading Loading @@ -673,6 +679,7 @@ public class Session extends IWindowSession.Stub pw.print(" mAlertWindowSurfaces="); pw.print(mAlertWindowSurfaces); pw.print(" mClientDead="); pw.print(mClientDead); pw.print(" mSurfaceSession="); pw.println(mSurfaceSession); pw.print(prefix); pw.print("mPackageName="); pw.println(mPackageName); } @Override Loading
services/core/java/com/android/server/wm/WindowManagerService.java +67 −24 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import static android.os.Process.SHELL_UID; import static android.os.Process.SYSTEM_UID; import static android.os.Process.THREAD_PRIORITY_DISPLAY; import static android.os.Process.myPid; import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER; import static android.os.UserHandle.USER_NULL; import static android.view.Display.DEFAULT_DISPLAY; import static android.view.Display.INVALID_DISPLAY; Loading Loading @@ -884,12 +885,17 @@ public class WindowManagerService extends IWindowManager.Stub } void openSurfaceTransaction() { try { Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "openSurfaceTransaction"); synchronized (mWindowMap) { if (mRoot.mSurfaceTraceEnabled) { mRoot.mRemoteEventTrace.openSurfaceTransaction(); } SurfaceControl.openTransaction(); } } finally { Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); } } void closeSurfaceTransaction() { Loading @@ -904,6 +910,8 @@ public class WindowManagerService extends IWindowManager.Stub * blocks and we call it repeatedly, like we do for animations. */ void closeSurfaceTransaction(boolean withLockHeld) { try { Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "closeSurfaceTransaction"); synchronized (mWindowMap) { if (mRoot.mSurfaceTraceEnabled) { mRoot.mRemoteEventTrace.closeSurfaceTransaction(); Loading @@ -915,6 +923,9 @@ public class WindowManagerService extends IWindowManager.Stub if (!withLockHeld) { SurfaceControl.closeTransaction(); } } finally { Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); } } /** Listener to notify activity manager about app transitions. */ Loading Loading @@ -1988,6 +1999,8 @@ public class WindowManagerService extends IWindowManager.Stub (win.mAppToken == null || win.mAttrs.type == TYPE_APPLICATION_STARTING || !win.mAppToken.isClientHidden())) { Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "relayoutWindow: viewVisibility_1"); // We are about to create a surface, but we didn't run a layout yet. So better run // a layout now that we already know the right size, as a resize call will make the // surface transaction blocking until next vsync and slow us down. Loading @@ -1999,6 +2012,7 @@ public class WindowManagerService extends IWindowManager.Stub } result = win.relayoutVisibleWindow(mergedConfiguration, result, attrChanges, oldVisibility); try { result = createSurfaceControl(outSurface, result, win, winAnimator); } catch (Exception e) { Loading @@ -2018,7 +2032,10 @@ public class WindowManagerService extends IWindowManager.Stub imMayMove = true; } win.adjustStartingWindowFlags(); Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); } else { Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "relayoutWindow: viewVisibility_2"); winAnimator.mEnterAnimationPending = false; winAnimator.mEnteringAnimation = false; final boolean usingSavedSurfaceBeforeVisible = Loading Loading @@ -2053,18 +2070,22 @@ public class WindowManagerService extends IWindowManager.Stub // We already told the client to go invisible, but the message may not be // handled yet, or it might want to draw a last frame. If we already have a // surface, let the client use that, but don't create new surface at this point. Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "relayoutWindow: getSurface"); winAnimator.mSurfaceController.getSurface(outSurface); Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); } else { if (DEBUG_VISIBILITY) Slog.i(TAG_WM, "Releasing surface in: " + win); try { Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "wmReleaseOutSurface_" Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "wmReleaseOutSurface_" + win.mAttrs.getTitle()); outSurface.release(); } finally { Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER); Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); } } Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); } if (focusMayChange) { Loading Loading @@ -2102,7 +2123,10 @@ public class WindowManagerService extends IWindowManager.Stub win.setDisplayLayoutNeeded(); win.mGivenInsetsPending = (flags & WindowManagerGlobal.RELAYOUT_INSETS_PENDING) != 0; Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "relayoutWindow: updateOrientationFromAppTokens"); configChanged = updateOrientationFromAppTokensLocked(false, displayId); Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); // We may be deferring layout passes at the moment, but since the client is interested // in the new out values right now we need to force a layout. Loading Loading @@ -2155,7 +2179,9 @@ public class WindowManagerService extends IWindowManager.Stub } if (configChanged) { Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "relayoutWindow: sendNewConfiguration"); sendNewConfiguration(displayId); Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); } Binder.restoreCallingIdentity(origId); return result; Loading Loading @@ -2216,8 +2242,14 @@ public class WindowManagerService extends IWindowManager.Stub if (!win.mHasSurface) { result |= RELAYOUT_RES_SURFACE_CHANGED; } WindowSurfaceController surfaceController = winAnimator.createSurfaceLocked( win.mAttrs.type, win.mOwnerUid); WindowSurfaceController surfaceController; try { Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "createSurfaceControl"); surfaceController = winAnimator.createSurfaceLocked(win.mAttrs.type, win.mOwnerUid); } finally { Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); } if (surfaceController != null) { surfaceController.getSurface(outSurface); if (SHOW_TRANSACTIONS) Slog.i(TAG_WM, " OUT SURFACE " + outSurface + ": copied"); Loading @@ -2227,6 +2259,7 @@ public class WindowManagerService extends IWindowManager.Stub Slog.w(TAG_WM, "Failed to create surface control for " + win); outSurface.release(); } return result; } Loading Loading @@ -2273,7 +2306,7 @@ public class WindowManagerService extends IWindowManager.Stub // frozen, there is no reason to animate and it can cause strange // artifacts when we unfreeze the display if some different animation // is running. Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "WM#applyAnimationLocked"); Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "WM#applyAnimationLocked"); if (okToDisplay()) { final DisplayContent displayContent = atoken.getTask().getDisplayContent(); final DisplayInfo displayInfo = displayContent.getDisplayInfo(); Loading Loading @@ -2329,7 +2362,7 @@ public class WindowManagerService extends IWindowManager.Stub } else { atoken.mAppAnimator.clearAnimation(); } Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER); Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); return atoken.mAppAnimator.animation != null; } Loading Loading @@ -3412,7 +3445,7 @@ public class WindowManagerService extends IWindowManager.Stub if (!mBootAnimationStopped) { // Do this one time. Trace.asyncTraceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "Stop bootanim", 0); Trace.asyncTraceBegin(TRACE_TAG_WINDOW_MANAGER, "Stop bootanim", 0); try { IBinder surfaceFlinger = ServiceManager.getService("SurfaceFlinger"); if (surfaceFlinger != null) { Loading @@ -3435,7 +3468,7 @@ public class WindowManagerService extends IWindowManager.Stub } EventLog.writeEvent(EventLogTags.WM_BOOT_ANIMATION_DONE, SystemClock.uptimeMillis()); Trace.asyncTraceEnd(Trace.TRACE_TAG_WINDOW_MANAGER, "Stop bootanim", 0); Trace.asyncTraceEnd(TRACE_TAG_WINDOW_MANAGER, "Stop bootanim", 0); mDisplayEnabled = true; if (DEBUG_SCREEN_ON || DEBUG_BOOT) Slog.i(TAG_WM, "******************** ENABLING SCREEN!"); Loading Loading @@ -3666,12 +3699,12 @@ public class WindowManagerService extends IWindowManager.Stub throw new SecurityException("Requires READ_FRAME_BUFFER permission"); } try { Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "screenshotWallpaper"); Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "screenshotWallpaper"); return screenshotApplications(null /* appToken */, DEFAULT_DISPLAY, -1 /* width */, -1 /* height */, true /* includeFullDisplay */, 1f /* frameScale */, Bitmap.Config.ARGB_8888, true /* wallpaperOnly */, false /* includeDecor */); } finally { Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER); Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); } } Loading Loading @@ -3857,6 +3890,8 @@ public class WindowManagerService extends IWindowManager.Stub + " alwaysSendConfiguration=" + alwaysSendConfiguration + " forceRelayout=" + forceRelayout); Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "updateRotation"); long origId = Binder.clearCallingIdentity(); try { Loading @@ -3865,20 +3900,28 @@ public class WindowManagerService extends IWindowManager.Stub final int displayId; synchronized (mWindowMap) { final DisplayContent displayContent = getDefaultDisplayContentLocked(); Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "updateRotation: display"); rotationChanged = displayContent.updateRotationUnchecked( false /* inTransaction */); Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); if (!rotationChanged || forceRelayout) { displayContent.setLayoutNeeded(); Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "updateRotation: performSurfacePlacement"); mWindowPlacerLocked.performSurfacePlacement(); Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); } displayId = displayContent.getDisplayId(); } if (rotationChanged || alwaysSendConfiguration) { Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "updateRotation: sendNewConfiguration"); sendNewConfiguration(displayId); Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); } } finally { Binder.restoreCallingIdentity(origId); Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); } } Loading Loading @@ -5806,7 +5849,7 @@ public class WindowManagerService extends IWindowManager.Stub boolean updateFocusedWindowLocked(int mode, boolean updateInputWindows) { WindowState newFocus = mRoot.computeFocusedWindow(); if (mCurrentFocus != newFocus) { Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "wmUpdateFocus"); Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "wmUpdateFocus"); // This check makes sure that we don't already have the focus // change message pending. mH.removeMessages(H.REPORT_FOCUS_CHANGE); Loading Loading @@ -5882,7 +5925,7 @@ public class WindowManagerService extends IWindowManager.Stub // other apps' UI. displayContent.scheduleToastWindowsTimeoutIfNeededLocked(oldFocus, newFocus); Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER); Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); return true; } return false; Loading
services/core/java/com/android/server/wm/WindowSurfaceController.java +4 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.server.wm; import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER; import static com.android.server.wm.WindowManagerDebugConfig.SHOW_SURFACE_ALLOC; import static com.android.server.wm.WindowManagerDebugConfig.SHOW_TRANSACTIONS; import static com.android.server.wm.WindowManagerDebugConfig.SHOW_LIGHT_TRANSACTIONS; Loading @@ -33,6 +34,7 @@ import android.graphics.Rect; import android.graphics.Region; import android.os.IBinder; import android.os.Debug; import android.os.Trace; import android.view.Surface; import android.view.SurfaceControl; import android.view.SurfaceSession; Loading Loading @@ -101,8 +103,10 @@ class WindowSurfaceController { mSurfaceControl = new SurfaceTrace( s, name, w, h, format, flags, windowType, ownerUid); } else { Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "new SurfaceControl"); mSurfaceControl = new SurfaceControl( s, name, w, h, format, flags, windowType, ownerUid); Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); } if (mService.mRoot.mSurfaceTraceEnabled) { Loading