Revert "fix [2122448] android_native_window_t::setUsage() only reallocates the first buffer"

This reverts commit 486aa963b63e20b7910e1004cebb4f0afabbd80f.
diff --git a/include/ui/Surface.h b/include/ui/Surface.h
index 2cedeb6..118fb83 100644
--- a/include/ui/Surface.h
+++ b/include/ui/Surface.h
@@ -212,7 +212,7 @@
 
     
     void setUsage(uint32_t reqUsage);
-    uint32_t getUsage() const;
+    bool getUsage(uint32_t* usage);
     
     // constants
     sp<SurfaceComposerClient>   mClient;
@@ -227,6 +227,7 @@
     // protected by mSurfaceLock
     Rect                        mSwapRectangle;
     uint32_t                    mUsage;
+    int32_t                     mUsageChanged;
     
     // protected by mSurfaceLock. These are also used from lock/unlock
     // but in that case, they must be called form the same thread.
diff --git a/libs/ui/Surface.cpp b/libs/ui/Surface.cpp
index 4dab3a2..c3fbea2 100644
--- a/libs/ui/Surface.cpp
+++ b/libs/ui/Surface.cpp
@@ -361,6 +361,7 @@
     const_cast<uint32_t&>(android_native_window_t::flags) = 0;
     // be default we request a hardware surface
     mUsage = GRALLOC_USAGE_HW_RENDER;
+    mUsageChanged = true;
     mNeedFullUpdate = false;
 }
 
@@ -498,12 +499,13 @@
         return bufIdx;
     }
     
-    const uint32_t usage(getUsage());
+    // FIXME: in case of failure below, we need to undo the dequeue
+    
+    uint32_t usage;
+    const bool usageChanged = getUsage(&usage);
     const sp<SurfaceBuffer>& backBuffer(mBuffers[bufIdx]);
-    if (backBuffer == 0 || 
-        uint32_t(backBuffer->usage) != usage ||
-        mSharedBufferClient->needNewBuffer(bufIdx)) 
-    {
+    if ((backBuffer == 0) || usageChanged || 
+            mSharedBufferClient->needNewBuffer(bufIdx)) {
         err = getBufferLocked(bufIdx, usage);
         LOGE_IF(err, "getBufferLocked(%ld, %08x) failed (%s)",
                 bufIdx, usage, strerror(-err));
@@ -598,13 +600,21 @@
 void Surface::setUsage(uint32_t reqUsage)
 {
     Mutex::Autolock _l(mSurfaceLock);
-    mUsage = reqUsage;
+    if (mUsage != reqUsage) {
+        mUsageChanged = true;
+        mUsage = reqUsage;
+    }
 }
 
-uint32_t Surface::getUsage() const
+bool Surface::getUsage(uint32_t* usage)
 {
     Mutex::Autolock _l(mSurfaceLock);
-    return mUsage;
+    *usage = mUsage;
+    if (mUsageChanged) {
+        mUsageChanged = false;
+        return true;
+    }
+    return false;
 }
 
 // ----------------------------------------------------------------------------