[Fix] (trace-replay): support alternate golden images

- compare actual output against primary and alternate golden images

- record the matched golden path in trace replay results

- allow APK and Linux retrace fixtures to pass alternate golden paths

- keep nostalgia validation accepting both Mesa and PC goldens
This commit is contained in:
2026-06-20 19:04:52 +08:00
parent e92a57011f
commit a1e2007b82
9 changed files with 167 additions and 30 deletions
+3
View File
@@ -269,6 +269,7 @@ function(add_trace_replay_test CASE_NAME BACKEND)
TRACE_ARCHIVE
TRACE_FILE
GOLDEN
ALTERNATE_GOLDEN
TARGET_CALL
WIDTH
HEIGHT
@@ -314,6 +315,7 @@ function(add_trace_replay_test CASE_NAME BACKEND)
-DTRACE_ARCHIVE=${TRACE_CASE_TRACE_ARCHIVE}
-DTRACE_FILE=${TRACE_CASE_TRACE_FILE}
-DTRACE_GOLDEN=${TRACE_CASE_GOLDEN}
-DTRACE_ALTERNATE_GOLDEN=${TRACE_CASE_ALTERNATE_GOLDEN}
-DTRACE_BACKEND=${BACKEND}
-DTRACE_TARGET_CALL=${TRACE_CASE_TARGET_CALL}
-DTRACE_WIDTH=${TRACE_CASE_WIDTH}
@@ -469,6 +471,7 @@ add_trace_replay_test_for_backends(minecraft-1.21.4-fabric-iris-nostalgia-in-wor
TRACE_ARCHIVE ${MOBILEGL_TRACE_ROOT}/fixtures/minecraft-1.21.4-fabric-iris-nostalgia-in-world.tgz
TRACE_FILE trace.trace
GOLDEN ${MOBILEGL_TRACE_ROOT}/fixtures/minecraft-1.21.4-fabric-iris-nostalgia-in-world.0000153808-linux-mesa.png
ALTERNATE_GOLDEN ${MOBILEGL_TRACE_ROOT}/fixtures/minecraft-1.21.4-fabric-iris-nostalgia-in-world.0000153808.png
TARGET_CALL 153808
WIDTH 854
HEIGHT 480
+5
View File
@@ -22,6 +22,10 @@ endif()
if(NOT DEFINED TRACE_FUZZ_PERCENT OR "${TRACE_FUZZ_PERCENT}" STREQUAL "")
set(TRACE_FUZZ_PERCENT 20)
endif()
set(alternate_golden_args)
if(DEFINED TRACE_ALTERNATE_GOLDEN AND NOT "${TRACE_ALTERNATE_GOLDEN}" STREQUAL "")
list(APPEND alternate_golden_args --alternate-golden "${TRACE_ALTERNATE_GOLDEN}")
endif()
if(EXISTS "${TRACE_OUTPUT_DIR}")
file(REMOVE_RECURSE "${TRACE_OUTPUT_DIR}")
@@ -50,6 +54,7 @@ execute_process(
COMMAND "${TRACE_REPLAY_EXE}"
--trace "${trace_path}"
--golden "${TRACE_GOLDEN}"
${alternate_golden_args}
--diff "${TRACE_OUTPUT_DIR}/output/${TRACE_CASE_NAME}-diff.png"
--output "${TRACE_OUTPUT_DIR}/output"
--backend "${TRACE_BACKEND}"
+7
View File
@@ -14,6 +14,7 @@ void PrintUsage(const char *argv0) {
<< "\n"
<< "Options:\n"
<< " --golden PATH Golden PNG to compare against\n"
<< " --alternate-golden PATH Additional acceptable golden PNG\n"
<< " --diff PATH Difference PNG output path\n"
<< " --backend NAME DirectGLES or DirectVulkan (default: DirectGLES)\n"
<< " --mobilegl-library PATH libMobileGL.so path (default: libMobileGL.so)\n"
@@ -64,6 +65,12 @@ bool ParseArgs(int argc, char **argv, mobilegl_trace::Request &request) {
if (!ReadValue(argc, argv, i, request.tracePath)) return false;
} else if (arg == "--golden") {
if (!ReadValue(argc, argv, i, request.goldenPath)) return false;
} else if (arg == "--alternate-golden") {
std::string alternateGolden;
if (!ReadValue(argc, argv, i, alternateGolden)) return false;
if (!alternateGolden.empty()) {
request.alternateGoldenPaths.push_back(alternateGolden);
}
} else if (arg == "--diff") {
if (!ReadValue(argc, argv, i, request.diffPath)) return false;
} else if (arg == "--output") {