Merge "SurfaceFlinger: fix a layer occlusion bug"

This commit is contained in:
Jamie Gennis 2011-07-29 16:18:38 -07:00 committed by Android (Google) Code Review
commit 96cdaaefa0

View File

@ -326,8 +326,9 @@ bool Layer::isOpaque() const
{ {
// if we don't have a buffer yet, we're translucent regardless of the // if we don't have a buffer yet, we're translucent regardless of the
// layer's opaque flag. // layer's opaque flag.
if (mActiveBuffer == 0) if (mActiveBuffer == 0) {
return false; return false;
}
// if the layer has the opaque flag, then we're always opaque, // if the layer has the opaque flag, then we're always opaque,
// otherwise we use the current buffer's format. // otherwise we use the current buffer's format.
@ -411,6 +412,8 @@ bool Layer::isCropped() const {
void Layer::lockPageFlip(bool& recomputeVisibleRegions) void Layer::lockPageFlip(bool& recomputeVisibleRegions)
{ {
if (mQueuedFrames > 0) { if (mQueuedFrames > 0) {
const bool oldOpacity = isOpaque();
// signal another event if we have more frames pending // signal another event if we have more frames pending
if (android_atomic_dec(&mQueuedFrames) > 1) { if (android_atomic_dec(&mQueuedFrames) > 1) {
mFlinger->signalEvent(); mFlinger->signalEvent();
@ -438,9 +441,8 @@ void Layer::lockPageFlip(bool& recomputeVisibleRegions)
mFlinger->invalidateHwcGeometry(); mFlinger->invalidateHwcGeometry();
} }
const bool opacity(getOpacityForFormat(mActiveBuffer->format)); mCurrentOpacity = getOpacityForFormat(mActiveBuffer->format);
if (opacity != mCurrentOpacity) { if (oldOpacity != isOpaque()) {
mCurrentOpacity = opacity;
recomputeVisibleRegions = true; recomputeVisibleRegions = true;
} }