From 9eb672e5a9d6a6cf087e3e052cae1b0d9d2022ee Mon Sep 17 00:00:00 2001 From: Vishnu Nair Date: Wed, 8 Apr 2020 14:22:42 -0700 Subject: [PATCH] Add an API to set layer trace flags This will be used by FlickerTests to capture composition state in SurfaceFlinger trace. Test: atest FlickerLibTest:LayersTraceMonitorTest Fixes: 153563549 Change-Id: I3d09196ced43a1b0bac811e8f458c28be4e44992 --- core/java/android/view/IWindowManager.aidl | 7 +++++ .../server/wm/WindowManagerService.java | 27 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl index 84ac90bae258e..d6a7141d66732 100644 --- a/core/java/android/view/IWindowManager.aidl +++ b/core/java/android/view/IWindowManager.aidl @@ -735,4 +735,11 @@ interface IWindowManager * Called to show global actions. */ void showGlobalActions(); + + /** + * Sets layer tracing flags for SurfaceFlingerTrace. + * + * @param flags see definition in SurfaceTracing.cpp + */ + void setLayerTracingFlags(int flags); } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 8d3a4f27a2572..6b941f92b68a0 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -8006,6 +8006,33 @@ public class WindowManagerService extends IWindowManager.Stub } } + /** Set layer tracing flags. */ + public void setLayerTracingFlags(int flags) { + mAtmInternal.enforceCallerIsRecentsOrHasPermission(android.Manifest.permission.DUMP, + "setLayerTracingFlags"); + long token = Binder.clearCallingIdentity(); + try { + Parcel data = null; + try { + IBinder sf = ServiceManager.getService("SurfaceFlinger"); + if (sf != null) { + data = Parcel.obtain(); + data.writeInterfaceToken("android.ui.ISurfaceComposer"); + data.writeInt(flags); + sf.transact(1033 /* LAYER_TRACE_FLAGS_CODE */, data, null, 0 /* flags */); + } + } catch (RemoteException e) { + Slog.e(TAG, "Failed to set layer tracing flags"); + } finally { + if (data != null) { + data.recycle(); + } + } + } finally { + Binder.restoreCallingIdentity(token); + } + } + @Override public boolean mirrorDisplay(int displayId, SurfaceControl outSurfaceControl) { if (!checkCallingPermission(READ_FRAME_BUFFER, "mirrorDisplay()")) {