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

Commit 7ea0cc48 authored by Robert Carr's avatar Robert Carr
Browse files

Remove RemoteSurfaceTrace functionality.

Only used by a test which is now deleted. Obsoleted by protobuf
tracing.

Bug: 70693884
Test: Boots
Change-Id: I3bc95880afc0e72bb05640cdd18a916fbb664eae
parent 3f8237f3
Loading
Loading
Loading
Loading
+0 −7
Original line number Diff line number Diff line
@@ -185,13 +185,6 @@ interface IWindowManager
     */
    void setScreenCaptureDisabled(int userId, boolean disabled);

    /**
     * Testing and debugging infrastructure for writing surface events
     * to given FD. See RemoteSurfaceTrace.java or Wm.java for format.
     */
    void enableSurfaceTrace(in ParcelFileDescriptor fd);
    void disableSurfaceTrace();

    // These can only be called with the SET_ORIENTATION permission.
    /**
     * Update the current screen rotation based on the current state of
+0 −12
Original line number Diff line number Diff line
@@ -2600,18 +2600,6 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
        }, false /* traverseTopToBottom */);
    }

    void enableSurfaceTrace(FileDescriptor fd) {
        forAllWindows(w -> {
            w.mWinAnimator.enableSurfaceTrace(fd);
        }, true /* traverseTopToBottom */);
    }

    void disableSurfaceTrace() {
        forAllWindows(w -> {
            w.mWinAnimator.disableSurfaceTrace();
        }, true /* traverseTopToBottom */);
    }

    /**
     * Starts the Keyguard exit animation on all windows that don't belong to an app token.
     */
+0 −76
Original line number Diff line number Diff line
/*
 * 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.os.StrictMode;
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";

    // We terminate all our messages with a recognizable marker, to avoid issues
    // with partial reads (which ADB makes impossible to avoid).
    static final byte[] sigil = {(byte)0xfc, (byte)0xfc, (byte)0xfc, (byte)0xfc};

    private final WindowManagerService mService;
    private final DataOutputStream mOut;

    RemoteEventTrace(WindowManagerService service, FileDescriptor fd) {
        mService = service;
        mOut = new DataOutputStream(new FileOutputStream(fd, false));
    }

    void openSurfaceTransaction() {
        final StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
        try {
            mOut.writeUTF("OpenTransaction");
            writeSigil();
        } catch (Exception e) {
            logException(e);
            mService.disableSurfaceTrace();
        } finally {
            StrictMode.setThreadPolicy(oldPolicy);
        }
    }

    void closeSurfaceTransaction() {
        final StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
        try {
            mOut.writeUTF("CloseTransaction");
            writeSigil();
        } catch (Exception e) {
            logException(e);
            mService.disableSurfaceTrace();
        } finally {
            StrictMode.setThreadPolicy(oldPolicy);
        }
    }

    private void writeSigil() throws Exception {
        mOut.write(RemoteEventTrace.sigil, 0, 4);
    }

    static void logException(Exception e) {
        Slog.i(TAG, "Exception writing to SurfaceTrace (client vanished?): " + e.toString());
    }
}
+0 −223
Original line number Diff line number Diff line
/*
 * 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 android.graphics.Rect;
import android.graphics.Region;
import android.os.IBinder;
import android.os.Parcel;
import android.os.StrictMode;
import android.util.Slog;
import android.view.SurfaceControl;

import java.io.FileDescriptor;
import java.io.FileOutputStream;
import java.io.DataOutputStream;

// A surface control subclass which logs events to a FD in binary format.
// This can be used in our CTS tests to enable a pattern similar to mocking
// the surface control.
//
// See cts/hostsidetests/../../SurfaceTraceReceiver.java for parsing side.
class RemoteSurfaceTrace extends SurfaceControl {
    static final String TAG = "RemoteSurfaceTrace";

    final FileDescriptor mWriteFd;
    final DataOutputStream mOut;

    final WindowManagerService mService;
    final WindowState mWindow;

    RemoteSurfaceTrace(FileDescriptor fd, SurfaceControl wrapped,
            WindowState window) {
        super(wrapped);

        mWriteFd = fd;
        mOut = new DataOutputStream(new FileOutputStream(fd, false));

        mWindow = window;
        mService = mWindow.mService;
    }

    @Override
    public void setAlpha(float alpha) {
        final StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
        try {
            writeFloatEvent("Alpha", alpha);
        } finally {
            StrictMode.setThreadPolicy(oldPolicy);
        }
        super.setAlpha(alpha);
    }

    @Override
    public void setLayer(int zorder) {
        final StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
        try {
            writeIntEvent("Layer", zorder);
        } finally {
            StrictMode.setThreadPolicy(oldPolicy);
        }
        super.setLayer(zorder);
    }

    @Override
    public void setPosition(float x, float y) {
        final StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
        try {
            writeFloatEvent("Position", x, y);
        } finally {
            StrictMode.setThreadPolicy(oldPolicy);
        }
        super.setPosition(x, y);
    }

    @Override
    public void setGeometryAppliesWithResize() {
        final StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
        try {
            writeEvent("GeometryAppliesWithResize");
        } finally {
            StrictMode.setThreadPolicy(oldPolicy);
        }
        super.setGeometryAppliesWithResize();
    }

    @Override
    public void setSize(int w, int h) {
        final StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
        try {
            writeIntEvent("Size", w, h);
        } finally {
            StrictMode.setThreadPolicy(oldPolicy);
        }
        super.setSize(w, h);
    }

    @Override
    public void setWindowCrop(Rect crop) {
        final StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
        try {
            writeRectEvent("Crop", crop);
        } finally {
            StrictMode.setThreadPolicy(oldPolicy);
        }
        super.setWindowCrop(crop);
    }

    @Override
    public void setFinalCrop(Rect crop) {
        final StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
        try {
            writeRectEvent("FinalCrop", crop);
        } finally {
            StrictMode.setThreadPolicy(oldPolicy);
        }
        super.setFinalCrop(crop);
    }

    @Override
    public void setLayerStack(int layerStack) {
        final StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
        try {
            writeIntEvent("LayerStack", layerStack);
        } finally {
            StrictMode.setThreadPolicy(oldPolicy);
        }
        super.setLayerStack(layerStack);
    }

    @Override
    public void setMatrix(float dsdx, float dtdx, float dsdy, float dtdy) {
        final StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
        try {
            writeFloatEvent("Matrix", dsdx, dtdx, dsdy, dtdy);
        } finally {
            StrictMode.setThreadPolicy(oldPolicy);
        }
        super.setMatrix(dsdx, dtdx, dsdy, dtdy);
    }

    @Override
    public void hide() {
        final StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
        try {
            writeEvent("Hide");
        } finally {
            StrictMode.setThreadPolicy(oldPolicy);
        }
        super.hide();
    }

    @Override
    public void show() {
        final StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
        try {
            writeEvent("Show");
        } finally {
            StrictMode.setThreadPolicy(oldPolicy);
        }
        super.show();
    }

    private void writeEvent(String tag) {
        try {
            mOut.writeUTF(tag);
            mOut.writeUTF(mWindow.getWindowTag().toString());
            writeSigil();
        } catch (Exception e) {
            RemoteEventTrace.logException(e);
            mService.disableSurfaceTrace();
        }
    }

    private void writeIntEvent(String tag, int... values) {
        try {
            mOut.writeUTF(tag);
            mOut.writeUTF(mWindow.getWindowTag().toString());
            for (int value: values) {
                mOut.writeInt(value);
            }
            writeSigil();
        } catch (Exception e) {
            RemoteEventTrace.logException(e);
            mService.disableSurfaceTrace();
        }
    }

    private void writeFloatEvent(String tag, float... values) {
        try {
            mOut.writeUTF(tag);
            mOut.writeUTF(mWindow.getWindowTag().toString());
            for (float value: values) {
                mOut.writeFloat(value);
            }
            writeSigil();
        } catch (Exception e) {
            RemoteEventTrace.logException(e);
            mService.disableSurfaceTrace();
        }
    }

    private void writeRectEvent(String tag, Rect value) {
        writeFloatEvent(tag, value.left, value.top, value.right, value.bottom);
    }

    private void writeSigil() throws Exception {
        mOut.write(RemoteEventTrace.sigil, 0, 4);
    }
}
+0 −31
Original line number Diff line number Diff line
@@ -130,13 +130,6 @@ class RootWindowContainer extends WindowContainer<DisplayContent> {
    private final ArrayList<TaskStack> mTmpStackList = new ArrayList();
    private final ArrayList<Integer> mTmpStackIds = new ArrayList<>();

    // State for the RemoteSurfaceTrace system used in testing. If this is enabled SurfaceControl
    // instances will be replaced with an instance that writes a binary representation of all
    // commands to mSurfaceTraceFd.
    boolean mSurfaceTraceEnabled;
    ParcelFileDescriptor mSurfaceTraceFd;
    RemoteEventTrace mRemoteEventTrace;

    final WallpaperController mWallpaperController;

    private final Handler mHandler;
@@ -1014,30 +1007,6 @@ class RootWindowContainer extends WindowContainer<DisplayContent> {
        }
    }

    void enableSurfaceTrace(ParcelFileDescriptor pfd) {
        final FileDescriptor fd = pfd.getFileDescriptor();
        if (mSurfaceTraceEnabled) {
            disableSurfaceTrace();
        }
        mSurfaceTraceEnabled = true;
        mRemoteEventTrace = new RemoteEventTrace(mService, fd);
        mSurfaceTraceFd = pfd;
        for (int displayNdx = mChildren.size() - 1; displayNdx >= 0; --displayNdx) {
            final DisplayContent dc = mChildren.get(displayNdx);
            dc.enableSurfaceTrace(fd);
        }
    }

    void disableSurfaceTrace() {
        mSurfaceTraceEnabled = false;
        mRemoteEventTrace = null;
        mSurfaceTraceFd = null;
        for (int displayNdx = mChildren.size() - 1; displayNdx >= 0; --displayNdx) {
            final DisplayContent dc = mChildren.get(displayNdx);
            dc.disableSurfaceTrace();
        }
    }

    void dumpDisplayContents(PrintWriter pw) {
        pw.println("WINDOW MANAGER DISPLAY CONTENTS (dumpsys window displays)");
        if (mService.mDisplayReady) {
Loading