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
This commit is contained in:
parent
a34c2a41f8
commit
f914e7ffad
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue