aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/gl/GrGLExtensions.cpp
diff options
context:
space:
mode:
authorGravatar bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-02-27 19:07:32 +0000
committerGravatar bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-02-27 19:07:32 +0000
commitff436617d8f11297f0eff93ddd49fb9022d0843b (patch)
treeede5235583e98991ed75f5fece72137ad0711115 /src/gpu/gl/GrGLExtensions.cpp
parentf0e92f3814677084e8d61f6c83f5625fa6c4780c (diff)
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
Diffstat (limited to 'src/gpu/gl/GrGLExtensions.cpp')
-rw-r--r--src/gpu/gl/GrGLExtensions.cpp25
1 files changed, 17 insertions, 8 deletions
diff --git a/src/gpu/gl/GrGLExtensions.cpp b/src/gpu/gl/GrGLExtensions.cpp
index 9f31a054cc..2d8741479b 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 @@ bool GrGLExtensions::init(GrGLBinding binding,
}
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;
}