diff options
author | Mathias Agopian <mathias@google.com> | 2009-08-13 19:08:00 -0700 |
---|---|---|
committer | Mathias Agopian <mathias@google.com> | 2009-08-13 19:08:00 -0700 |
commit | d66a97950e8ef64051a4d497a91e5508254f77f6 (patch) | |
tree | b4e1606b9113b79aee9e81cc2b5d68d7ae2ccbd6 /libs/surfaceflinger/Layer.cpp | |
parent | 238a66e67b155d7e1fcdb19b672ffc0ae4a6fc94 (diff) | |
download | frameworks_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.cpp | 7 |
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( |