fix [2167050] glTexImage2D code path buggy in SurfaceFlinger

When EGLImage extension is not available, SurfaceFlinger will fallback to using
glTexImage2D and glTexSubImage2D instead, which requires 50% more memory and an
extra copy. However this code path has never been exercised and had some bugs
which this patch fix.

Mainly the scale factor wasn't computed right when falling back on glDrawElements.
We also fallback to this mode of operation if a buffer doesn't have the adequate
usage bits for EGLImage usage.

This changes only code that is currently not executed. Some refactoring was needed to
keep the change clean. This doesn't change anything functionaly.
diff --git a/libs/ui/ISurface.cpp b/libs/ui/ISurface.cpp
index a2dbe7f..4fb38ed 100644
--- a/libs/ui/ISurface.cpp
+++ b/libs/ui/ISurface.cpp
@@ -27,7 +27,7 @@
 #include <ui/Overlay.h>
 #include <ui/Surface.h>
 
-#include <private/ui/SurfaceBuffer.h>
+#include <ui/GraphicBuffer.h>
 
 namespace android {
 
@@ -71,14 +71,14 @@
     {
     }
 
-    virtual sp<SurfaceBuffer> requestBuffer(int bufferIdx, int usage)
+    virtual sp<GraphicBuffer> requestBuffer(int bufferIdx, int usage)
     {
         Parcel data, reply;
         data.writeInterfaceToken(ISurface::getInterfaceDescriptor());
         data.writeInt32(bufferIdx);
         data.writeInt32(usage);
         remote()->transact(REQUEST_BUFFER, data, &reply);
-        sp<SurfaceBuffer> buffer = new SurfaceBuffer(reply);
+        sp<GraphicBuffer> buffer = new GraphicBuffer(reply);
         return buffer;
     }
 
@@ -139,8 +139,8 @@
             CHECK_INTERFACE(ISurface, data, reply);
             int bufferIdx = data.readInt32();
             int usage = data.readInt32();
-            sp<SurfaceBuffer> buffer(requestBuffer(bufferIdx, usage));
-            return SurfaceBuffer::writeToParcel(reply, buffer.get());
+            sp<GraphicBuffer> buffer(requestBuffer(bufferIdx, usage));
+            return GraphicBuffer::writeToParcel(reply, buffer.get());
         }
         case REGISTER_BUFFERS: {
             CHECK_INTERFACE(ISurface, data, reply);