am 74da537f: Merge "[317580] fix issue where the screen wouldn\'t be rotated properly in bypass mode" into gingerbread

* commit '74da537f80ba36c1279c04fcb85d89fc38c246a6':
  [317580] fix issue where the screen wouldn't be rotated properly in bypass mode
This commit is contained in:
Mathias Agopian
2010-12-08 16:15:08 -08:00
committed by Android Git Automerger
3 changed files with 19 additions and 1 deletions

View File

@@ -466,6 +466,18 @@ bool Layer::setBypass(bool enable)
return true; return true;
} }
void Layer::updateBuffersOrientation()
{
sp<GraphicBuffer> buffer(getBypassBuffer());
if (buffer != NULL && mOrientation != buffer->transform) {
ClientRef::Access sharedClient(mUserClientRef);
SharedBufferServer* lcblk(sharedClient.get());
if (lcblk) { // all buffers need reallocation
lcblk->reallocateAll();
}
}
}
uint32_t Layer::doTransaction(uint32_t flags) uint32_t Layer::doTransaction(uint32_t flags)
{ {
const Layer::State& front(drawingState()); const Layer::State& front(drawingState());

View File

@@ -83,6 +83,8 @@ public:
virtual void onRemoved(); virtual void onRemoved();
virtual bool setBypass(bool enable); virtual bool setBypass(bool enable);
void updateBuffersOrientation();
inline sp<GraphicBuffer> getBypassBuffer() const { inline sp<GraphicBuffer> getBypassBuffer() const {
return mBufferManager.getActiveBuffer(); } return mBufferManager.getActiveBuffer(); }

View File

@@ -725,8 +725,12 @@ void SurfaceFlinger::setBypassLayer(const sp<LayerBase>& layer)
{ {
// if this layer is already the bypass layer, do nothing // if this layer is already the bypass layer, do nothing
sp<Layer> cur(mBypassLayer.promote()); sp<Layer> cur(mBypassLayer.promote());
if (mBypassLayer == layer) if (mBypassLayer == layer) {
if (cur != NULL) {
cur->updateBuffersOrientation();
}
return; return;
}
// clear the current bypass layer // clear the current bypass layer
mBypassLayer.clear(); mBypassLayer.clear();