xref: /aosp_15_r20/external/angle/src/tests/perf_tests/glmark2Benchmark.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2019 The ANGLE Project Authors. All rights reserved.
3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file.
5*8975f5c5SAndroid Build Coastguard Worker //
6*8975f5c5SAndroid Build Coastguard Worker // glmark2Benchmark:
7*8975f5c5SAndroid Build Coastguard Worker //   Runs the glmark2 benchmark.
8*8975f5c5SAndroid Build Coastguard Worker //
9*8975f5c5SAndroid Build Coastguard Worker 
10*8975f5c5SAndroid Build Coastguard Worker #include <gtest/gtest.h>
11*8975f5c5SAndroid Build Coastguard Worker 
12*8975f5c5SAndroid Build Coastguard Worker #include <stdio.h>
13*8975f5c5SAndroid Build Coastguard Worker #include <sstream>
14*8975f5c5SAndroid Build Coastguard Worker 
15*8975f5c5SAndroid Build Coastguard Worker #include "../perf_tests/third_party/perf/perf_result_reporter.h"
16*8975f5c5SAndroid Build Coastguard Worker #include "ANGLEPerfTestArgs.h"
17*8975f5c5SAndroid Build Coastguard Worker #include "common/platform.h"
18*8975f5c5SAndroid Build Coastguard Worker #include "common/string_utils.h"
19*8975f5c5SAndroid Build Coastguard Worker #include "common/system_utils.h"
20*8975f5c5SAndroid Build Coastguard Worker #include "test_utils/angle_test_configs.h"
21*8975f5c5SAndroid Build Coastguard Worker #include "test_utils/angle_test_instantiate.h"
22*8975f5c5SAndroid Build Coastguard Worker #include "util/test_utils.h"
23*8975f5c5SAndroid Build Coastguard Worker 
24*8975f5c5SAndroid Build Coastguard Worker using namespace angle;
25*8975f5c5SAndroid Build Coastguard Worker 
26*8975f5c5SAndroid Build Coastguard Worker namespace
27*8975f5c5SAndroid Build Coastguard Worker {
28*8975f5c5SAndroid Build Coastguard Worker 
29*8975f5c5SAndroid Build Coastguard Worker struct BenchmarkInfo
30*8975f5c5SAndroid Build Coastguard Worker {
31*8975f5c5SAndroid Build Coastguard Worker     const char *glmark2Config;
32*8975f5c5SAndroid Build Coastguard Worker     const char *name;
33*8975f5c5SAndroid Build Coastguard Worker };
34*8975f5c5SAndroid Build Coastguard Worker 
35*8975f5c5SAndroid Build Coastguard Worker // Each glmark2 scene is individually benchmarked.  If glmark2 is run without a specific benchmark,
36*8975f5c5SAndroid Build Coastguard Worker // it can produce an aggregate score, which is not interesting at the moment.  Adding an empty
37*8975f5c5SAndroid Build Coastguard Worker // string ("") to this list will enable a test where glmark2 is run with the default scenes and the
38*8975f5c5SAndroid Build Coastguard Worker // score for each test as well as the overall score is output.
39*8975f5c5SAndroid Build Coastguard Worker constexpr BenchmarkInfo kBenchmarks[] = {
40*8975f5c5SAndroid Build Coastguard Worker     {"build:use-vbo=false", "build"},
41*8975f5c5SAndroid Build Coastguard Worker     {"build:use-vbo=true", "build_vbo"},
42*8975f5c5SAndroid Build Coastguard Worker     {"texture:texture-filter=nearest", "texture_nearest"},
43*8975f5c5SAndroid Build Coastguard Worker     {"texture:texture-filter=linear", "texture_linear"},
44*8975f5c5SAndroid Build Coastguard Worker     {"texture:texture-filter=mipmap", "texture_mipmap"},
45*8975f5c5SAndroid Build Coastguard Worker     {"shading:shading=gouraud", "shading_gouraud"},
46*8975f5c5SAndroid Build Coastguard Worker     {"shading:shading=blinn-phong-inf", "shading_blinn_phong"},
47*8975f5c5SAndroid Build Coastguard Worker     {"shading:shading=phong", "shading_phong"},
48*8975f5c5SAndroid Build Coastguard Worker     {"shading:shading=cel", "shading_cel"},
49*8975f5c5SAndroid Build Coastguard Worker     {"bump:bump-render=high-poly", "bump_high_poly"},
50*8975f5c5SAndroid Build Coastguard Worker     {"bump:bump-render=normals", "bump_normals"},
51*8975f5c5SAndroid Build Coastguard Worker     {"bump:bump-render=height", "bump_height"},
52*8975f5c5SAndroid Build Coastguard Worker     {"effect2d:kernel=0,1,0;1,-4,1;0,1,0;", "effect2d_edge"},
53*8975f5c5SAndroid Build Coastguard Worker     {"effect2d:kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;", "effect2d_blur"},
54*8975f5c5SAndroid Build Coastguard Worker     {"pulsar:light=false:quads=5:texture=false", "pulsar"},
55*8975f5c5SAndroid Build Coastguard Worker     {"desktop:blur-radius=5:effect=blur:passes=1:separable=true:windows=4", "desktop_blur"},
56*8975f5c5SAndroid Build Coastguard Worker     {"desktop:effect=shadow:windows=4", "desktop_shadow"},
57*8975f5c5SAndroid Build Coastguard Worker     {"buffer:columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method="
58*8975f5c5SAndroid Build Coastguard Worker      "map",
59*8975f5c5SAndroid Build Coastguard Worker      "buffer_map"},
60*8975f5c5SAndroid Build Coastguard Worker     {"buffer:columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method="
61*8975f5c5SAndroid Build Coastguard Worker      "subdata",
62*8975f5c5SAndroid Build Coastguard Worker      "buffer_subdata"},
63*8975f5c5SAndroid Build Coastguard Worker     {"buffer:columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method="
64*8975f5c5SAndroid Build Coastguard Worker      "map",
65*8975f5c5SAndroid Build Coastguard Worker      "buffer_map_interleave"},
66*8975f5c5SAndroid Build Coastguard Worker     {"ideas:speed=duration", "ideas"},
67*8975f5c5SAndroid Build Coastguard Worker     {"jellyfish", "jellyfish"},
68*8975f5c5SAndroid Build Coastguard Worker     {"terrain", "terrain"},
69*8975f5c5SAndroid Build Coastguard Worker     {"shadow", "shadow"},
70*8975f5c5SAndroid Build Coastguard Worker     {"refract", "refract"},
71*8975f5c5SAndroid Build Coastguard Worker     {"conditionals:fragment-steps=0:vertex-steps=0", "conditionals"},
72*8975f5c5SAndroid Build Coastguard Worker     {"conditionals:fragment-steps=5:vertex-steps=0", "conditionals_fragment"},
73*8975f5c5SAndroid Build Coastguard Worker     {"conditionals:fragment-steps=0:vertex-steps=5", "conditionals_vertex"},
74*8975f5c5SAndroid Build Coastguard Worker     {"function:fragment-complexity=low:fragment-steps=5", "function"},
75*8975f5c5SAndroid Build Coastguard Worker     {"function:fragment-complexity=medium:fragment-steps=5", "function_complex"},
76*8975f5c5SAndroid Build Coastguard Worker     {"loop:fragment-loop=false:fragment-steps=5:vertex-steps=5", "loop_no_fsloop"},
77*8975f5c5SAndroid Build Coastguard Worker     {"loop:fragment-steps=5:fragment-uniform=false:vertex-steps=5", "loop_no_uniform"},
78*8975f5c5SAndroid Build Coastguard Worker     {"loop:fragment-steps=5:fragment-uniform=true:vertex-steps=5", "loop"},
79*8975f5c5SAndroid Build Coastguard Worker };
80*8975f5c5SAndroid Build Coastguard Worker 
81*8975f5c5SAndroid Build Coastguard Worker struct GLMark2TestParams : public PlatformParameters
82*8975f5c5SAndroid Build Coastguard Worker {
83*8975f5c5SAndroid Build Coastguard Worker     BenchmarkInfo info;
84*8975f5c5SAndroid Build Coastguard Worker };
85*8975f5c5SAndroid Build Coastguard Worker 
operator <<(std::ostream & os,const GLMark2TestParams & params)86*8975f5c5SAndroid Build Coastguard Worker std::ostream &operator<<(std::ostream &os, const GLMark2TestParams &params)
87*8975f5c5SAndroid Build Coastguard Worker {
88*8975f5c5SAndroid Build Coastguard Worker     os << static_cast<const PlatformParameters &>(params) << "_" << params.info.name;
89*8975f5c5SAndroid Build Coastguard Worker     return os;
90*8975f5c5SAndroid Build Coastguard Worker }
91*8975f5c5SAndroid Build Coastguard Worker 
92*8975f5c5SAndroid Build Coastguard Worker class GLMark2Benchmark : public testing::TestWithParam<GLMark2TestParams>
93*8975f5c5SAndroid Build Coastguard Worker {
94*8975f5c5SAndroid Build Coastguard Worker   public:
GLMark2Benchmark()95*8975f5c5SAndroid Build Coastguard Worker     GLMark2Benchmark()
96*8975f5c5SAndroid Build Coastguard Worker     {
97*8975f5c5SAndroid Build Coastguard Worker         switch (GetParam().getRenderer())
98*8975f5c5SAndroid Build Coastguard Worker         {
99*8975f5c5SAndroid Build Coastguard Worker             case EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE:
100*8975f5c5SAndroid Build Coastguard Worker                 mBackend = "d3d11";
101*8975f5c5SAndroid Build Coastguard Worker                 break;
102*8975f5c5SAndroid Build Coastguard Worker             case EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE:
103*8975f5c5SAndroid Build Coastguard Worker                 mBackend = "gl";
104*8975f5c5SAndroid Build Coastguard Worker                 break;
105*8975f5c5SAndroid Build Coastguard Worker             case EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE:
106*8975f5c5SAndroid Build Coastguard Worker                 mBackend = "vulkan";
107*8975f5c5SAndroid Build Coastguard Worker                 break;
108*8975f5c5SAndroid Build Coastguard Worker             case EGL_PLATFORM_ANGLE_TYPE_METAL_ANGLE:
109*8975f5c5SAndroid Build Coastguard Worker                 mBackend = "metal";
110*8975f5c5SAndroid Build Coastguard Worker                 break;
111*8975f5c5SAndroid Build Coastguard Worker             default:
112*8975f5c5SAndroid Build Coastguard Worker                 break;
113*8975f5c5SAndroid Build Coastguard Worker         }
114*8975f5c5SAndroid Build Coastguard Worker         std::string story = GetParam().info.name;
115*8975f5c5SAndroid Build Coastguard Worker         mReporter = std::make_unique<perf_test::PerfResultReporter>("glmark2_" + mBackend, story);
116*8975f5c5SAndroid Build Coastguard Worker         mReporter->RegisterImportantMetric(".fps", "fps");
117*8975f5c5SAndroid Build Coastguard Worker         mReporter->RegisterImportantMetric(".score", "score");
118*8975f5c5SAndroid Build Coastguard Worker     }
119*8975f5c5SAndroid Build Coastguard Worker 
run()120*8975f5c5SAndroid Build Coastguard Worker     void run()
121*8975f5c5SAndroid Build Coastguard Worker     {
122*8975f5c5SAndroid Build Coastguard Worker         // Only supported on Linux and Windows at the moment.
123*8975f5c5SAndroid Build Coastguard Worker         if (!IsLinux() && !IsWindows())
124*8975f5c5SAndroid Build Coastguard Worker         {
125*8975f5c5SAndroid Build Coastguard Worker             return;
126*8975f5c5SAndroid Build Coastguard Worker         }
127*8975f5c5SAndroid Build Coastguard Worker 
128*8975f5c5SAndroid Build Coastguard Worker         const BenchmarkInfo benchmarkInfo = GetParam().info;
129*8975f5c5SAndroid Build Coastguard Worker         const char *benchmark             = benchmarkInfo.glmark2Config;
130*8975f5c5SAndroid Build Coastguard Worker         const char *benchmarkName         = benchmarkInfo.name;
131*8975f5c5SAndroid Build Coastguard Worker         bool completeRun                  = benchmark == nullptr || benchmark[0] == '\0';
132*8975f5c5SAndroid Build Coastguard Worker 
133*8975f5c5SAndroid Build Coastguard Worker         Optional<std::string> cwd = GetCWD();
134*8975f5c5SAndroid Build Coastguard Worker 
135*8975f5c5SAndroid Build Coastguard Worker         // Set the current working directory to the executable's, as the data path of glmark2 is
136*8975f5c5SAndroid Build Coastguard Worker         // set relative to that path.
137*8975f5c5SAndroid Build Coastguard Worker         std::string executableDir = GetExecutableDirectory();
138*8975f5c5SAndroid Build Coastguard Worker         SetCWD(executableDir.c_str());
139*8975f5c5SAndroid Build Coastguard Worker         SetEnvironmentVar("ANGLE_DEFAULT_PLATFORM", mBackend.c_str());
140*8975f5c5SAndroid Build Coastguard Worker 
141*8975f5c5SAndroid Build Coastguard Worker         std::vector<const char *> args = {
142*8975f5c5SAndroid Build Coastguard Worker             "glmark2_angle",
143*8975f5c5SAndroid Build Coastguard Worker         };
144*8975f5c5SAndroid Build Coastguard Worker         if (OneFrame())
145*8975f5c5SAndroid Build Coastguard Worker         {
146*8975f5c5SAndroid Build Coastguard Worker             args.push_back("--validate");
147*8975f5c5SAndroid Build Coastguard Worker         }
148*8975f5c5SAndroid Build Coastguard Worker         if (!completeRun)
149*8975f5c5SAndroid Build Coastguard Worker         {
150*8975f5c5SAndroid Build Coastguard Worker             args.push_back("--benchmark");
151*8975f5c5SAndroid Build Coastguard Worker             args.push_back(benchmark);
152*8975f5c5SAndroid Build Coastguard Worker             fprintf(stderr, "Running benchmark: %s\n", benchmark);
153*8975f5c5SAndroid Build Coastguard Worker         }
154*8975f5c5SAndroid Build Coastguard Worker         args.push_back(nullptr);
155*8975f5c5SAndroid Build Coastguard Worker 
156*8975f5c5SAndroid Build Coastguard Worker         ProcessHandle process(args, ProcessOutputCapture::StdoutOnly);
157*8975f5c5SAndroid Build Coastguard Worker         ASSERT_TRUE(process && process->started());
158*8975f5c5SAndroid Build Coastguard Worker         ASSERT_TRUE(process->finish());
159*8975f5c5SAndroid Build Coastguard Worker 
160*8975f5c5SAndroid Build Coastguard Worker         // Restore the current working directory for the next tests.
161*8975f5c5SAndroid Build Coastguard Worker         if (cwd.valid())
162*8975f5c5SAndroid Build Coastguard Worker         {
163*8975f5c5SAndroid Build Coastguard Worker             SetCWD(cwd.value().c_str());
164*8975f5c5SAndroid Build Coastguard Worker         }
165*8975f5c5SAndroid Build Coastguard Worker 
166*8975f5c5SAndroid Build Coastguard Worker         ASSERT_EQ(EXIT_SUCCESS, process->getExitCode());
167*8975f5c5SAndroid Build Coastguard Worker 
168*8975f5c5SAndroid Build Coastguard Worker         if (!OneFrame())
169*8975f5c5SAndroid Build Coastguard Worker         {
170*8975f5c5SAndroid Build Coastguard Worker             std::string output = process->getStdout();
171*8975f5c5SAndroid Build Coastguard Worker             parseOutput(output, benchmarkName, completeRun);
172*8975f5c5SAndroid Build Coastguard Worker         }
173*8975f5c5SAndroid Build Coastguard Worker     }
174*8975f5c5SAndroid Build Coastguard Worker 
175*8975f5c5SAndroid Build Coastguard Worker   private:
parseOutput(const std::string & output,const char * benchmarkName,bool completeRun)176*8975f5c5SAndroid Build Coastguard Worker     void parseOutput(const std::string &output, const char *benchmarkName, bool completeRun)
177*8975f5c5SAndroid Build Coastguard Worker     {
178*8975f5c5SAndroid Build Coastguard Worker         // Output is in the following format:
179*8975f5c5SAndroid Build Coastguard Worker         //
180*8975f5c5SAndroid Build Coastguard Worker         // =======================================================
181*8975f5c5SAndroid Build Coastguard Worker         //     glmark2 2017.07
182*8975f5c5SAndroid Build Coastguard Worker         // =======================================================
183*8975f5c5SAndroid Build Coastguard Worker         //     OpenGL Information
184*8975f5c5SAndroid Build Coastguard Worker         //     GL_VENDOR:     ...
185*8975f5c5SAndroid Build Coastguard Worker         //     GL_RENDERER:   ...
186*8975f5c5SAndroid Build Coastguard Worker         //     GL_VERSION:    ...
187*8975f5c5SAndroid Build Coastguard Worker         // =======================================================
188*8975f5c5SAndroid Build Coastguard Worker         // [test] config: FPS: uint FrameTime: float ms
189*8975f5c5SAndroid Build Coastguard Worker         // [test] config: Not Supported
190*8975f5c5SAndroid Build Coastguard Worker         // ...
191*8975f5c5SAndroid Build Coastguard Worker         // =======================================================
192*8975f5c5SAndroid Build Coastguard Worker         //                                   glmark2 Score: uint
193*8975f5c5SAndroid Build Coastguard Worker         // =======================================================
194*8975f5c5SAndroid Build Coastguard Worker         //
195*8975f5c5SAndroid Build Coastguard Worker         // This function skips the header, prints one line for each test/config line where there's
196*8975f5c5SAndroid Build Coastguard Worker         // an FPS value, and finally prints the overall score.
197*8975f5c5SAndroid Build Coastguard Worker         std::istringstream glmark2Output(output);
198*8975f5c5SAndroid Build Coastguard Worker         std::string line;
199*8975f5c5SAndroid Build Coastguard Worker 
200*8975f5c5SAndroid Build Coastguard Worker         // Forward any INFO: lines that may have been generated.
201*8975f5c5SAndroid Build Coastguard Worker         while (std::getline(glmark2Output, line) && BeginsWith(line, "INFO:"))
202*8975f5c5SAndroid Build Coastguard Worker         {
203*8975f5c5SAndroid Build Coastguard Worker             fprintf(stderr, "%s\n", line.c_str());
204*8975f5c5SAndroid Build Coastguard Worker         }
205*8975f5c5SAndroid Build Coastguard Worker 
206*8975f5c5SAndroid Build Coastguard Worker         // Expect ==== at the top of the header
207*8975f5c5SAndroid Build Coastguard Worker         ASSERT_EQ('=', line[0]);
208*8975f5c5SAndroid Build Coastguard Worker 
209*8975f5c5SAndroid Build Coastguard Worker         // Skip one line
210*8975f5c5SAndroid Build Coastguard Worker         std::getline(glmark2Output, line);
211*8975f5c5SAndroid Build Coastguard Worker 
212*8975f5c5SAndroid Build Coastguard Worker         // Expect ==== in the middle of the header
213*8975f5c5SAndroid Build Coastguard Worker         std::getline(glmark2Output, line);
214*8975f5c5SAndroid Build Coastguard Worker         ASSERT_EQ('=', line[0]);
215*8975f5c5SAndroid Build Coastguard Worker 
216*8975f5c5SAndroid Build Coastguard Worker         // Skip four lines
217*8975f5c5SAndroid Build Coastguard Worker         std::getline(glmark2Output, line);
218*8975f5c5SAndroid Build Coastguard Worker         std::getline(glmark2Output, line);
219*8975f5c5SAndroid Build Coastguard Worker         std::getline(glmark2Output, line);
220*8975f5c5SAndroid Build Coastguard Worker         std::getline(glmark2Output, line);
221*8975f5c5SAndroid Build Coastguard Worker 
222*8975f5c5SAndroid Build Coastguard Worker         // The fourth line is the GL_VERSION.  Expect it to include ANGLE, otherwise we are not
223*8975f5c5SAndroid Build Coastguard Worker         // running against ANGLE.
224*8975f5c5SAndroid Build Coastguard Worker         ASSERT_NE(line.find("ANGLE"), std::string::npos);
225*8975f5c5SAndroid Build Coastguard Worker 
226*8975f5c5SAndroid Build Coastguard Worker         // Expect ==== at the bottom of the header
227*8975f5c5SAndroid Build Coastguard Worker         std::getline(glmark2Output, line);
228*8975f5c5SAndroid Build Coastguard Worker         ASSERT_EQ('=', line[0]);
229*8975f5c5SAndroid Build Coastguard Worker 
230*8975f5c5SAndroid Build Coastguard Worker         // Read configs until the top of the footer is reached
231*8975f5c5SAndroid Build Coastguard Worker         while (std::getline(glmark2Output, line) && line[0] != '=')
232*8975f5c5SAndroid Build Coastguard Worker         {
233*8975f5c5SAndroid Build Coastguard Worker             // Parse the line
234*8975f5c5SAndroid Build Coastguard Worker             std::istringstream lin(line);
235*8975f5c5SAndroid Build Coastguard Worker 
236*8975f5c5SAndroid Build Coastguard Worker             std::string testName, testConfig;
237*8975f5c5SAndroid Build Coastguard Worker             lin >> testName >> testConfig;
238*8975f5c5SAndroid Build Coastguard Worker             EXPECT_TRUE(lin);
239*8975f5c5SAndroid Build Coastguard Worker 
240*8975f5c5SAndroid Build Coastguard Worker             std::string fpsTag, frametimeTag;
241*8975f5c5SAndroid Build Coastguard Worker             size_t fps;
242*8975f5c5SAndroid Build Coastguard Worker             float frametime;
243*8975f5c5SAndroid Build Coastguard Worker 
244*8975f5c5SAndroid Build Coastguard Worker             lin >> fpsTag >> fps >> frametimeTag >> frametime;
245*8975f5c5SAndroid Build Coastguard Worker 
246*8975f5c5SAndroid Build Coastguard Worker             // If the line is not in `FPS: uint FrameTime: Float ms` format, the test is not
247*8975f5c5SAndroid Build Coastguard Worker             // supported.  It will be skipped.
248*8975f5c5SAndroid Build Coastguard Worker             if (!lin)
249*8975f5c5SAndroid Build Coastguard Worker             {
250*8975f5c5SAndroid Build Coastguard Worker                 continue;
251*8975f5c5SAndroid Build Coastguard Worker             }
252*8975f5c5SAndroid Build Coastguard Worker 
253*8975f5c5SAndroid Build Coastguard Worker             EXPECT_EQ("FPS:", fpsTag);
254*8975f5c5SAndroid Build Coastguard Worker             EXPECT_EQ("FrameTime:", frametimeTag);
255*8975f5c5SAndroid Build Coastguard Worker 
256*8975f5c5SAndroid Build Coastguard Worker             if (!completeRun)
257*8975f5c5SAndroid Build Coastguard Worker             {
258*8975f5c5SAndroid Build Coastguard Worker                 mReporter->AddResult(".fps", fps);
259*8975f5c5SAndroid Build Coastguard Worker             }
260*8975f5c5SAndroid Build Coastguard Worker         }
261*8975f5c5SAndroid Build Coastguard Worker 
262*8975f5c5SAndroid Build Coastguard Worker         // Get the score line: `glmark2 Score: uint`
263*8975f5c5SAndroid Build Coastguard Worker         std::string glmark2Tag, scoreTag;
264*8975f5c5SAndroid Build Coastguard Worker         size_t score;
265*8975f5c5SAndroid Build Coastguard Worker         glmark2Output >> glmark2Tag >> scoreTag >> score;
266*8975f5c5SAndroid Build Coastguard Worker         EXPECT_TRUE(glmark2Output);
267*8975f5c5SAndroid Build Coastguard Worker         EXPECT_EQ("glmark2", glmark2Tag);
268*8975f5c5SAndroid Build Coastguard Worker         EXPECT_EQ("Score:", scoreTag);
269*8975f5c5SAndroid Build Coastguard Worker 
270*8975f5c5SAndroid Build Coastguard Worker         if (completeRun)
271*8975f5c5SAndroid Build Coastguard Worker         {
272*8975f5c5SAndroid Build Coastguard Worker             mReporter->AddResult(".score", score);
273*8975f5c5SAndroid Build Coastguard Worker         }
274*8975f5c5SAndroid Build Coastguard Worker     }
275*8975f5c5SAndroid Build Coastguard Worker 
276*8975f5c5SAndroid Build Coastguard Worker     std::string mBackend = "invalid";
277*8975f5c5SAndroid Build Coastguard Worker     std::unique_ptr<perf_test::PerfResultReporter> mReporter;
278*8975f5c5SAndroid Build Coastguard Worker };
279*8975f5c5SAndroid Build Coastguard Worker 
TEST_P(GLMark2Benchmark,Run)280*8975f5c5SAndroid Build Coastguard Worker TEST_P(GLMark2Benchmark, Run)
281*8975f5c5SAndroid Build Coastguard Worker {
282*8975f5c5SAndroid Build Coastguard Worker     run();
283*8975f5c5SAndroid Build Coastguard Worker }
284*8975f5c5SAndroid Build Coastguard Worker 
CombineEGLPlatform(const GLMark2TestParams & in,EGLPlatformParameters eglParams)285*8975f5c5SAndroid Build Coastguard Worker GLMark2TestParams CombineEGLPlatform(const GLMark2TestParams &in, EGLPlatformParameters eglParams)
286*8975f5c5SAndroid Build Coastguard Worker {
287*8975f5c5SAndroid Build Coastguard Worker     GLMark2TestParams out = in;
288*8975f5c5SAndroid Build Coastguard Worker     out.eglParameters     = eglParams;
289*8975f5c5SAndroid Build Coastguard Worker     return out;
290*8975f5c5SAndroid Build Coastguard Worker }
291*8975f5c5SAndroid Build Coastguard Worker 
CombineInfo(const GLMark2TestParams & in,BenchmarkInfo info)292*8975f5c5SAndroid Build Coastguard Worker GLMark2TestParams CombineInfo(const GLMark2TestParams &in, BenchmarkInfo info)
293*8975f5c5SAndroid Build Coastguard Worker {
294*8975f5c5SAndroid Build Coastguard Worker     GLMark2TestParams out = in;
295*8975f5c5SAndroid Build Coastguard Worker     out.info              = info;
296*8975f5c5SAndroid Build Coastguard Worker     return out;
297*8975f5c5SAndroid Build Coastguard Worker }
298*8975f5c5SAndroid Build Coastguard Worker 
299*8975f5c5SAndroid Build Coastguard Worker using namespace egl_platform;
300*8975f5c5SAndroid Build Coastguard Worker 
301*8975f5c5SAndroid Build Coastguard Worker std::vector<GLMark2TestParams> gTestsWithInfo =
302*8975f5c5SAndroid Build Coastguard Worker     CombineWithValues({GLMark2TestParams()}, kBenchmarks, CombineInfo);
303*8975f5c5SAndroid Build Coastguard Worker std::vector<EGLPlatformParameters> gEGLPlatforms = {D3D11(), METAL(), OPENGLES(), VULKAN()};
304*8975f5c5SAndroid Build Coastguard Worker std::vector<GLMark2TestParams> gTestsWithPlatform =
305*8975f5c5SAndroid Build Coastguard Worker     CombineWithValues(gTestsWithInfo, gEGLPlatforms, CombineEGLPlatform);
306*8975f5c5SAndroid Build Coastguard Worker 
307*8975f5c5SAndroid Build Coastguard Worker ANGLE_INSTANTIATE_TEST_ARRAY(GLMark2Benchmark, gTestsWithPlatform);
308*8975f5c5SAndroid Build Coastguard Worker 
309*8975f5c5SAndroid Build Coastguard Worker }  // namespace
310