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 // ANGLEPerfTestArgs.cpp:
7*8975f5c5SAndroid Build Coastguard Worker // Parse command line arguments for angle_perftests.
8*8975f5c5SAndroid Build Coastguard Worker //
9*8975f5c5SAndroid Build Coastguard Worker
10*8975f5c5SAndroid Build Coastguard Worker #include "ANGLEPerfTestArgs.h"
11*8975f5c5SAndroid Build Coastguard Worker #include <string.h>
12*8975f5c5SAndroid Build Coastguard Worker #include <sstream>
13*8975f5c5SAndroid Build Coastguard Worker
14*8975f5c5SAndroid Build Coastguard Worker #include "common/debug.h"
15*8975f5c5SAndroid Build Coastguard Worker #include "util/test_utils.h"
16*8975f5c5SAndroid Build Coastguard Worker
17*8975f5c5SAndroid Build Coastguard Worker namespace angle
18*8975f5c5SAndroid Build Coastguard Worker {
19*8975f5c5SAndroid Build Coastguard Worker
20*8975f5c5SAndroid Build Coastguard Worker constexpr int kDefaultStepsPerTrial = std::numeric_limits<int>::max();
21*8975f5c5SAndroid Build Coastguard Worker constexpr int kDefaultTrialTimeSeconds = 0;
22*8975f5c5SAndroid Build Coastguard Worker constexpr int kDefaultTestTrials = 3;
23*8975f5c5SAndroid Build Coastguard Worker
24*8975f5c5SAndroid Build Coastguard Worker int gStepsPerTrial = kDefaultStepsPerTrial;
25*8975f5c5SAndroid Build Coastguard Worker int gMaxStepsPerformed = kDefaultMaxStepsPerformed;
26*8975f5c5SAndroid Build Coastguard Worker bool gEnableTrace = false;
27*8975f5c5SAndroid Build Coastguard Worker const char *gTraceFile = "ANGLETrace.json";
28*8975f5c5SAndroid Build Coastguard Worker const char *gScreenshotDir = nullptr;
29*8975f5c5SAndroid Build Coastguard Worker const char *gRenderTestOutputDir = nullptr;
30*8975f5c5SAndroid Build Coastguard Worker bool gSaveScreenshots = false;
31*8975f5c5SAndroid Build Coastguard Worker int gScreenshotFrame = kDefaultScreenshotFrame;
32*8975f5c5SAndroid Build Coastguard Worker bool gVerboseLogging = false;
33*8975f5c5SAndroid Build Coastguard Worker bool gWarmup = false;
34*8975f5c5SAndroid Build Coastguard Worker int gTrialTimeSeconds = kDefaultTrialTimeSeconds;
35*8975f5c5SAndroid Build Coastguard Worker int gTestTrials = kDefaultTestTrials;
36*8975f5c5SAndroid Build Coastguard Worker bool gNoFinish = false;
37*8975f5c5SAndroid Build Coastguard Worker bool gRetraceMode = false;
38*8975f5c5SAndroid Build Coastguard Worker bool gMinimizeGPUWork = false;
39*8975f5c5SAndroid Build Coastguard Worker bool gTraceTestValidation = false;
40*8975f5c5SAndroid Build Coastguard Worker const char *gPerfCounters = nullptr;
41*8975f5c5SAndroid Build Coastguard Worker const char *gUseANGLE = nullptr;
42*8975f5c5SAndroid Build Coastguard Worker const char *gUseGL = nullptr;
43*8975f5c5SAndroid Build Coastguard Worker bool gOffscreen = false;
44*8975f5c5SAndroid Build Coastguard Worker bool gVsync = false;
45*8975f5c5SAndroid Build Coastguard Worker int gFpsLimit = 0;
46*8975f5c5SAndroid Build Coastguard Worker bool gRunToKeyFrame = false;
47*8975f5c5SAndroid Build Coastguard Worker int gFixedTestTime = 0;
48*8975f5c5SAndroid Build Coastguard Worker int gFixedTestTimeWithWarmup = 0;
49*8975f5c5SAndroid Build Coastguard Worker const char *gTraceInterpreter = nullptr;
50*8975f5c5SAndroid Build Coastguard Worker const char *gPrintExtensionsToFile = nullptr;
51*8975f5c5SAndroid Build Coastguard Worker const char *gRequestedExtensions = nullptr;
52*8975f5c5SAndroid Build Coastguard Worker bool gIncludeInactiveResources = false;
53*8975f5c5SAndroid Build Coastguard Worker
54*8975f5c5SAndroid Build Coastguard Worker namespace
55*8975f5c5SAndroid Build Coastguard Worker {
PerfTestArg(int * argc,char ** argv,int argIndex)56*8975f5c5SAndroid Build Coastguard Worker bool PerfTestArg(int *argc, char **argv, int argIndex)
57*8975f5c5SAndroid Build Coastguard Worker {
58*8975f5c5SAndroid Build Coastguard Worker return ParseFlag("--run-to-key-frame", argc, argv, argIndex, &gRunToKeyFrame) ||
59*8975f5c5SAndroid Build Coastguard Worker ParseFlag("--enable-trace", argc, argv, argIndex, &gEnableTrace) ||
60*8975f5c5SAndroid Build Coastguard Worker ParseFlag("-v", argc, argv, argIndex, &gVerboseLogging) ||
61*8975f5c5SAndroid Build Coastguard Worker ParseFlag("--verbose", argc, argv, argIndex, &gVerboseLogging) ||
62*8975f5c5SAndroid Build Coastguard Worker ParseFlag("--verbose-logging", argc, argv, argIndex, &gVerboseLogging) ||
63*8975f5c5SAndroid Build Coastguard Worker ParseFlag("--no-finish", argc, argv, argIndex, &gNoFinish) ||
64*8975f5c5SAndroid Build Coastguard Worker ParseFlag("--warmup", argc, argv, argIndex, &gWarmup) ||
65*8975f5c5SAndroid Build Coastguard Worker ParseCStringArg("--trace-file", argc, argv, argIndex, &gTraceFile) ||
66*8975f5c5SAndroid Build Coastguard Worker ParseCStringArg("--perf-counters", argc, argv, argIndex, &gPerfCounters) ||
67*8975f5c5SAndroid Build Coastguard Worker ParseIntArg("--steps-per-trial", argc, argv, argIndex, &gStepsPerTrial) ||
68*8975f5c5SAndroid Build Coastguard Worker ParseIntArg("--max-steps-performed", argc, argv, argIndex, &gMaxStepsPerformed) ||
69*8975f5c5SAndroid Build Coastguard Worker ParseIntArg("--fixed-test-time", argc, argv, argIndex, &gFixedTestTime) ||
70*8975f5c5SAndroid Build Coastguard Worker ParseIntArg("--fixed-test-time-with-warmup", argc, argv, argIndex,
71*8975f5c5SAndroid Build Coastguard Worker &gFixedTestTimeWithWarmup) ||
72*8975f5c5SAndroid Build Coastguard Worker ParseIntArg("--trial-time", argc, argv, argIndex, &gTrialTimeSeconds) ||
73*8975f5c5SAndroid Build Coastguard Worker ParseIntArg("--max-trial-time", argc, argv, argIndex, &gTrialTimeSeconds) ||
74*8975f5c5SAndroid Build Coastguard Worker ParseIntArg("--trials", argc, argv, argIndex, &gTestTrials);
75*8975f5c5SAndroid Build Coastguard Worker }
76*8975f5c5SAndroid Build Coastguard Worker
TraceTestArg(int * argc,char ** argv,int argIndex)77*8975f5c5SAndroid Build Coastguard Worker bool TraceTestArg(int *argc, char **argv, int argIndex)
78*8975f5c5SAndroid Build Coastguard Worker {
79*8975f5c5SAndroid Build Coastguard Worker return ParseFlag("--retrace-mode", argc, argv, argIndex, &gRetraceMode) ||
80*8975f5c5SAndroid Build Coastguard Worker ParseFlag("--validation", argc, argv, argIndex, &gTraceTestValidation) ||
81*8975f5c5SAndroid Build Coastguard Worker ParseFlag("--save-screenshots", argc, argv, argIndex, &gSaveScreenshots) ||
82*8975f5c5SAndroid Build Coastguard Worker ParseFlag("--offscreen", argc, argv, argIndex, &gOffscreen) ||
83*8975f5c5SAndroid Build Coastguard Worker ParseFlag("--vsync", argc, argv, argIndex, &gVsync) ||
84*8975f5c5SAndroid Build Coastguard Worker ParseFlag("--minimize-gpu-work", argc, argv, argIndex, &gMinimizeGPUWork) ||
85*8975f5c5SAndroid Build Coastguard Worker ParseCStringArg("--trace-interpreter", argc, argv, argIndex, &gTraceInterpreter) ||
86*8975f5c5SAndroid Build Coastguard Worker ParseIntArg("--screenshot-frame", argc, argv, argIndex, &gScreenshotFrame) ||
87*8975f5c5SAndroid Build Coastguard Worker ParseIntArg("--fps-limit", argc, argv, argIndex, &gFpsLimit) ||
88*8975f5c5SAndroid Build Coastguard Worker ParseCStringArgWithHandling("--render-test-output-dir", argc, argv, argIndex,
89*8975f5c5SAndroid Build Coastguard Worker &gRenderTestOutputDir, ArgHandling::Preserve) ||
90*8975f5c5SAndroid Build Coastguard Worker ParseCStringArg("--screenshot-dir", argc, argv, argIndex, &gScreenshotDir) ||
91*8975f5c5SAndroid Build Coastguard Worker ParseCStringArg("--use-angle", argc, argv, argIndex, &gUseANGLE) ||
92*8975f5c5SAndroid Build Coastguard Worker ParseCStringArg("--use-gl", argc, argv, argIndex, &gUseGL) ||
93*8975f5c5SAndroid Build Coastguard Worker ParseCStringArg("--print-extensions-to-file", argc, argv, argIndex,
94*8975f5c5SAndroid Build Coastguard Worker &gPrintExtensionsToFile) ||
95*8975f5c5SAndroid Build Coastguard Worker ParseCStringArg("--request-extensions", argc, argv, argIndex, &gRequestedExtensions) ||
96*8975f5c5SAndroid Build Coastguard Worker ParseFlag("--include-inactive-resources", argc, argv, argIndex,
97*8975f5c5SAndroid Build Coastguard Worker &gIncludeInactiveResources);
98*8975f5c5SAndroid Build Coastguard Worker }
99*8975f5c5SAndroid Build Coastguard Worker } // namespace
100*8975f5c5SAndroid Build Coastguard Worker } // namespace angle
101*8975f5c5SAndroid Build Coastguard Worker
102*8975f5c5SAndroid Build Coastguard Worker using namespace angle;
103*8975f5c5SAndroid Build Coastguard Worker
ANGLEProcessPerfTestArgs(int * argc,char ** argv)104*8975f5c5SAndroid Build Coastguard Worker void ANGLEProcessPerfTestArgs(int *argc, char **argv)
105*8975f5c5SAndroid Build Coastguard Worker {
106*8975f5c5SAndroid Build Coastguard Worker for (int argIndex = 1; argIndex < *argc;)
107*8975f5c5SAndroid Build Coastguard Worker {
108*8975f5c5SAndroid Build Coastguard Worker if (!PerfTestArg(argc, argv, argIndex))
109*8975f5c5SAndroid Build Coastguard Worker {
110*8975f5c5SAndroid Build Coastguard Worker argIndex++;
111*8975f5c5SAndroid Build Coastguard Worker }
112*8975f5c5SAndroid Build Coastguard Worker }
113*8975f5c5SAndroid Build Coastguard Worker
114*8975f5c5SAndroid Build Coastguard Worker if (gRunToKeyFrame || gMaxStepsPerformed > 0)
115*8975f5c5SAndroid Build Coastguard Worker {
116*8975f5c5SAndroid Build Coastguard Worker // Ensure defaults were provided for params we're about to set
117*8975f5c5SAndroid Build Coastguard Worker ASSERT(gTestTrials == kDefaultTestTrials && gTrialTimeSeconds == kDefaultTrialTimeSeconds);
118*8975f5c5SAndroid Build Coastguard Worker
119*8975f5c5SAndroid Build Coastguard Worker gTestTrials = 1;
120*8975f5c5SAndroid Build Coastguard Worker gTrialTimeSeconds = 36000;
121*8975f5c5SAndroid Build Coastguard Worker }
122*8975f5c5SAndroid Build Coastguard Worker
123*8975f5c5SAndroid Build Coastguard Worker if (gFixedTestTime != 0)
124*8975f5c5SAndroid Build Coastguard Worker {
125*8975f5c5SAndroid Build Coastguard Worker // Ensure defaults were provided for params we're about to set
126*8975f5c5SAndroid Build Coastguard Worker ASSERT(gTrialTimeSeconds == kDefaultTrialTimeSeconds &&
127*8975f5c5SAndroid Build Coastguard Worker gStepsPerTrial == kDefaultStepsPerTrial && gTestTrials == kDefaultTestTrials);
128*8975f5c5SAndroid Build Coastguard Worker
129*8975f5c5SAndroid Build Coastguard Worker gTrialTimeSeconds = gFixedTestTime;
130*8975f5c5SAndroid Build Coastguard Worker gStepsPerTrial = std::numeric_limits<int>::max();
131*8975f5c5SAndroid Build Coastguard Worker gTestTrials = 1;
132*8975f5c5SAndroid Build Coastguard Worker }
133*8975f5c5SAndroid Build Coastguard Worker
134*8975f5c5SAndroid Build Coastguard Worker if (gFixedTestTimeWithWarmup != 0)
135*8975f5c5SAndroid Build Coastguard Worker {
136*8975f5c5SAndroid Build Coastguard Worker // Ensure defaults were provided for params we're about to set
137*8975f5c5SAndroid Build Coastguard Worker ASSERT(gTrialTimeSeconds == kDefaultTrialTimeSeconds &&
138*8975f5c5SAndroid Build Coastguard Worker gStepsPerTrial == kDefaultStepsPerTrial && gTestTrials == kDefaultTestTrials);
139*8975f5c5SAndroid Build Coastguard Worker
140*8975f5c5SAndroid Build Coastguard Worker // This option is primarily useful for trace replays when you want to iterate once through
141*8975f5c5SAndroid Build Coastguard Worker // the trace to warm caches, then run for a fixed amount of time. It is equivalent to:
142*8975f5c5SAndroid Build Coastguard Worker // --trial-time X --steps-per-trial INF --trials 1 --warmup
143*8975f5c5SAndroid Build Coastguard Worker gTrialTimeSeconds = gFixedTestTimeWithWarmup;
144*8975f5c5SAndroid Build Coastguard Worker gStepsPerTrial = std::numeric_limits<int>::max();
145*8975f5c5SAndroid Build Coastguard Worker gTestTrials = 1;
146*8975f5c5SAndroid Build Coastguard Worker gWarmup = true;
147*8975f5c5SAndroid Build Coastguard Worker }
148*8975f5c5SAndroid Build Coastguard Worker
149*8975f5c5SAndroid Build Coastguard Worker if (gTrialTimeSeconds == 0)
150*8975f5c5SAndroid Build Coastguard Worker {
151*8975f5c5SAndroid Build Coastguard Worker gTrialTimeSeconds = 10;
152*8975f5c5SAndroid Build Coastguard Worker }
153*8975f5c5SAndroid Build Coastguard Worker }
154*8975f5c5SAndroid Build Coastguard Worker
ANGLEProcessTraceTestArgs(int * argc,char ** argv)155*8975f5c5SAndroid Build Coastguard Worker void ANGLEProcessTraceTestArgs(int *argc, char **argv)
156*8975f5c5SAndroid Build Coastguard Worker {
157*8975f5c5SAndroid Build Coastguard Worker ANGLEProcessPerfTestArgs(argc, argv);
158*8975f5c5SAndroid Build Coastguard Worker
159*8975f5c5SAndroid Build Coastguard Worker for (int argIndex = 1; argIndex < *argc;)
160*8975f5c5SAndroid Build Coastguard Worker {
161*8975f5c5SAndroid Build Coastguard Worker if (!TraceTestArg(argc, argv, argIndex))
162*8975f5c5SAndroid Build Coastguard Worker {
163*8975f5c5SAndroid Build Coastguard Worker argIndex++;
164*8975f5c5SAndroid Build Coastguard Worker }
165*8975f5c5SAndroid Build Coastguard Worker }
166*8975f5c5SAndroid Build Coastguard Worker
167*8975f5c5SAndroid Build Coastguard Worker if (gScreenshotDir)
168*8975f5c5SAndroid Build Coastguard Worker {
169*8975f5c5SAndroid Build Coastguard Worker // implicitly set here but not when using kRenderTestOutputDir
170*8975f5c5SAndroid Build Coastguard Worker gSaveScreenshots = true;
171*8975f5c5SAndroid Build Coastguard Worker }
172*8975f5c5SAndroid Build Coastguard Worker
173*8975f5c5SAndroid Build Coastguard Worker if (gRenderTestOutputDir)
174*8975f5c5SAndroid Build Coastguard Worker {
175*8975f5c5SAndroid Build Coastguard Worker gScreenshotDir = gRenderTestOutputDir;
176*8975f5c5SAndroid Build Coastguard Worker }
177*8975f5c5SAndroid Build Coastguard Worker
178*8975f5c5SAndroid Build Coastguard Worker if (gTraceTestValidation)
179*8975f5c5SAndroid Build Coastguard Worker {
180*8975f5c5SAndroid Build Coastguard Worker gTestTrials = 1;
181*8975f5c5SAndroid Build Coastguard Worker gTrialTimeSeconds = 600;
182*8975f5c5SAndroid Build Coastguard Worker }
183*8975f5c5SAndroid Build Coastguard Worker }
184