| 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 #ifndef BENCH_GL_MAIN_H_ | 5 #ifndef BENCH_GL_MAIN_H_ |
| 6 #define BENCH_GL_MAIN_H_ | 6 #define BENCH_GL_MAIN_H_ |
| 7 | 7 |
| 8 #include <sys/time.h> | 8 #include <sys/time.h> |
| 9 | 9 |
| 10 #ifdef USE_GLES | 10 #ifdef USE_GLES |
| 11 #include <EGL/egl.h> | 11 #include <EGL/egl.h> |
| 12 #include <GLES/gl.h> | 12 #include <GLES/gl.h> |
| 13 #else | 13 #else |
| 14 #include <GL/gl.h> | 14 #include <GL/gl.h> |
| 15 #include <GL/glx.h> |
| 15 | 16 |
| 16 #define LIST_PROC_FUNCTIONS(F) \ | 17 #define LIST_PROC_FUNCTIONS(F) \ |
| 17 F(glAttachShader, PFNGLATTACHSHADERPROC) \ | 18 F(glAttachShader, PFNGLATTACHSHADERPROC) \ |
| 18 F(glBindBuffer, PFNGLBINDBUFFERPROC) \ | 19 F(glBindBuffer, PFNGLBINDBUFFERPROC) \ |
| 19 F(glBufferData, PFNGLBUFFERDATAPROC) \ | 20 F(glBufferData, PFNGLBUFFERDATAPROC) \ |
| 20 F(glCompileShader, PFNGLCOMPILESHADERPROC) \ | 21 F(glCompileShader, PFNGLCOMPILESHADERPROC) \ |
| 21 F(glCreateProgram, PFNGLCREATEPROGRAMPROC) \ | 22 F(glCreateProgram, PFNGLCREATEPROGRAMPROC) \ |
| 22 F(glCreateShader, PFNGLCREATESHADERPROC) \ | 23 F(glCreateShader, PFNGLCREATESHADERPROC) \ |
| 23 F(glDeleteBuffers, PFNGLDELETEBUFFERSPROC) \ | 24 F(glDeleteBuffers, PFNGLDELETEBUFFERSPROC) \ |
| 24 F(glDeleteProgram, PFNGLDELETEPROGRAMPROC) \ | 25 F(glDeleteProgram, PFNGLDELETEPROGRAMPROC) \ |
| 25 F(glDeleteShader, PFNGLDELETESHADERPROC) \ | 26 F(glDeleteShader, PFNGLDELETESHADERPROC) \ |
| 26 F(glEnableVertexAttribArray, PFNGLENABLEVERTEXATTRIBARRAYPROC) \ | 27 F(glEnableVertexAttribArray, PFNGLENABLEVERTEXATTRIBARRAYPROC) \ |
| 27 F(glGenBuffers, PFNGLGENBUFFERSPROC) \ | 28 F(glGenBuffers, PFNGLGENBUFFERSPROC) \ |
| 28 F(glGetAttribLocation, PFNGLGETATTRIBLOCATIONPROC) \ | 29 F(glGetAttribLocation, PFNGLGETATTRIBLOCATIONPROC) \ |
| 29 F(glGetInfoLogARB, PFNGLGETPROGRAMINFOLOGPROC) \ | 30 F(glGetInfoLogARB, PFNGLGETPROGRAMINFOLOGPROC) \ |
| 30 F(glGetUniformLocation, PFNGLGETUNIFORMLOCATIONPROC) \ | 31 F(glGetUniformLocation, PFNGLGETUNIFORMLOCATIONPROC) \ |
| 31 F(glLinkProgram, PFNGLLINKPROGRAMPROC) \ | 32 F(glLinkProgram, PFNGLLINKPROGRAMPROC) \ |
| 32 F(glShaderSource, PFNGLSHADERSOURCEPROC) \ | 33 F(glShaderSource, PFNGLSHADERSOURCEPROC) \ |
| 33 F(glUniform1f, PFNGLUNIFORM1FPROC) \ | 34 F(glUniform1f, PFNGLUNIFORM1FPROC) \ |
| 34 F(glUniform1i, PFNGLUNIFORM1IPROC) \ | 35 F(glUniform1i, PFNGLUNIFORM1IPROC) \ |
| 35 F(glUseProgram, PFNGLUSEPROGRAMPROC) \ | 36 F(glUseProgram, PFNGLUSEPROGRAMPROC) \ |
| 36 F(glVertexAttribPointer, PFNGLVERTEXATTRIBPOINTERPROC) | 37 F(glVertexAttribPointer, PFNGLVERTEXATTRIBPOINTERPROC) \ |
| 38 F(glXSwapIntervalSGI, PFNGLXSWAPINTERVALSGIPROC) |
| 37 | 39 |
| 38 #define F(fun, type) extern type fun; | 40 #define F(fun, type) extern type fun; |
| 39 LIST_PROC_FUNCTIONS(F) | 41 LIST_PROC_FUNCTIONS(F) |
| 40 #undef F | 42 #undef F |
| 41 | 43 |
| 42 #endif | 44 #endif |
| 43 | 45 |
| 44 inline uint64_t GetUTime() { | 46 inline uint64_t GetUTime() { |
| 45 struct timeval tv; | 47 struct timeval tv; |
| 46 gettimeofday(&tv, NULL); | 48 gettimeofday(&tv, NULL); |
| 47 return static_cast<uint64_t>(tv.tv_usec) + | 49 return static_cast<uint64_t>(tv.tv_usec) + |
| 48 1000000ULL*static_cast<uint64_t>(tv.tv_sec); | 50 1000000ULL*static_cast<uint64_t>(tv.tv_sec); |
| 49 } | 51 } |
| 50 | 52 |
| 51 extern GLint g_width; | 53 extern GLint g_width; |
| 52 extern GLint g_height; | 54 extern GLint g_height; |
| 55 extern bool g_override_redirect; |
| 53 | 56 |
| 54 bool Init(); | 57 bool Init(); |
| 55 bool InitContext(); | 58 bool InitContext(); |
| 56 void DestroyContext(); | 59 void DestroyContext(); |
| 57 void SwapBuffers(); | 60 void SwapBuffers(); |
| 61 bool SwapInterval(int interval); |
| 58 | 62 |
| 59 // BenchFunc functions are assumed to execute an operation iter times. See | 63 // BenchFunc functions are assumed to execute an operation iter times. See |
| 60 // Bench for a detailed explanation. | 64 // Bench for a detailed explanation. |
| 61 typedef void (*BenchFunc)(int iter); | 65 typedef void (*BenchFunc)(int iter); |
| 62 | 66 |
| 63 uint64_t TimeBench(BenchFunc func, int iter); | 67 uint64_t TimeBench(BenchFunc func, int iter); |
| 64 | 68 |
| 65 #define MAX_ITERATION_DURATION_MS 100000 | 69 #define MAX_ITERATION_DURATION_MS 100000 |
| 66 // Runs func passing it sequential powers of two (8, 16, 32,...) recording time | 70 // Runs func passing it sequential powers of two (8, 16, 32,...) recording time |
| 67 // it took. The data is then fitted linearly, obtaining slope and bias such | 71 // it took. The data is then fitted linearly, obtaining slope and bias such |
| 68 // that: | 72 // that: |
| 69 // time it took to run x iterations = slope * x + bias | 73 // time it took to run x iterations = slope * x + bias |
| 70 // Returns false if one iteration of the test takes longer than | 74 // Returns false if one iteration of the test takes longer than |
| 71 // MAX_ITERATION_LENGTH_MS. The test is then assumed too slow to provide | 75 // MAX_ITERATION_LENGTH_MS. The test is then assumed too slow to provide |
| 72 // meaningful results. | 76 // meaningful results. |
| 73 bool Bench(BenchFunc func, float *slope, int64_t *bias); | 77 bool Bench(BenchFunc func, float *slope, int64_t *bias); |
| 74 | 78 |
| 75 void *MmapFile(const char *name, size_t *length); | 79 void *MmapFile(const char *name, size_t *length); |
| 76 | 80 |
| 77 #endif // BENCH_GL_MAIN_H_ | 81 #endif // BENCH_GL_MAIN_H_ |
| OLD | NEW |