Merge changes I32fbc2b6,Ifd0ed05b into jb-dev

* changes:
  SurfaceFlinger: recompute visible regions less
  libgui: remove setPostTransformCrop
This commit is contained in:
Jamie Gennis 2012-05-15 11:33:42 -07:00 committed by Android (Google) Code Review
commit dd73996552
5 changed files with 4 additions and 105 deletions

View File

@ -104,7 +104,6 @@ protected:
virtual int setBuffersTransform(int transform); virtual int setBuffersTransform(int transform);
virtual int setBuffersTimestamp(int64_t timestamp); virtual int setBuffersTimestamp(int64_t timestamp);
virtual int setCrop(Rect const* rect); virtual int setCrop(Rect const* rect);
virtual int setPostTransformCrop(Rect const* rect);
virtual int setUsage(uint32_t reqUsage); virtual int setUsage(uint32_t reqUsage);
virtual int lock(ANativeWindow_Buffer* outBuffer, ARect* inOutDirtyBounds); virtual int lock(ANativeWindow_Buffer* outBuffer, ARect* inOutDirtyBounds);
virtual int unlockAndPost(); virtual int unlockAndPost();
@ -159,13 +158,6 @@ private:
// that gets queued. It is set by calling setCrop. // that gets queued. It is set by calling setCrop.
Rect mCrop; Rect mCrop;
// mCropNeedsTransform indicates whether mCrop is in post-transform
// coordinates and must be transformed using the inverse of mTransform
// before being queued with a buffer. Otherwise the crop is passed
// untransformed. It is initialized to false, is set to true by
// setPostTransformCrop, and set to false by setCrop.
bool mCropNeedsTransform;
// mScalingMode is the scaling mode that will be used for the next // mScalingMode is the scaling mode that will be used for the next
// buffers that get queued. It is set by calling setScalingMode. // buffers that get queued. It is set by calling setScalingMode.
int mScalingMode; int mScalingMode;

View File

@ -495,9 +495,9 @@ status_t BufferQueue::dequeueBuffer(int *outBuf, uint32_t w, uint32_t h,
// synchronizing access to it. It's too late at this point to abort the // synchronizing access to it. It's too late at this point to abort the
// dequeue operation. // dequeue operation.
if (result == EGL_FALSE) { if (result == EGL_FALSE) {
ALOGE("dequeueBuffer: error waiting for fence: %#x", eglGetError()); ST_LOGE("dequeueBuffer: error waiting for fence: %#x", eglGetError());
} else if (result == EGL_TIMEOUT_EXPIRED_KHR) { } else if (result == EGL_TIMEOUT_EXPIRED_KHR) {
ALOGE("dequeueBuffer: timeout waiting for fence"); ST_LOGE("dequeueBuffer: timeout waiting for fence");
} }
eglDestroySyncKHR(dpy, fence); eglDestroySyncKHR(dpy, fence);
} }

View File

@ -76,7 +76,6 @@ void SurfaceTextureClient::init() {
mReqUsage = 0; mReqUsage = 0;
mTimestamp = NATIVE_WINDOW_TIMESTAMP_AUTO; mTimestamp = NATIVE_WINDOW_TIMESTAMP_AUTO;
mCrop.clear(); mCrop.clear();
mCropNeedsTransform = false;
mScalingMode = NATIVE_WINDOW_SCALING_MODE_FREEZE; mScalingMode = NATIVE_WINDOW_SCALING_MODE_FREEZE;
mTransform = 0; mTransform = 0;
mDefaultWidth = 0; mDefaultWidth = 0;
@ -238,25 +237,9 @@ int SurfaceTextureClient::queueBuffer(android_native_buffer_t* buffer) {
return i; return i;
} }
Rect crop(mCrop);
if (mCropNeedsTransform) {
// The crop rect was specified in the post-transform coordinate space,
// so we need to transform that rect by the inverse of mTransform to
// put it into the buffer pixel space before queuing it.
uint32_t invTransform = mTransform;
int32_t width = buffer->width;
int32_t height = buffer->height;
if (mTransform & NATIVE_WINDOW_TRANSFORM_ROT_90) {
invTransform ^= NATIVE_WINDOW_TRANSFORM_FLIP_V |
NATIVE_WINDOW_TRANSFORM_FLIP_H;
width = buffer->height;
height = buffer->width;
}
crop = mCrop.transform(invTransform, width, height);
}
// Make sure the crop rectangle is entirely inside the buffer. // Make sure the crop rectangle is entirely inside the buffer.
crop.intersect(Rect(buffer->width, buffer->height), &crop); Rect crop;
mCrop.intersect(Rect(buffer->width, buffer->height), &crop);
ISurfaceTexture::QueueBufferOutput output; ISurfaceTexture::QueueBufferOutput output;
ISurfaceTexture::QueueBufferInput input(timestamp, crop, mScalingMode, ISurfaceTexture::QueueBufferInput input(timestamp, crop, mScalingMode,
@ -341,9 +324,6 @@ int SurfaceTextureClient::perform(int operation, va_list args)
case NATIVE_WINDOW_SET_CROP: case NATIVE_WINDOW_SET_CROP:
res = dispatchSetCrop(args); res = dispatchSetCrop(args);
break; break;
case NATIVE_WINDOW_SET_POST_TRANSFORM_CROP:
res = dispatchSetPostTransformCrop(args);
break;
case NATIVE_WINDOW_SET_BUFFER_COUNT: case NATIVE_WINDOW_SET_BUFFER_COUNT:
res = dispatchSetBufferCount(args); res = dispatchSetBufferCount(args);
break; break;
@ -407,11 +387,6 @@ int SurfaceTextureClient::dispatchSetCrop(va_list args) {
return setCrop(reinterpret_cast<Rect const*>(rect)); return setCrop(reinterpret_cast<Rect const*>(rect));
} }
int SurfaceTextureClient::dispatchSetPostTransformCrop(va_list args) {
android_native_rect_t const* rect = va_arg(args, android_native_rect_t*);
return setPostTransformCrop(reinterpret_cast<Rect const*>(rect));
}
int SurfaceTextureClient::dispatchSetBufferCount(va_list args) { int SurfaceTextureClient::dispatchSetBufferCount(va_list args) {
size_t bufferCount = va_arg(args, size_t); size_t bufferCount = va_arg(args, size_t);
return setBufferCount(bufferCount); return setBufferCount(bufferCount);
@ -501,7 +476,6 @@ int SurfaceTextureClient::disconnect(int api) {
mReqHeight = 0; mReqHeight = 0;
mReqUsage = 0; mReqUsage = 0;
mCrop.clear(); mCrop.clear();
mCropNeedsTransform = false;
mScalingMode = NATIVE_WINDOW_SCALING_MODE_FREEZE; mScalingMode = NATIVE_WINDOW_SCALING_MODE_FREEZE;
mTransform = 0; mTransform = 0;
if (api == NATIVE_WINDOW_API_CPU) { if (api == NATIVE_WINDOW_API_CPU) {
@ -535,27 +509,6 @@ int SurfaceTextureClient::setCrop(Rect const* rect)
Mutex::Autolock lock(mMutex); Mutex::Autolock lock(mMutex);
mCrop = realRect; mCrop = realRect;
mCropNeedsTransform = false;
return NO_ERROR;
}
int SurfaceTextureClient::setPostTransformCrop(Rect const* rect)
{
ATRACE_CALL();
Rect realRect;
if (rect == NULL || rect->isEmpty()) {
realRect.clear();
} else {
realRect = *rect;
}
ALOGV("SurfaceTextureClient::setPostTransformCrop rect=[%d %d %d %d]",
realRect.left, realRect.top, realRect.right, realRect.bottom);
Mutex::Autolock lock(mMutex);
mCrop = realRect;
mCropNeedsTransform = true;
return NO_ERROR; return NO_ERROR;
} }

View File

@ -442,50 +442,6 @@ TEST_F(SurfaceTextureClientTest, SurfaceTextureSyncModeMinUndequeued) {
ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[2])); ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[2]));
} }
TEST_F(SurfaceTextureClientTest, SetPostTransformCropUntransforms) {
android_native_rect_t rect = {1, 5, 4, 14};
native_window_set_post_transform_crop(mANW.get(), &rect);
uint32_t xforms[] = {
HAL_TRANSFORM_FLIP_H,
HAL_TRANSFORM_FLIP_V,
HAL_TRANSFORM_ROT_90,
HAL_TRANSFORM_ROT_180,
HAL_TRANSFORM_ROT_270,
};
Rect expectedRects[] = {
Rect(4, 5, 7, 14), // HAL_TRANSFORM_FLIP_H
Rect(1, 2, 4, 11), // HAL_TRANSFORM_FLIP_V
Rect(5, 4, 14, 7), // HAL_TRANSFORM_ROT_90
Rect(4, 2, 7, 11), // HAL_TRANSFORM_ROT_180
Rect(2, 1, 11, 4), // HAL_TRANSFORM_ROT_270
};
for (size_t i = 0; i < sizeof(xforms)/sizeof(xforms[0]); i++) {
SCOPED_TRACE(String8::format("xform=%#x", xforms[i]).string());
int w = 8, h = 16;
if (xforms[i] & HAL_TRANSFORM_ROT_90) {
w = 16;
h = 8;
}
ASSERT_EQ(OK, native_window_set_buffers_transform(mANW.get(), xforms[i]));
ASSERT_EQ(OK, native_window_set_buffers_dimensions(mANW.get(), w, h));
android_native_buffer_t* buf;
ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf));
ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf));
ASSERT_EQ(OK, mST->updateTexImage());
Rect crop = mST->getCurrentCrop();
EXPECT_EQ(expectedRects[i].left, crop.left);
EXPECT_EQ(expectedRects[i].top, crop.top);
EXPECT_EQ(expectedRects[i].right, crop.right);
EXPECT_EQ(expectedRects[i].bottom, crop.bottom);
}
}
TEST_F(SurfaceTextureClientTest, SetCropCropsCrop) { TEST_F(SurfaceTextureClientTest, SetCropCropsCrop) {
android_native_rect_t rect = {-2, -13, 40, 18}; android_native_rect_t rect = {-2, -13, 40, 18};
native_window_set_crop(mANW.get(), &rect); native_window_set_crop(mANW.get(), &rect);

View File

@ -528,7 +528,6 @@ void Layer::lockPageFlip(bool& recomputeVisibleRegions)
mCurrentTransform = transform; mCurrentTransform = transform;
mCurrentScalingMode = scalingMode; mCurrentScalingMode = scalingMode;
mFlinger->invalidateHwcGeometry(); mFlinger->invalidateHwcGeometry();
recomputeVisibleRegions = true;
} }
uint32_t bufWidth = mActiveBuffer->getWidth(); uint32_t bufWidth = mActiveBuffer->getWidth();
@ -537,7 +536,6 @@ void Layer::lockPageFlip(bool& recomputeVisibleRegions)
if (bufWidth != uint32_t(oldActiveBuffer->width) || if (bufWidth != uint32_t(oldActiveBuffer->width) ||
bufHeight != uint32_t(oldActiveBuffer->height)) { bufHeight != uint32_t(oldActiveBuffer->height)) {
mFlinger->invalidateHwcGeometry(); mFlinger->invalidateHwcGeometry();
recomputeVisibleRegions = true;
} }
} }