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:
committed by
Android (Google) Code Review
commit
f33bc2dfb5
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user