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

Commit 91a0fb0a authored by Lingyu Feng's avatar Lingyu Feng
Browse files

Do no start mirroring when Display#canHostTasks() is true

Bug: 391744927
Test: manually
Test: atest ContentRecorderTests
Flag: com.android.server.display.feature.flags.enable_display_content_mode_management
Change-Id: Id76e427e95650d433f048e63008b79ada33d1230
parent ab67bc73
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ import android.os.RemoteException;
import android.os.ServiceManager;
import android.view.ContentRecordingSession;
import android.view.ContentRecordingSession.RecordContent;
import android.window.DesktopExperienceFlags;
import android.view.Display;
import android.view.DisplayInfo;
import android.view.SurfaceControl;
@@ -353,6 +354,13 @@ final class ContentRecorder implements WindowContainerListener {
            return;
        }

        // Recording should not be started on displays that are eligible for hosting tasks.
        // See android.view.Display#canHostTasks().
        if (DesktopExperienceFlags.ENABLE_DISPLAY_CONTENT_MODE_MANAGEMENT.isTrue()
                && mDisplayContent.mDisplay.canHostTasks()) {
            return;
        }

        if (mContentRecordingSession.isWaitingForConsent() || !isDisplayReadyForMirroring()) {
            ProtoLog.v(WM_DEBUG_CONTENT_RECORDING, "Content Recording: waiting to record, so do "
                    + "nothing");
+18 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
import static com.android.server.display.feature.flags.Flags.FLAG_ENABLE_DISPLAY_CONTENT_MODE_MANAGEMENT;

import static com.google.common.truth.Truth.assertThat;

@@ -51,6 +52,7 @@ import android.graphics.Point;
import android.graphics.Rect;
import android.media.projection.StopReason;
import android.os.IBinder;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.annotations.Presubmit;
import android.view.ContentRecordingSession;
import android.view.Display;
@@ -558,6 +560,22 @@ public class ContentRecorderTests extends WindowTestsBase {
        assertThat(mContentRecorder.isCurrentlyRecording()).isTrue();
    }

    @EnableFlags(FLAG_ENABLE_DISPLAY_CONTENT_MODE_MANAGEMENT)
    @Test
    public void testStartRecording_shouldShowSystemDecorations_recordingNotStarted() {
        defaultInit();
        mContentRecorder.setContentRecordingSession(mTaskSession);

        spyOn(mVirtualDisplayContent.mDisplay);
        doReturn(true).when(mVirtualDisplayContent.mDisplay).canHostTasks();

        // WHEN a recording tries to start.
        mContentRecorder.updateRecording();

        // THEN recording does not start.
        assertThat(mContentRecorder.isCurrentlyRecording()).isFalse();
    }

    @Test
    public void testOnVisibleRequestedChanged_notifiesCallback() {
        defaultInit();