Foundation for tiling optimization

Change-Id: I4db32a4749f196472ba0dde7e102439d2ba4a3a7
diff --git a/libs/hwui/Extensions.h b/libs/hwui/Extensions.h
index fb945a8..bdaa3cc 100644
--- a/libs/hwui/Extensions.h
+++ b/libs/hwui/Extensions.h
@@ -65,11 +65,13 @@
         mHasDiscardFramebuffer = hasExtension("GL_EXT_discard_framebuffer");
         mHasDebugMarker = hasExtension("GL_EXT_debug_marker");
         mHasDebugLabel = hasExtension("GL_EXT_debug_label");
+        mHasTiledRendering = hasExtension("GL_QCOM_tiled_rendering");
 
-        // We don't need to copy the string, the OpenGL ES spec
-        // guarantees the result of glGetString to point to a
-        // static string as long as our OpenGL context is valid
-        mExtensions = buffer;
+        mExtensions = strdup(buffer);
+    }
+
+    ~Extensions() {
+        free(mExtensions);
     }
 
     inline bool hasNPot() const { return mHasNPot; }
@@ -77,6 +79,7 @@
     inline bool hasDiscardFramebuffer() const { return mHasDiscardFramebuffer; }
     inline bool hasDebugMarker() const { return mHasDebugMarker; }
     inline bool hasDebugLabel() const { return mHasDebugLabel; }
+    inline bool hasTiledRendering() const { return mHasTiledRendering; }
 
     bool hasExtension(const char* extension) const {
         const String8 s(extension);
@@ -90,13 +93,14 @@
 private:
     SortedVector<String8> mExtensionList;
 
-    const char* mExtensions;
+    char* mExtensions;
 
     bool mHasNPot;
     bool mHasFramebufferFetch;
     bool mHasDiscardFramebuffer;
     bool mHasDebugMarker;
     bool mHasDebugLabel;
+    bool mHasTiledRendering;
 }; // class Extensions
 
 }; // namespace uirenderer