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

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

Fix various flickering / artifacts

these were due to the "preserve backbuffer" optimization
interfering with hw composer. basically the screen needed
to be redrawn in the areas that move from GL to
overlay.

Bug: 5245513
Change-Id: I9bf75c4fe905f3ef62005e52108b94edae692304
parent a34c2a41
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -817,6 +817,20 @@ void SurfaceFlinger::handleWorkList()
    mHwWorkListDirty = false;
    HWComposer& hwc(graphicPlane(0).displayHardware().getHwComposer());
    if (hwc.initCheck() == NO_ERROR) {

        const DisplayHardware& hw(graphicPlane(0).displayHardware());
        uint32_t flags = hw.getFlags();
        if ((flags & DisplayHardware::SWAP_RECTANGLE) ||
            (flags & DisplayHardware::BUFFER_PRESERVED))
        {
            // we need to redraw everything (the whole screen)
            // NOTE: we could be more subtle here and redraw only
            // the area which will end-up in an overlay. But since this
            // shouldn't happen often, we invalidate everything.
            mDirtyRegion.set(hw.bounds());
            mInvalidRegion = mDirtyRegion;
        }

        const Vector< sp<LayerBase> >& currentLayers(mVisibleLayersSortedByZ);
        const size_t count = currentLayers.size();
        hwc.createWorkList(count);