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

Commit e24cc7a3 authored by Mathias Agopian's avatar Mathias Agopian
Browse files

[317580] fix issue where the screen wouldn't be rotated properly in bypass mode

In some situations, the screen transformation would not be
applied while in bypass mode.

Change-Id: I3d6dd52e4c12b11aae97b54bf8e2322536eee37f
parent db13e364
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -466,6 +466,18 @@ bool Layer::setBypass(bool enable)
    return true;
}

void Layer::updateBuffersOrientation()
{
    sp<GraphicBuffer> buffer(getBypassBuffer());
    if (buffer != NULL && mOrientation != buffer->transform) {
        ClientRef::Access sharedClient(mUserClientRef);
        SharedBufferServer* lcblk(sharedClient.get());
        if (lcblk) { // all buffers need reallocation
            lcblk->reallocateAll();
        }
    }
}

uint32_t Layer::doTransaction(uint32_t flags)
{
    const Layer::State& front(drawingState());
+2 −0
Original line number Diff line number Diff line
@@ -83,6 +83,8 @@ public:
    virtual void onRemoved();
    virtual bool setBypass(bool enable);

    void updateBuffersOrientation();

    inline sp<GraphicBuffer> getBypassBuffer() const {
        return mBufferManager.getActiveBuffer(); }

+5 −1
Original line number Diff line number Diff line
@@ -725,8 +725,12 @@ void SurfaceFlinger::setBypassLayer(const sp<LayerBase>& layer)
{
    // if this layer is already the bypass layer, do nothing
    sp<Layer> cur(mBypassLayer.promote());
    if (mBypassLayer == layer)
    if (mBypassLayer == layer) {
        if (cur != NULL) {
            cur->updateBuffersOrientation();
        }
        return;
    }

    // clear the current bypass layer
    mBypassLayer.clear();