Merge changes I14e03939,I9aafe6f2

* changes:
  Fix an issue where Surface::lock() would never update the output region
  Add a debug option to turn the "transformation hint" off
This commit is contained in:
Mathias Agopian
2011-08-23 21:38:59 -07:00
committed by Android (Google) Code Review
6 changed files with 31 additions and 12 deletions

View File

@@ -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; ANativeWindow_Buffer outBuffer;
ARect temp; ARect temp;
ARect* inOutDirtyBounds = NULL; ARect* inOutDirtyBounds = NULL;
if (dirtyIn) { if (inOutDirtyRegion) {
temp = dirtyIn->getBounds(); temp = inOutDirtyRegion->getBounds();
inOutDirtyBounds = &temp; inOutDirtyBounds = &temp;
} }
@@ -371,6 +371,11 @@ status_t Surface::lock(SurfaceInfo* other, Region* dirtyIn) {
other->format = uint32_t(outBuffer.format); other->format = uint32_t(outBuffer.format);
other->bits = outBuffer.bits; other->bits = outBuffer.bits;
} }
if (inOutDirtyRegion) {
inOutDirtyRegion->set( static_cast<Rect const&>(temp) );
}
return err; return err;
} }

View File

@@ -538,9 +538,9 @@ void Layer::dump(String8& result, char* buffer, size_t SIZE) const
snprintf(buffer, SIZE, snprintf(buffer, SIZE,
" " " "
"format=%2d, activeBuffer=[%4ux%4u:%4u,%3X]," "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, mFormat, w0, h0, s0,f0,
getFreezeLock().get(), mQueuedFrames); getFreezeLock().get(), getTransformHint(), mQueuedFrames);
result.append(buffer); result.append(buffer);
@@ -559,6 +559,17 @@ uint32_t Layer::getEffectiveUsage(uint32_t usage) const
return usage; 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;
}
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------

View File

@@ -89,6 +89,7 @@ private:
void onFrameQueued(); void onFrameQueued();
virtual sp<ISurface> createSurface(); virtual sp<ISurface> createSurface();
uint32_t getEffectiveUsage(uint32_t usage) const; uint32_t getEffectiveUsage(uint32_t usage) const;
uint32_t getTransformHint() const;
bool isCropped() const; bool isCropped() const;
static bool getOpacityForFormat(uint32_t format); static bool getOpacityForFormat(uint32_t format);

View File

@@ -93,6 +93,7 @@ SurfaceFlinger::SurfaceFlinger()
mDebugBackground(0), mDebugBackground(0),
mDebugDDMS(0), mDebugDDMS(0),
mDebugDisableHWC(0), mDebugDisableHWC(0),
mDebugDisableTransformHint(0),
mDebugInSwapBuffers(0), mDebugInSwapBuffers(0),
mLastSwapBufferTime(0), mLastSwapBufferTime(0),
mDebugInTransaction(0), mDebugInTransaction(0),
@@ -1689,6 +1690,12 @@ status_t SurfaceFlinger::onTransact(
invalidateHwcGeometry(); invalidateHwcGeometry();
repaintEverything(); repaintEverything();
return NO_ERROR; 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. case 1010: // interrogate.
reply->writeInt32(0); reply->writeInt32(0);
reply->writeInt32(0); reply->writeInt32(0);

View File

@@ -374,6 +374,7 @@ private:
int mDebugBackground; int mDebugBackground;
int mDebugDDMS; int mDebugDDMS;
int mDebugDisableHWC; int mDebugDisableHWC;
int mDebugDisableTransformHint;
volatile nsecs_t mDebugInSwapBuffers; volatile nsecs_t mDebugInSwapBuffers;
nsecs_t mLastSwapBufferTime; nsecs_t mLastSwapBufferTime;
volatile nsecs_t mDebugInTransaction; volatile nsecs_t mDebugInTransaction;

View File

@@ -57,16 +57,10 @@ status_t SurfaceTextureLayer::queueBuffer(int buf, int64_t timestamp,
status_t res = SurfaceTexture::queueBuffer(buf, timestamp, status_t res = SurfaceTexture::queueBuffer(buf, timestamp,
outWidth, outHeight, outTransform); outWidth, outHeight, outTransform);
sp<Layer> layer(mLayer.promote()); sp<Layer> layer(mLayer.promote());
if (layer != NULL) { if (layer != NULL) {
uint32_t orientation = layer->getOrientation(); *outTransform = layer->getTransformHint();
if (orientation & Transform::ROT_INVALID) {
orientation = 0;
}
*outTransform = orientation;
} }
return res; return res;
} }