summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathias Agopian <mathias@google.com>2012-05-29 20:41:03 -0700
committerMathias Agopian <mathias@google.com>2012-05-29 20:41:03 -0700
commite31564d8eb0ab67e167a888eccce20f5b4e4ef45 (patch)
treee2db23535635f98e37b5324a9057bbe489000ab2
parent2c8207e9627fe6c7a90e31fae8d71ae49df56845 (diff)
downloadnative-e31564d8eb0ab67e167a888eccce20f5b4e4ef45.tar.gz
Fix a crasher is surfaceflinger.
this bug introduced recently would happen when the very first buffer of a surface was rejected for not having the right size Bug: 6577035 Change-Id: I9fabf20006019f2a6c308be7c7f5c05bdcfd5014
-rw-r--r--services/surfaceflinger/Layer.cpp12
1 files changed, 7 insertions, 5 deletions
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp
index d07a4b6852..5e17d07a15 100644
--- a/services/surfaceflinger/Layer.cpp
+++ b/services/surfaceflinger/Layer.cpp
@@ -617,20 +617,20 @@ void Layer::lockPageFlip(bool& recomputeVisibleRegions)
return;
}
-
// update the active buffer
mActiveBuffer = mSurfaceTexture->getCurrentBuffer();
+ if (mActiveBuffer == NULL) {
+ // this can only happen if the very first buffer was rejected.
+ return;
+ }
mFrameLatencyNeeded = true;
- if (oldActiveBuffer == NULL && mActiveBuffer != NULL) {
+ if (oldActiveBuffer == NULL) {
// the first time we receive a buffer, we need to trigger a
// geometry invalidation.
mFlinger->invalidateHwcGeometry();
}
- uint32_t bufWidth = mActiveBuffer->getWidth();
- uint32_t bufHeight = mActiveBuffer->getHeight();
-
Rect crop(mSurfaceTexture->getCurrentCrop());
const uint32_t transform(mSurfaceTexture->getCurrentTransform());
const uint32_t scalingMode(mSurfaceTexture->getCurrentScalingMode());
@@ -645,6 +645,8 @@ void Layer::lockPageFlip(bool& recomputeVisibleRegions)
}
if (oldActiveBuffer != NULL) {
+ uint32_t bufWidth = mActiveBuffer->getWidth();
+ uint32_t bufHeight = mActiveBuffer->getHeight();
if (bufWidth != uint32_t(oldActiveBuffer->width) ||
bufHeight != uint32_t(oldActiveBuffer->height)) {
mFlinger->invalidateHwcGeometry();