Merge "Workaround for add_tid_to_cgroup failed to write" into jb-dev
diff --git a/libs/gui/BufferQueue.cpp b/libs/gui/BufferQueue.cpp
index e53162b..2d7c89b 100644
--- a/libs/gui/BufferQueue.cpp
+++ b/libs/gui/BufferQueue.cpp
@@ -72,6 +72,15 @@
     return android_atomic_inc(&globalCounter);
 }
 
+static const char* scalingModeName(int scalingMode) {
+    switch (scalingMode) {
+        case NATIVE_WINDOW_SCALING_MODE_FREEZE: return "FREEZE";
+        case NATIVE_WINDOW_SCALING_MODE_SCALE_TO_WINDOW: return "SCALE_TO_WINDOW";
+        case NATIVE_WINDOW_SCALING_MODE_SCALE_CROP: return "SCALE_CROP";
+        default: return "Unknown";
+    }
+}
+
 BufferQueue::BufferQueue(  bool allowSynchronousMode, int bufferCount ) :
     mDefaultWidth(1),
     mDefaultHeight(1),
@@ -543,8 +552,10 @@
 
     input.deflate(&timestamp, &crop, &scalingMode, &transform);
 
-    ST_LOGV("queueBuffer: slot=%d time=%lld crop=[%d,%d,%d,%d]",
-            buf, timestamp, crop.left, crop.top, crop.right, crop.bottom);
+    ST_LOGV("queueBuffer: slot=%d time=%#llx crop=[%d,%d,%d,%d] tr=%#x "
+            "scale=%s",
+            buf, timestamp, crop.left, crop.top, crop.right, crop.bottom,
+            transform, scalingModeName(scalingMode));
 
     sp<ConsumerListener> listener;
 
@@ -611,7 +622,6 @@
             case NATIVE_WINDOW_SCALING_MODE_FREEZE:
             case NATIVE_WINDOW_SCALING_MODE_SCALE_TO_WINDOW:
             case NATIVE_WINDOW_SCALING_MODE_SCALE_CROP:
-            case NATIVE_WINDOW_SCALING_MODE_NO_SCALE_CROP:
                 break;
             default:
                 ST_LOGE("unknown scaling mode: %d (ignoring)", scalingMode);
@@ -796,11 +806,12 @@
         snprintf(buffer, SIZE,
                 "%s%s[%02d] "
                 "state=%-8s, crop=[%d,%d,%d,%d], "
-                "transform=0x%02x, timestamp=%lld",
+                "xform=0x%02x, time=%#llx, scale=%s",
                 prefix, (slot.mBufferState == BufferSlot::ACQUIRED)?">":" ", i,
                 stateName(slot.mBufferState),
                 slot.mCrop.left, slot.mCrop.top, slot.mCrop.right,
-                slot.mCrop.bottom, slot.mTransform, slot.mTimestamp
+                slot.mCrop.bottom, slot.mTransform, slot.mTimestamp,
+                scalingModeName(slot.mScalingMode)
         );
         result.append(buffer);
 
diff --git a/libs/gui/SurfaceTextureClient.cpp b/libs/gui/SurfaceTextureClient.cpp
index 9c3e28d..5d3bd1a 100644
--- a/libs/gui/SurfaceTextureClient.cpp
+++ b/libs/gui/SurfaceTextureClient.cpp
@@ -522,7 +522,6 @@
 int SurfaceTextureClient::setCrop(Rect const* rect)
 {
     ATRACE_CALL();
-    ALOGV("SurfaceTextureClient::setCrop");
 
     Rect realRect;
     if (rect == NULL || rect->isEmpty()) {
@@ -531,6 +530,9 @@
         realRect = *rect;
     }
 
+    ALOGV("SurfaceTextureClient::setCrop rect=[%d %d %d %d]",
+            realRect.left, realRect.top, realRect.right, realRect.bottom);
+
     Mutex::Autolock lock(mMutex);
     mCrop = realRect;
     mCropNeedsTransform = false;
@@ -540,7 +542,6 @@
 int SurfaceTextureClient::setPostTransformCrop(Rect const* rect)
 {
     ATRACE_CALL();
-    ALOGV("SurfaceTextureClient::setPostTransformCrop");
 
     Rect realRect;
     if (rect == NULL || rect->isEmpty()) {
@@ -549,6 +550,9 @@
         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;
@@ -627,7 +631,6 @@
         case NATIVE_WINDOW_SCALING_MODE_FREEZE:
         case NATIVE_WINDOW_SCALING_MODE_SCALE_TO_WINDOW:
         case NATIVE_WINDOW_SCALING_MODE_SCALE_CROP:
-        case NATIVE_WINDOW_SCALING_MODE_NO_SCALE_CROP:
             break;
         default:
             ALOGE("unknown scaling mode: %d", mode);
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp
index e936188..6bc80ee 100644
--- a/services/surfaceflinger/Layer.cpp
+++ b/services/surfaceflinger/Layer.cpp
@@ -541,6 +541,7 @@
             mCurrentTransform = transform;
             mCurrentScalingMode = scalingMode;
             mFlinger->invalidateHwcGeometry();
+            recomputeVisibleRegions = true;
         }
 
         uint32_t bufWidth  = mActiveBuffer->getWidth();
@@ -549,6 +550,7 @@
             if (bufWidth != uint32_t(oldActiveBuffer->width) ||
                 bufHeight != uint32_t(oldActiveBuffer->height)) {
                 mFlinger->invalidateHwcGeometry();
+                recomputeVisibleRegions = true;
             }
         }