Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9eb672e5 authored by Vishnu Nair's avatar Vishnu Nair
Browse files

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
parent 9b82cceb
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -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);
}
+27 −0
Original line number Diff line number Diff line
@@ -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()")) {