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

Commit 1273ac10 authored by Ady Abraham's avatar Ady Abraham
Browse files

SF: update mDefaultDisplayTransformHint for the active display

Bug: 196167822
Test: manual
Change-Id: Id40dd471208c7feef9e941dbada534a23961afe3
parent 3b134ccf
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -2859,8 +2859,8 @@ void SurfaceFlinger::processDisplayChanged(const wp<IBinder>& displayToken,
            (currentState.orientedDisplaySpaceRect != drawingState.orientedDisplaySpaceRect)) {
            display->setProjection(currentState.orientation, currentState.layerStackSpaceRect,
                                   currentState.orientedDisplaySpaceRect);
            if (display->isPrimary()) {
                mDefaultDisplayTransformHint = display->getTransformHint();
            if (isDisplayActiveLocked(display)) {
                mActiveDisplayTransformHint = display->getTransformHint();
            }
        }
        if (currentState.width != drawingState.width ||
@@ -3364,9 +3364,9 @@ status_t SurfaceFlinger::addClientLayer(const sp<Client>& client, const sp<IBind
    composerState.state.surface = handle;
    states.add(composerState);

    lbc->updateTransformHint(mDefaultDisplayTransformHint);
    lbc->updateTransformHint(mActiveDisplayTransformHint);
    if (outTransformHint) {
        *outTransformHint = mDefaultDisplayTransformHint;
        *outTransformHint = mActiveDisplayTransformHint;
    }
    // attach this layer to the client
    client->attachLayer(handle, lbc);
@@ -4477,7 +4477,7 @@ void SurfaceFlinger::onInitializeDisplays() {
    const nsecs_t vsyncPeriod =
            display->refreshRateConfigs().getCurrentRefreshRate().getVsyncPeriod();
    mAnimFrameTracker.setDisplayRefreshPeriod(vsyncPeriod);
    mDefaultDisplayTransformHint = display->getTransformHint();
    mActiveDisplayTransformHint = display->getTransformHint();
    // Use phase of 0 since phase is not known.
    // Use latency of 0, which will snap to the ideal latency.
    DisplayStatInfo stats{0 /* vsyncTime */, vsyncPeriod};
@@ -6912,7 +6912,7 @@ sp<Layer> SurfaceFlinger::handleLayerCreatedLocked(const sp<IBinder>& handle) {
        parent->addChild(layer);
    }

    layer->updateTransformHint(mDefaultDisplayTransformHint);
    layer->updateTransformHint(mActiveDisplayTransformHint);

    if (state->initialProducer != nullptr) {
        mGraphicBufferProducerList.insert(state->initialProducer);
@@ -6959,12 +6959,12 @@ void SurfaceFlinger::onActiveDisplayChangedLocked(const sp<DisplayDevice>& activ
        return;
    }
    mActiveDisplayToken = activeDisplay->getDisplayToken();

    activeDisplay->getCompositionDisplay()->setLayerCachingTexturePoolEnabled(true);
    updateInternalDisplayVsyncLocked(activeDisplay);
    mScheduler->setModeChangePending(false);
    mScheduler->setRefreshRateConfigs(activeDisplay->holdRefreshRateConfigs());
    onActiveDisplaySizeChanged(activeDisplay);
    mActiveDisplayTransformHint = activeDisplay->getTransformHint();
}

status_t SurfaceFlinger::addWindowInfosListener(
+1 −1
Original line number Diff line number Diff line
@@ -1500,7 +1500,7 @@ private:
    auto getLayerCreatedState(const sp<IBinder>& handle);
    sp<Layer> handleLayerCreatedLocked(const sp<IBinder>& handle) REQUIRES(mStateLock);

    std::atomic<ui::Transform::RotationFlags> mDefaultDisplayTransformHint;
    std::atomic<ui::Transform::RotationFlags> mActiveDisplayTransformHint;

    void scheduleRegionSamplingThread();
    void notifyRegionSamplingThread();