diff options
author | Mathias Agopian <mathias@google.com> | 2012-05-29 20:41:03 -0700 |
---|---|---|
committer | Mathias Agopian <mathias@google.com> | 2012-05-29 20:41:03 -0700 |
commit | e31564d8eb0ab67e167a888eccce20f5b4e4ef45 (patch) | |
tree | e2db23535635f98e37b5324a9057bbe489000ab2 | |
parent | 2c8207e9627fe6c7a90e31fae8d71ae49df56845 (diff) | |
download | native-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.cpp | 12 |
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(); |