• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright 2019 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 // ANGLEPerfTestArgs.cpp:
7 //   Parse command line arguments for angle_perftests.
8 //
9 
10 #include "ANGLEPerfTestArgs.h"
11 #include <string.h>
12 #include <sstream>
13 
14 namespace angle
15 {
16 bool gCalibration              = false;
17 int gStepsPerTrial             = 0;
18 int gMaxStepsPerformed         = 0;
19 bool gEnableTrace              = false;
20 const char *gTraceFile         = "ANGLETrace.json";
21 const char *gScreenShotDir     = nullptr;
22 int gScreenShotFrame           = 1;
23 bool gVerboseLogging           = false;
24 double gCalibrationTimeSeconds = 1.0;
25 double gMaxTrialTimeSeconds    = 10.0;
26 int gTestTrials                = 3;
27 bool gNoFinish                 = false;
28 bool gEnableAllTraceTests      = false;
29 bool gRetraceMode              = false;
30 bool gMinimizeGPUWork          = false;
31 bool gTraceTestValidation      = false;
32 
33 // Default to three warmup loops. There's no science to this. More than two loops was experimentally
34 // helpful on a Windows NVIDIA setup when testing with Vulkan and native trace tests.
35 int gWarmupLoops = 3;
36 }  // namespace angle
37 
38 namespace
39 {
ReadIntArgument(const char * arg)40 int ReadIntArgument(const char *arg)
41 {
42     std::stringstream strstr;
43     strstr << arg;
44 
45     int value;
46     strstr >> value;
47     return value;
48 }
49 
50 // The same as --screenshot-dir, but used by Chrome tests.
51 constexpr char kRenderTestDirArg[] = "--render-test-output-dir=";
52 }  // namespace
53 
54 using namespace angle;
55 
ANGLEProcessPerfTestArgs(int * argc,char ** argv)56 void ANGLEProcessPerfTestArgs(int *argc, char **argv)
57 {
58     for (int argIndex = 0; argIndex < *argc; argIndex++)
59     {
60         if (strcmp("--one-frame-only", argv[argIndex]) == 0)
61         {
62             gStepsPerTrial = 1;
63             gWarmupLoops   = 0;
64         }
65         else if (strcmp("--enable-trace", argv[argIndex]) == 0)
66         {
67             gEnableTrace = true;
68         }
69         else if (strcmp("--trace-file", argv[argIndex]) == 0 && argIndex < *argc - 1)
70         {
71             gTraceFile = argv[argIndex + 1];
72             // Skip an additional argument.
73             argIndex++;
74         }
75         else if (strcmp("--calibration", argv[argIndex]) == 0)
76         {
77             gCalibration = true;
78             gTestTrials  = 0;
79         }
80         else if (strcmp("--steps-per-trial", argv[argIndex]) == 0 && argIndex < *argc - 1)
81         {
82             gStepsPerTrial = ReadIntArgument(argv[argIndex + 1]);
83             // Skip an additional argument.
84             argIndex++;
85         }
86         else if (strcmp("--max-steps-performed", argv[argIndex]) == 0 && argIndex < *argc - 1)
87         {
88             gMaxStepsPerformed   = ReadIntArgument(argv[argIndex + 1]);
89             gWarmupLoops         = 0;
90             gTestTrials          = 1;
91             gMaxTrialTimeSeconds = 36000;
92             // Skip an additional argument.
93             argIndex++;
94         }
95         else if (strcmp("--fixed-test-time", argv[argIndex]) == 0 && argIndex < *argc - 1)
96         {
97             gMaxTrialTimeSeconds = ReadIntArgument(argv[argIndex + 1]);
98             gStepsPerTrial       = std::numeric_limits<int>::max();
99             gTestTrials          = 1;
100             gWarmupLoops         = 0;
101             // Skip an additional argument.
102             argIndex++;
103         }
104         else if (strcmp("--screenshot-dir", argv[argIndex]) == 0 && argIndex < *argc - 1)
105         {
106             gScreenShotDir = argv[argIndex + 1];
107             argIndex++;
108         }
109         else if (strcmp("--screenshot-frame", argv[argIndex]) == 0 && argIndex < *argc - 1)
110         {
111             gScreenShotFrame = ReadIntArgument(argv[argIndex + 1]);
112             argIndex++;
113         }
114         else if (strcmp("--verbose-logging", argv[argIndex]) == 0 ||
115                  strcmp("--verbose", argv[argIndex]) == 0 || strcmp("-v", argv[argIndex]) == 0)
116         {
117             gVerboseLogging = true;
118         }
119         else if (strcmp("--warmup-loops", argv[argIndex]) == 0)
120         {
121             gWarmupLoops = ReadIntArgument(argv[argIndex + 1]);
122             // Skip an additional argument.
123             argIndex++;
124         }
125         else if (strcmp("--no-warmup", argv[argIndex]) == 0)
126         {
127             gWarmupLoops = 0;
128         }
129         else if (strncmp(kRenderTestDirArg, argv[argIndex], strlen(kRenderTestDirArg)) == 0)
130         {
131             gScreenShotDir = argv[argIndex] + strlen(kRenderTestDirArg);
132         }
133         else if (strcmp("--calibration-time", argv[argIndex]) == 0)
134         {
135             gCalibrationTimeSeconds = ReadIntArgument(argv[argIndex + 1]);
136             // Skip an additional argument.
137             argIndex++;
138         }
139         else if (strcmp("--max-trial-time", argv[argIndex]) == 0)
140         {
141             gMaxTrialTimeSeconds = ReadIntArgument(argv[argIndex + 1]);
142             // Skip an additional argument.
143             argIndex++;
144         }
145         else if (strcmp("--trials", argv[argIndex]) == 0)
146         {
147             gTestTrials = ReadIntArgument(argv[argIndex + 1]);
148             // Skip an additional argument.
149             argIndex++;
150         }
151         else if (strcmp("--no-finish", argv[argIndex]) == 0)
152         {
153             gNoFinish = true;
154         }
155         else if (strcmp("--enable-all-trace-tests", argv[argIndex]) == 0)
156         {
157             gEnableAllTraceTests = true;
158         }
159         else if (strcmp("--retrace-mode", argv[argIndex]) == 0)
160         {
161             gRetraceMode = true;
162         }
163         else if (strcmp("--minimize-gpu-work", argv[argIndex]) == 0)
164         {
165             gMinimizeGPUWork = true;
166         }
167         else if (strcmp("--validation", argv[argIndex]) == 0)
168         {
169             gTraceTestValidation = true;
170             gWarmupLoops         = 0;
171             gTestTrials          = 1;
172             gMaxTrialTimeSeconds = 600.0;
173         }
174     }
175 }
176