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

Commit 096cb99a authored by Alex Sakhartchouk's avatar Alex Sakhartchouk
Browse files

Re-enable default display when switching to VR mode.

Previously, in an attempt to minimize the number of changes that got
reset during VR mode transitions, the primary display was not turned back
on.

Bug: 62215749
Test: Switch device into VR mode, observe primary display invalidations.

Change-Id: Idd883e1522f519a0db06fdd88b071007487b6e70
(cherry picked from commit 933ed5ce)
parent 5a556bc7
Loading
Loading
Loading
Loading
+15 −5
Original line number Diff line number Diff line
@@ -1323,11 +1323,21 @@ void SurfaceFlinger::updateVrFlinger() {
    // parts of this class rely on the primary display always being available.
    createDefaultDisplayDevice();

    // Re-enable default display.
    sp<LambdaMessage> requestMessage = new LambdaMessage([&]() {
        sp<DisplayDevice> hw(getDisplayDevice(mBuiltinDisplays[DisplayDevice::DISPLAY_PRIMARY]));
        setPowerModeInternal(hw, HWC_POWER_MODE_NORMAL);

        // Reset the timing values to account for the period of the swapped in HWC
        const auto& activeConfig = mHwc->getActiveConfig(HWC_DISPLAY_PRIMARY);
        const nsecs_t period = activeConfig->getVsyncPeriod();
        mAnimFrameTracker.setDisplayRefreshPeriod(period);

        // Use phase of 0 since phase is not known.
        // Use latency of 0, which will snap to the ideal latency.
        setCompositorTimingSnapped(0, period, 0);
    });
    postMessageAsync(requestMessage);

    android_atomic_or(1, &mRepaintEverything);
    setTransactionFlags(eDisplayTransactionNeeded);