| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <gflags/gflags.h> |
| 5 #include <stdio.h> | 6 #include <stdio.h> |
| 6 | 7 |
| 8 #include "base/scoped_ptr.h" |
| 9 #include "base/file_util.h" |
| 10 |
| 7 #include "testbase.h" | 11 #include "testbase.h" |
| 12 #include "utils.h" |
| 13 |
| 14 DEFINE_bool(save, false, "save images after each test case"); |
| 15 DEFINE_string(out, "out", "directory to save images"); |
| 8 | 16 |
| 9 namespace glbench { | 17 namespace glbench { |
| 10 | 18 |
| 11 uint64_t TimeTest(TestBase* test, int iter) { | 19 uint64_t TimeTest(TestBase* test, int iter) { |
| 12 SwapBuffers(); | 20 SwapBuffers(); |
| 13 glFinish(); | 21 glFinish(); |
| 14 uint64_t time1 = GetUTime(); | 22 uint64_t time1 = GetUTime(); |
| 15 if (!test->TestFunc(iter)) | 23 if (!test->TestFunc(iter)) |
| 16 return ~0; | 24 return ~0; |
| 17 glFinish(); | 25 glFinish(); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 55 if (count < 2) { | 63 if (count < 2) { |
| 56 *slope = 0.f; | 64 *slope = 0.f; |
| 57 *bias = 0; | 65 *bias = 0; |
| 58 } | 66 } |
| 59 *slope = static_cast<float>(sum_x * sum_y - count * sum_xy) / | 67 *slope = static_cast<float>(sum_x * sum_y - count * sum_xy) / |
| 60 (sum_x * sum_x - count * sum_x2); | 68 (sum_x * sum_x - count * sum_x2); |
| 61 *bias = (sum_x * sum_xy - sum_x2 * sum_y) / (sum_x * sum_x - count * sum_x2); | 69 *bias = (sum_x * sum_xy - sum_x2 * sum_y) / (sum_x * sum_x - count * sum_x2); |
| 62 return true; | 70 return true; |
| 63 } | 71 } |
| 64 | 72 |
| 65 void RunTest(TestBase* test, const char *name, | 73 void SaveImage(const char* name) { |
| 74 const int size = g_width * g_height * 4; |
| 75 scoped_array<char> pixels(new char[size]); |
| 76 glReadPixels(0, 0, g_width, g_height, GL_RGBA, GL_UNSIGNED_BYTE, |
| 77 pixels.get()); |
| 78 FilePath dirname = GetBasePath().Append(FLAGS_out); |
| 79 file_util::CreateDirectory(dirname); |
| 80 FilePath filename = dirname.Append(name); |
| 81 file_util::WriteFile(filename, pixels.get(), size); |
| 82 } |
| 83 |
| 84 void RunTest(TestBase* test, const char* name, |
| 66 float coefficient, bool inverse) { | 85 float coefficient, bool inverse) { |
| 67 float slope; | 86 float slope; |
| 68 int64_t bias; | 87 int64_t bias; |
| 69 | 88 |
| 70 GLenum err = glGetError(); | 89 GLenum err = glGetError(); |
| 71 if (err != 0) { | 90 if (err != 0) { |
| 72 printf("# %s failed, glGetError returned 0x%x.\n", name, err); | 91 printf("# %s failed, glGetError returned 0x%x.\n", name, err); |
| 73 // float() in python will happily parse Nan. | 92 // float() in python will happily parse Nan. |
| 74 printf("%s: Nan\n", name); | 93 printf("%s: Nan\n", name); |
| 75 } else { | 94 } else { |
| 76 if (Bench(test, &slope, &bias)) { | 95 if (Bench(test, &slope, &bias)) { |
| 96 if (FLAGS_save) |
| 97 SaveImage(name); |
| 77 printf("%s: %g\n", name, coefficient * (inverse ? 1.f / slope : slope)); | 98 printf("%s: %g\n", name, coefficient * (inverse ? 1.f / slope : slope)); |
| 78 } else { | 99 } else { |
| 79 printf("# %s is too slow, returning zero.\n", name); | 100 printf("# %s is too slow, returning zero.\n", name); |
| 80 printf("%s: 0\n", name); | 101 printf("%s: 0\n", name); |
| 81 } | 102 } |
| 82 } | 103 } |
| 83 } | 104 } |
| 84 | 105 |
| 85 bool DrawArraysTestFunc::TestFunc(int iter) { | 106 bool DrawArraysTestFunc::TestFunc(int iter) { |
| 86 glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); | 107 glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 133 bool DrawElementsTestFunc::TestFunc(int iter) { | 154 bool DrawElementsTestFunc::TestFunc(int iter) { |
| 134 glDrawElements(GL_TRIANGLES, count_, GL_UNSIGNED_INT, 0); | 155 glDrawElements(GL_TRIANGLES, count_, GL_UNSIGNED_INT, 0); |
| 135 glFlush(); | 156 glFlush(); |
| 136 for (int i = 0 ; i < iter-1; ++i) { | 157 for (int i = 0 ; i < iter-1; ++i) { |
| 137 glDrawElements(GL_TRIANGLES, count_, GL_UNSIGNED_INT, 0); | 158 glDrawElements(GL_TRIANGLES, count_, GL_UNSIGNED_INT, 0); |
| 138 } | 159 } |
| 139 return true; | 160 return true; |
| 140 } | 161 } |
| 141 | 162 |
| 142 } // namespace glbench | 163 } // namespace glbench |
| OLD | NEW |