Sort GL extension strings and search to find.
Review URL: https://codereview.chromium.org/12316141

git-svn-id: http://skia.googlecode.com/svn/trunk@7889 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/gl/GrGLExtensions.cpp b/src/gpu/gl/GrGLExtensions.cpp
index 9f31a05..2d87414 100644
--- a/src/gpu/gl/GrGLExtensions.cpp
+++ b/src/gpu/gl/GrGLExtensions.cpp
@@ -9,6 +9,15 @@
 #include "gl/GrGLDefines.h"
 #include "gl/GrGLUtil.h"
 
+#include "SkTSearch.h"
+#include "SkTSort.h"
+
+namespace {
+inline int extension_compare(const SkString* a, const SkString* b) {
+    return strcmp(a->c_str(), b->c_str());
+}
+}
+
 bool GrGLExtensions::init(GrGLBinding binding,
                           GrGLGetStringProc getString,
                           GrGLGetStringiProc getStringi,
@@ -64,16 +73,16 @@
         }
         GrAssert(i == extensionCnt);
     }
+    SkTSearchCompareLTFunctor<SkString, extension_compare> cmp;
+    SkTQSort(&fStrings.front(), &fStrings.back(), cmp);
     return true;
 }
 
 bool GrGLExtensions::has(const char* ext) const {
-    // TODO: Sort the extensions and binary search.
-    int count = fStrings.count();
-    for (int i = 0; i < count; ++i) {
-        if (fStrings[i].equals(ext)) {
-            return true;
-        }
-    }
-    return false;
+    SkString extensionStr(ext);
+    int idx = SkTSearch<SkString, extension_compare>(&fStrings.front(),
+                                                     fStrings.count(),
+                                                     extensionStr,
+                                                     sizeof(SkString));
+    return idx >= 0;
 }