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

Commit c9232edd authored by chaviw's avatar chaviw
Browse files

Added check for forceClientComposition for every layer.

Instead of having the Layers check for forceClientComposition, have
SurfaceFlinger check since it will be skipping hwc. This also ensures
that new Layer types also get the same check.

Fixes: 69254085
Test: Current tests pass. Rotation works correctly now.

Change-Id: I7a2a378d9690206008b1dab9ce521f959542903a
parent c2c0dce2
Loading
Loading
Loading
Loading
+0 −8
Original line number Diff line number Diff line
@@ -613,14 +613,6 @@ void BufferLayer::setPerFrameData(const sp<const DisplayDevice>& displayDevice)
        return;
    }

    // Client layers
    if (hwcInfo.forceClientComposition ||
        (mActiveBuffer != nullptr && mActiveBuffer->handle == nullptr)) {
        ALOGV("[%s] Requesting Client composition", mName.string());
        setCompositionType(hwcId, HWC2::Composition::Client);
        return;
    }

    // Device or Cursor layers
    if (mPotentialCursor) {
        ALOGV("[%s] Requesting Cursor composition", mName.string());
+9 −0
Original line number Diff line number Diff line
@@ -621,6 +621,15 @@ void Layer::forceClientComposition(int32_t hwcId) {
    mHwcLayers[hwcId].forceClientComposition = true;
}

bool Layer::getForceClientComposition(int32_t hwcId) {
    if (mHwcLayers.count(hwcId) == 0) {
        ALOGE("getForceClientComposition: no HWC layer found (%d)", hwcId);
        return false;
    }

    return mHwcLayers[hwcId].forceClientComposition;
}

void Layer::updateCursorPosition(const sp<const DisplayDevice>& displayDevice) {
    auto hwcId = displayDevice->getHwcDisplayId();
    if (mHwcLayers.count(hwcId) == 0 || getCompositionType(hwcId) != HWC2::Composition::Cursor) {
+1 −0
Original line number Diff line number Diff line
@@ -299,6 +299,7 @@ public:

    void setGeometry(const sp<const DisplayDevice>& displayDevice, uint32_t z);
    void forceClientComposition(int32_t hwcId);
    bool getForceClientComposition(int32_t hwcId);
    virtual void setPerFrameData(const sp<const DisplayDevice>& displayDevice) = 0;

    // callIntoHwc exists so we can update our local state and call
+6 −0
Original line number Diff line number Diff line
@@ -1956,6 +1956,12 @@ void SurfaceFlinger::setUpHWComposer() {
                    "display %zd: %d", displayId, result);
        }
        for (auto& layer : displayDevice->getVisibleLayersSortedByZ()) {
            if (layer->getForceClientComposition(hwcId)) {
                ALOGV("[%s] Requesting Client composition", layer->getName().string());
                layer->setCompositionType(hwcId, HWC2::Composition::Client);
                continue;
            }

            layer->setPerFrameData(displayDevice);
        }