fix [2664345] Flash: Bad flicker at the end of a pinch zoom.
the window manger puts SurfaceViews up before they have been rendered into, because of that surfaceflinger doesn't have anything ready to draw for that surface when an udpate occurs and responds by filling the surface with black. With this fix, we only fill those areas of the framebuffer that would otherwise be undefined (no content at all). in the Flash case, the "flash" window is not drawn at all until it has some content, instead the underlaying browser window is shown. Change-Id: Ifb610f7f8c27b88edf83e09adc4803fc295c15a1
This commit is contained in:
parent
359b3fd8d8
commit
179169e88e
|
@ -281,9 +281,28 @@ void Layer::onDraw(const Region& clip) const
|
|||
GLuint textureName = mTextures[index].name;
|
||||
if (UNLIKELY(textureName == -1LU)) {
|
||||
// the texture has not been created yet, this Layer has
|
||||
// in fact never been drawn into. this happens frequently with
|
||||
// SurfaceView.
|
||||
clearWithOpenGL(clip);
|
||||
// in fact never been drawn into. This happens frequently with
|
||||
// SurfaceView because the WindowManager can't know when the client
|
||||
// has drawn the first time.
|
||||
|
||||
// If there is nothing under us, we paint the screen in black, otherwise
|
||||
// we just skip this update.
|
||||
|
||||
// figure out if there is something below us
|
||||
Region under;
|
||||
const SurfaceFlinger::LayerVector& drawingLayers(mFlinger->mDrawingState.layersSortedByZ);
|
||||
const size_t count = drawingLayers.size();
|
||||
for (size_t i=0 ; i<count ; ++i) {
|
||||
const sp<LayerBase>& layer(drawingLayers[i]);
|
||||
if (layer.get() == static_cast<LayerBase const*>(this))
|
||||
break;
|
||||
under.orSelf(layer->visibleRegionScreen);
|
||||
}
|
||||
// if not everything below us is covered, we plug the holes!
|
||||
Region holes(clip.subtract(under));
|
||||
if (!holes.isEmpty()) {
|
||||
clearWithOpenGL(holes);
|
||||
}
|
||||
return;
|
||||
}
|
||||
drawWithOpenGL(clip, mTextures[index]);
|
||||
|
|
Loading…
Reference in New Issue