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 3 // found in the LICENSE file. 4 5 #ifndef BENCH_GL_TESTBASE_H_ 6 #define BENCH_GL_TESTBASE_H_ 7 8 #include "base/macros.h" 9 10 #include "main.h" 11 12 #define DISABLE_SOME_TESTS_FOR_INTEL_DRIVER 1 13 14 #define IS_NOT_POWER_OF_2(v) (((v) & ((v) - 1)) && (v)) 15 16 namespace glbench { 17 18 class TestBase; 19 20 // Runs test->TestFunc() passing it sequential powers of two recording time it 21 // took until reaching a minimum amount of testing time. The last two runs are 22 // then averaged. 23 double Bench(TestBase* test); 24 25 // Runs Bench on an instance of TestBase and prints out results. 26 // 27 // coefficient is multiplied (if inverse is false) or divided (if inverse is 28 // true) by the measured unit runtime and the result is printed. 29 // 30 // Examples: 31 // coefficient = width * height (measured in pixels), inverse = true 32 // returns the throughput in megapixels per second; 33 // 34 // coefficient = 1, inverse = false 35 // returns number of operations per second. 36 void RunTest(TestBase* test, 37 const char *name, 38 double coefficient, 39 const int width, 40 const int height, 41 bool inverse); 42 43 class TestBase { 44 public: ~TestBase()45 virtual ~TestBase() {} 46 // Runs the test case n times. 47 virtual bool TestFunc(uint64_t n) = 0; 48 // Main entry point into the test. 49 virtual bool Run() = 0; 50 // Name of test case group 51 virtual const char* Name() const = 0; 52 // Returns true if a test draws some output. 53 // If so, testbase will read back pixels, compute its MD5 hash and optionally 54 // save them to a file on disk. 55 virtual bool IsDrawTest() const = 0; 56 // Name of unit for benchmark score (e.g., mtexel_sec, us, etc.) 57 virtual const char* Unit() const = 0; 58 }; 59 60 // Helper class to time glDrawArrays. 61 class DrawArraysTestFunc : public TestBase { 62 public: ~DrawArraysTestFunc()63 virtual ~DrawArraysTestFunc() {} 64 virtual bool TestFunc(uint64_t); IsDrawTest()65 virtual bool IsDrawTest() const { return true; } Unit()66 virtual const char* Unit() const { return "mpixels_sec"; } 67 68 // Runs the test and reports results in mpixels per second, assuming each 69 // iteration updates the whole window (its size is g_width by g_height). 70 void FillRateTestNormal(const char* name); 71 // Runs the test and reports results in mpixels per second, assuming each 72 // iteration updates a window of width by height pixels. 73 void FillRateTestNormalSubWindow(const char* name, 74 const int width, const int height); 75 // Runs the test three times: with blending on; with depth test enabled and 76 // depth function of GL_NOTEQUAL; with depth function GL_NEVER. Results are 77 // reported as in FillRateTestNormal. 78 void FillRateTestBlendDepth(const char *name); 79 }; 80 81 // Helper class to time glDrawElements. 82 class DrawElementsTestFunc : public TestBase { 83 public: DrawElementsTestFunc()84 DrawElementsTestFunc() : count_(0) {} ~DrawElementsTestFunc()85 virtual ~DrawElementsTestFunc() {} 86 virtual bool TestFunc(uint64_t); IsDrawTest()87 virtual bool IsDrawTest() const { return true; } Unit()88 virtual const char* Unit() const { return "mtri_sec"; } 89 90 protected: 91 // Passed to glDrawElements. 92 GLsizei count_; 93 }; 94 95 } // namespace glbench 96 97 #endif // BENCH_GL_TESTBASE_H_ 98