From 2ce2146b13850e30102b2b31aa1e66080e62607d Mon Sep 17 00:00:00 2001 From: Roman Lavrov Date: Mon, 12 Dec 2022 15:31:29 -0500 Subject: [PATCH] Fix --render-test-output-dir to work in TestSuite. https://crrev.com/c/3956937 introduced the issue where this flag is consumed by ANGLEPerfTestArgs.cpp logic which runs before the TestSuite constructor and removes the flag so we end up with an empty mTestArtifactDirectory in TestSuite. Bug: angleproject:7755 Change-Id: Ic32d3a2ddceca7842a0aebe5a1e40cbedaedf2eb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4097325 Reviewed-by: Jamie Madill Commit-Queue: Roman Lavrov --- src/tests/perf_tests/ANGLEPerfTestArgs.cpp | 4 ++-- util/test_utils.cpp | 18 +++++++++++++++--- util/test_utils.h | 17 +++++++++++++---- 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/src/tests/perf_tests/ANGLEPerfTestArgs.cpp b/src/tests/perf_tests/ANGLEPerfTestArgs.cpp index 1a5023063..9c4142e4f 100644 --- a/src/tests/perf_tests/ANGLEPerfTestArgs.cpp +++ b/src/tests/perf_tests/ANGLEPerfTestArgs.cpp @@ -97,8 +97,8 @@ bool TraceTestArg(int *argc, char **argv, int argIndex) ParseFlag("--trace-interpreter", argc, argv, argIndex, &gTraceInterpreter) || ParseFlag("--interpreter", argc, argv, argIndex, &gTraceInterpreter) || ParseIntArg("--screenshot-frame", argc, argv, argIndex, &gScreenshotFrame) || - ParseCStringArg("--render-test-output-dir", argc, argv, argIndex, - &gRenderTestOutputDir) || + ParseCStringArgWithHandling("--render-test-output-dir", argc, argv, argIndex, + &gRenderTestOutputDir, ArgHandling::Preserve) || ParseCStringArg("--screenshot-dir", argc, argv, argIndex, &gScreenshotDir) || ParseCStringArg("--use-angle", argc, argv, argIndex, &gUseANGLE) || ParseCStringArg("--use-gl", argc, argv, argIndex, &gUseGL) || diff --git a/util/test_utils.cpp b/util/test_utils.cpp index 5a5c45dd4..0b0799f41 100644 --- a/util/test_utils.cpp +++ b/util/test_utils.cpp @@ -176,6 +176,7 @@ bool ParseIntArgWithHandling(const char *flag, } *valueOut = static_cast(longValue); + // Note: return value is always false with ArgHandling::Preserve handling return handling == ArgHandling::Delete; } @@ -207,16 +208,27 @@ bool ParseStringArg(const char *flag, int *argc, char **argv, int argIndex, std: return true; } -bool ParseCStringArg(const char *flag, int *argc, char **argv, int argIndex, const char **valueOut) +bool ParseCStringArgWithHandling(const char *flag, + int *argc, + char **argv, + int argIndex, + const char **valueOut, + ArgHandling handling) { - const char *value = GetSingleArg(flag, argc, argv, argIndex, ArgHandling::Delete); + const char *value = GetSingleArg(flag, argc, argv, argIndex, handling); if (!value) { return false; } *valueOut = value; - return true; + // Note: return value is always false with ArgHandling::Preserve handling + return handling == ArgHandling::Delete; +} + +bool ParseCStringArg(const char *flag, int *argc, char **argv, int argIndex, const char **valueOut) +{ + return ParseCStringArgWithHandling(flag, argc, argv, argIndex, valueOut, ArgHandling::Delete); } void AddArg(int *argc, char **argv, const char *arg) diff --git a/util/test_utils.h b/util/test_utils.h index 6b2d4760b..60a7cb2c3 100644 --- a/util/test_utils.h +++ b/util/test_utils.h @@ -133,16 +133,25 @@ enum ArgHandling Preserve, }; +bool ParseIntArg(const char *flag, int *argc, char **argv, int argIndex, int *valueOut); +bool ParseFlag(const char *flag, int *argc, char **argv, int argIndex, bool *flagOut); +bool ParseStringArg(const char *flag, int *argc, char **argv, int argIndex, std::string *valueOut); +bool ParseCStringArg(const char *flag, int *argc, char **argv, int argIndex, const char **valueOut); + +// Note: return value is always false with ArgHandling::Preserve handling bool ParseIntArgWithHandling(const char *flag, int *argc, char **argv, int argIndex, int *valueOut, ArgHandling handling); -bool ParseIntArg(const char *flag, int *argc, char **argv, int argIndex, int *valueOut); -bool ParseFlag(const char *flag, int *argc, char **argv, int argIndex, bool *flagOut); -bool ParseStringArg(const char *flag, int *argc, char **argv, int argIndex, std::string *valueOut); -bool ParseCStringArg(const char *flag, int *argc, char **argv, int argIndex, const char **valueOut); +bool ParseCStringArgWithHandling(const char *flag, + int *argc, + char **argv, + int argIndex, + const char **valueOut, + ArgHandling handling); + void AddArg(int *argc, char **argv, const char *arg); uint32_t GetPlatformANGLETypeFromArg(const char *useANGLEArg, uint32_t defaultPlatformType);