Index: client/deps/glbench/src/main.cc |
diff --git a/client/deps/glbench/src/main.cc b/client/deps/glbench/src/main.cc |
index d11265828bc7d9dbca72290f3e3b0a65b890e1ee..d77748105d633764db69d08a4a6d91d916db2d4c 100644 |
--- a/client/deps/glbench/src/main.cc |
+++ b/client/deps/glbench/src/main.cc |
@@ -2,60 +2,55 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include <fcntl.h> |
+#include <gflags/gflags.h> |
#include <stdio.h> |
#include <stdlib.h> |
-#include <string.h> |
-#include <sys/mman.h> |
#include "base/logging.h" |
+#include "base/string_util.h" |
#include "main.h" |
#include "utils.h" |
-#include "yuv2rgb.h" |
#include "all_tests.h" |
#include "testbase.h" |
+using std::string; |
+using std::vector; |
-const int enabled_tests_max = 8; |
-// TODO: fix enabled_tests. |
-const char *enabled_tests[enabled_tests_max+1] = {NULL}; |
-int seconds_to_run = 0; |
- |
- |
-// TODO: use proper command line parsing library. |
-static void ParseArgs(int argc, char *argv[]) { |
- const char **enabled_tests_ptr = enabled_tests; |
- bool test_name_arg = false; |
- bool duration_arg = false; |
- for (int i = 0; i < argc; i++) { |
- if (test_name_arg) { |
- test_name_arg = false; |
- *enabled_tests_ptr++ = argv[i]; |
- if (enabled_tests_ptr - enabled_tests >= enabled_tests_max) |
- break; |
- } else if (duration_arg) { |
- duration_arg = false; |
- seconds_to_run = atoi(argv[i]); |
- } else if (strcmp("-t", argv[i]) == 0) { |
- test_name_arg = true; |
- } else if (strcmp("-d", argv[i]) == 0) { |
- duration_arg = true; |
- } |
+DEFINE_int32(duration, 0, "run tests in a loop for at least this many seconds"); |
+DEFINE_string(tests, "", "colon-separated list of tests to run; " |
+ "all tests if omitted"); |
+ |
+ |
+bool test_is_enabled(glbench::TestBase* test, |
+ const vector<string>& enabled_tests) { |
+ if (enabled_tests.empty()) |
+ return true; |
+ |
+ const char* test_name = test->Name(); |
+ for (vector<string>::const_iterator i = enabled_tests.begin(); |
+ i != enabled_tests.end(); ++i) { |
+ // This is not very precise, but will do until there's a need for something |
+ // more flexible. |
+ if (strstr(test_name, i->c_str())) |
+ return true; |
} |
- *enabled_tests_ptr++ = NULL; |
-} |
+ return false; |
+} |
int main(int argc, char *argv[]) { |
SetBasePathFromArgv0(argv[0], "src"); |
- ParseArgs(argc, argv); |
+ google::ParseCommandLineFlags(&argc, &argv, true); |
if (!Init()) { |
printf("# Failed to initialize.\n"); |
return 1; |
} |
+ vector<string> enabled_tests; |
+ SplitString(FLAGS_tests, ':', &enabled_tests); |
+ |
glbench::TestBase* tests[] = { |
glbench::GetSwapTest(), |
glbench::GetClearTest(), |
@@ -72,10 +67,18 @@ int main(int argc, char *argv[]) { |
glbench::GetTextureUpdateTest(), |
}; |
+ uint64_t done = GetUTime() + 1000000ULL * FLAGS_duration; |
+ do { |
+ for (unsigned int i = 0; i < arraysize(tests); i++) { |
+ if (!test_is_enabled(tests[i], enabled_tests)) |
+ continue; |
+ InitContext(); |
+ tests[i]->Run(); |
+ DestroyContext(); |
+ } |
+ } while (GetUTime() < done); |
+ |
for (unsigned int i = 0; i < arraysize(tests); i++) { |
- InitContext(); |
- tests[i]->Run(); |
- DestroyContext(); |
delete tests[i]; |
tests[i] = NULL; |
} |