summaryrefslogtreecommitdiffstats
path: root/libs/surfaceflinger/Layer.cpp
diff options
context:
space:
mode:
authorMathias Agopian <mathias@google.com>2009-08-13 19:08:00 -0700
committerMathias Agopian <mathias@google.com>2009-08-13 19:08:00 -0700
commitd66a97950e8ef64051a4d497a91e5508254f77f6 (patch)
treeb4e1606b9113b79aee9e81cc2b5d68d7ae2ccbd6 /libs/surfaceflinger/Layer.cpp
parent238a66e67b155d7e1fcdb19b672ffc0ae4a6fc94 (diff)
downloadframeworks_native-d66a97950e8ef64051a4d497a91e5508254f77f6.zip
frameworks_native-d66a97950e8ef64051a4d497a91e5508254f77f6.tar.gz
frameworks_native-d66a97950e8ef64051a4d497a91e5508254f77f6.tar.bz2
fix a bug that could cause a window to be hidden in some cases.
this would happen is the window is made visible but the client didn't render yet into it. This happens often with SurfaceView. Instead of filling the window with solid black, SF would simply ignore it which could lead to more disturbing artifacts. in theory the window manager should not display a window before it has been drawn into, but it does happen occasionnaly.
Diffstat (limited to 'libs/surfaceflinger/Layer.cpp')
-rw-r--r--libs/surfaceflinger/Layer.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/libs/surfaceflinger/Layer.cpp b/libs/surfaceflinger/Layer.cpp
index ac4bf7b..6f92515 100644
--- a/libs/surfaceflinger/Layer.cpp
+++ b/libs/surfaceflinger/Layer.cpp
@@ -596,7 +596,12 @@ Region Layer::post(uint32_t* previousSate, bool& recomputeVisibleRegions)
Point Layer::getPhysicalSize() const
{
sp<const Buffer> front(frontBuffer().getBuffer());
- return Point(front->getWidth(), front->getHeight());
+ Point size(front->getWidth(), front->getHeight());
+ if ((size.x | size.y) == 0) {
+ // if we don't have a buffer yet, just use the state's size.
+ size = LayerBase::getPhysicalSize();
+ }
+ return size;
}
void Layer::unlockPageFlip(