diff options
| -rw-r--r-- | libs/gui/Surface.cpp | 11 | ||||
| -rw-r--r-- | services/surfaceflinger/Layer.cpp | 15 | ||||
| -rw-r--r-- | services/surfaceflinger/Layer.h | 1 | ||||
| -rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 7 | ||||
| -rw-r--r-- | services/surfaceflinger/SurfaceFlinger.h | 1 | ||||
| -rw-r--r-- | services/surfaceflinger/SurfaceTextureLayer.cpp | 8 |
6 files changed, 31 insertions, 12 deletions
diff --git a/libs/gui/Surface.cpp b/libs/gui/Surface.cpp index 54d04aada8b1..ff45fa34706b 100644 --- a/libs/gui/Surface.cpp +++ b/libs/gui/Surface.cpp @@ -351,13 +351,13 @@ int Surface::query(int what, int* value) const { // ---------------------------------------------------------------------------- -status_t Surface::lock(SurfaceInfo* other, Region* dirtyIn) { +status_t Surface::lock(SurfaceInfo* other, Region* inOutDirtyRegion) { ANativeWindow_Buffer outBuffer; ARect temp; ARect* inOutDirtyBounds = NULL; - if (dirtyIn) { - temp = dirtyIn->getBounds(); + if (inOutDirtyRegion) { + temp = inOutDirtyRegion->getBounds(); inOutDirtyBounds = &temp; } @@ -371,6 +371,11 @@ status_t Surface::lock(SurfaceInfo* other, Region* dirtyIn) { other->format = uint32_t(outBuffer.format); other->bits = outBuffer.bits; } + + if (inOutDirtyRegion) { + inOutDirtyRegion->set( static_cast<Rect const&>(temp) ); + } + return err; } diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp index 6f6a9bf88f62..8b2485a16331 100644 --- a/services/surfaceflinger/Layer.cpp +++ b/services/surfaceflinger/Layer.cpp @@ -538,9 +538,9 @@ void Layer::dump(String8& result, char* buffer, size_t SIZE) const snprintf(buffer, SIZE, " " "format=%2d, activeBuffer=[%4ux%4u:%4u,%3X]," - " freezeLock=%p, queued-frames=%d\n", + " freezeLock=%p, transform-hint=0x%02x, queued-frames=%d\n", mFormat, w0, h0, s0,f0, - getFreezeLock().get(), mQueuedFrames); + getFreezeLock().get(), getTransformHint(), mQueuedFrames); result.append(buffer); @@ -559,6 +559,17 @@ uint32_t Layer::getEffectiveUsage(uint32_t usage) const return usage; } +uint32_t Layer::getTransformHint() const { + uint32_t orientation = 0; + if (!mFlinger->mDebugDisableTransformHint) { + orientation = getOrientation(); + if (orientation & Transform::ROT_INVALID) { + orientation = 0; + } + } + return orientation; +} + // --------------------------------------------------------------------------- diff --git a/services/surfaceflinger/Layer.h b/services/surfaceflinger/Layer.h index 5f0be8074a1a..d06a35f01781 100644 --- a/services/surfaceflinger/Layer.h +++ b/services/surfaceflinger/Layer.h @@ -89,6 +89,7 @@ private: void onFrameQueued(); virtual sp<ISurface> createSurface(); uint32_t getEffectiveUsage(uint32_t usage) const; + uint32_t getTransformHint() const; bool isCropped() const; static bool getOpacityForFormat(uint32_t format); diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 1f27a70f696f..00802026213c 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -93,6 +93,7 @@ SurfaceFlinger::SurfaceFlinger() mDebugBackground(0), mDebugDDMS(0), mDebugDisableHWC(0), + mDebugDisableTransformHint(0), mDebugInSwapBuffers(0), mLastSwapBufferTime(0), mDebugInTransaction(0), @@ -1689,6 +1690,12 @@ status_t SurfaceFlinger::onTransact( invalidateHwcGeometry(); repaintEverything(); return NO_ERROR; + case 1009: // toggle use of transform hint + n = data.readInt32(); + mDebugDisableTransformHint = n ? 1 : 0; + invalidateHwcGeometry(); + repaintEverything(); + return NO_ERROR; case 1010: // interrogate. reply->writeInt32(0); reply->writeInt32(0); diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h index d68e4840199f..5f8eb08683f2 100644 --- a/services/surfaceflinger/SurfaceFlinger.h +++ b/services/surfaceflinger/SurfaceFlinger.h @@ -374,6 +374,7 @@ private: int mDebugBackground; int mDebugDDMS; int mDebugDisableHWC; + int mDebugDisableTransformHint; volatile nsecs_t mDebugInSwapBuffers; nsecs_t mLastSwapBufferTime; volatile nsecs_t mDebugInTransaction; diff --git a/services/surfaceflinger/SurfaceTextureLayer.cpp b/services/surfaceflinger/SurfaceTextureLayer.cpp index 79cd0c31408a..4390ca19fc24 100644 --- a/services/surfaceflinger/SurfaceTextureLayer.cpp +++ b/services/surfaceflinger/SurfaceTextureLayer.cpp @@ -57,16 +57,10 @@ status_t SurfaceTextureLayer::queueBuffer(int buf, int64_t timestamp, status_t res = SurfaceTexture::queueBuffer(buf, timestamp, outWidth, outHeight, outTransform); - sp<Layer> layer(mLayer.promote()); if (layer != NULL) { - uint32_t orientation = layer->getOrientation(); - if (orientation & Transform::ROT_INVALID) { - orientation = 0; - } - *outTransform = orientation; + *outTransform = layer->getTransformHint(); } - return res; } |