mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-07 19:58:32 +09:00
157 lines
8.5 KiB
Markdown
157 lines
8.5 KiB
Markdown
# MobileGL trace replay
|
|
|
|
This directory builds a Linux command line replay runner for [apitrace](https://github.com/apitrace/apitrace) files. It
|
|
is an integration testing infrastructure of MobileGL.
|
|
|
|
The bundled fixtures cover:
|
|
|
|
- OpenRA: sourced from GL4ES' apitrace corpus.
|
|

|
|
- minecraft-1.21.4-startup: captured from Minecraft 1.21.4's startup screen.
|
|

|
|
- minecraft-1.21.4-main-menu: captured from Minecraft 1.21.4's main menu.
|
|

|
|
- minecraft-1.21.4-in-world: captured from Minecraft 1.21.4 after entering a singleplayer world.
|
|

|
|
- minecraft-1.21.4-fabric-sodium-in-world: captured from Minecraft 1.21.4 Fabric with Sodium after entering a
|
|
singleplayer world with Fancy graphics.
|
|

|
|
- minecraft-1.21.4-fabric-iris-bsl-in-world: captured from Minecraft 1.21.4 Fabric with Sodium, Iris, and BSL
|
|
Shaders after entering a singleplayer world.
|
|

|
|
- minecraft-1.21.4-fabric-iris-makeup-ultrafast-in-world: captured from Minecraft 1.21.4 Fabric with Sodium, Iris, and
|
|
MakeUP UltraFast after entering a singleplayer world.
|
|

|
|
- minecraft-1.21.4-fabric-iris-super-duper-vanilla-in-world: captured from Minecraft 1.21.4 Fabric with Sodium, Iris,
|
|
and Super Duper Vanilla after entering a singleplayer world.
|
|

|
|
- minecraft-1.21.4-fabric-iris-complementary-reimagined-in-world: captured from Minecraft 1.21.4 Fabric with Sodium,
|
|
Iris, and Complementary Reimagined after entering a singleplayer world.
|
|

|
|
- minecraft-1.21.4-fabric-iris-complementary-unbound-in-world: captured from Minecraft 1.21.4 Fabric with Sodium,
|
|
Iris, and Complementary Unbound after entering a singleplayer world.
|
|

|
|
- minecraft-1.21.4-fabric-iris-mellow-in-world: captured from Minecraft 1.21.4 Fabric with Sodium, Iris, and Mellow
|
|
after entering a singleplayer world.
|
|

|
|
- minecraft-1.21.4-fabric-iris-nostalgia-in-world: captured from Minecraft 1.21.4 Fabric with Sodium, Iris, and
|
|
Nostalgia after entering a singleplayer world.
|
|

|
|
- minecraft-1.21.4-fabric-iris-bliss-in-world: captured from Minecraft 1.21.4 Fabric with Sodium, Iris, and Bliss
|
|
after entering a singleplayer world.
|
|

|
|
- minecraft-1.21.4-fabric-iris-chocapic-v6-lite-in-world: captured from Minecraft 1.21.4 Fabric with Sodium, Iris, and
|
|
Chocapic V6 Lite after entering a singleplayer world.
|
|

|
|
- minecraft-1.21.4-fabric-iris-iterationt-in-world: captured from Minecraft 1.21.4 Fabric with Sodium, Iris, and
|
|
iterationT after entering a singleplayer world.
|
|

|
|
- minecraft-1.21.4-fabric-iris-iterationt-nodsa-in-world: captured from Minecraft 1.21.4 Fabric with Sodium, Iris, and
|
|
iterationT after entering a singleplayer world, with Iris' DSA path disabled.
|
|

|
|
- minecraft-1.21.4-fabric-iris-photon-v1.1-in-world: captured from Minecraft 1.21.4 Fabric with Sodium, Iris, and
|
|
Photon v1.1 after entering a singleplayer world.
|
|

|
|
- minecraft-1.21.4-fabric-iris-photon-v1.3b-in-world: captured from Minecraft 1.21.4 Fabric with Sodium, Iris, and
|
|
Photon v1.3b after entering a singleplayer world.
|
|

|
|
- minecraft-1.21.4-fabric-iris-derivative-main-d24.4.14-in-world: captured from Minecraft 1.21.4 Fabric with Sodium,
|
|
Iris, and Derivative Main d24.4.14 after entering a singleplayer world.
|
|

|
|
- minecraft-1.21.4-fabric-iris-sundial-lite-in-world: captured from Minecraft 1.21.4 Fabric with Sodium, Iris, and
|
|
Sundial Lite after entering a singleplayer world.
|
|

|
|
|
|
Build from the MobileGL repository root:
|
|
|
|
```sh
|
|
cmake -S . -B build-test -G Ninja \
|
|
-DMOBILEGL_BUILD_TEST=ON \
|
|
-DMOBILEGL_BUILD_BENCHMARK=OFF \
|
|
-DMOBILEGL_BUILD_TRACE_REPLAY=ON
|
|
cmake --build build-test
|
|
```
|
|
|
|
Run the fixture tests:
|
|
|
|
```sh
|
|
ctest --test-dir build-test -V -R 'MobileGLTraceReplay\.'
|
|
```
|
|
|
|
Run the CLI directly:
|
|
|
|
```sh
|
|
build-test/tools/trace_replay/mobilegl_trace_replay \
|
|
--trace openra.trace \
|
|
--golden openra.0000031249.png \
|
|
--output out/openra \
|
|
--backend DirectGLES \
|
|
--mobilegl-library build-test/libMobileGL.so \
|
|
--target-call 31249 \
|
|
--width 640 \
|
|
--height 480 \
|
|
--crop-x 1 \
|
|
--crop-y 1 \
|
|
--crop-width 638 \
|
|
--crop-height 478 \
|
|
--ssim-threshold 0.99
|
|
```
|
|
|
|
## Android device replay
|
|
|
|
Build and install a trace APK from the repository root:
|
|
|
|
```sh
|
|
gradle --no-daemon -p android-plugin :app:assembleEsprytTraceDebug
|
|
adb install -r android-plugin/app/build/outputs/apk/esprytTrace/debug/MobileGL-EsprytTrace-debug.apk
|
|
```
|
|
|
|
Prepare a fixture and copy it into the app-private directory:
|
|
|
|
```sh
|
|
mkdir -p /tmp/mobilegl-openra
|
|
tar -xzf tools/trace_replay/fixtures/openra.tgz -C /tmp/mobilegl-openra
|
|
adb push /tmp/mobilegl-openra/openra.trace /data/local/tmp/mobilegl-openra.trace
|
|
adb push tools/trace_replay/fixtures/openra.0000031249.png /data/local/tmp/mobilegl-openra.golden.png
|
|
|
|
PKG=top.mobilegl.plugin.espryt.trace
|
|
APP_DIR=/data/user/0/$PKG/files/trace-replay
|
|
adb shell run-as $PKG rm -rf files/trace-replay
|
|
adb shell run-as $PKG mkdir -p files/trace-replay/input files/trace-replay/output
|
|
adb shell run-as $PKG cp /data/local/tmp/mobilegl-openra.trace files/trace-replay/input/openra.trace
|
|
adb shell run-as $PKG cp /data/local/tmp/mobilegl-openra.golden.png files/trace-replay/input/openra.golden.png
|
|
```
|
|
|
|
Launch the standalone trace runner Activity:
|
|
|
|
```sh
|
|
adb shell am start -W -a top.mobilegl.plugin.TRACE_REPLAY \
|
|
-n $PKG/top.mobilegl.plugin.trace.TraceReplayActivity \
|
|
--es trace_path $APP_DIR/input/openra.trace \
|
|
--es golden_path $APP_DIR/input/openra.golden.png \
|
|
--es output_dir $APP_DIR/output \
|
|
--es diff_path $APP_DIR/output/openra-diff.png \
|
|
--es backend DirectGLES \
|
|
--el target_call 31249 \
|
|
--ei width 640 \
|
|
--ei height 480 \
|
|
--ei crop_x 1 \
|
|
--ei crop_y 1 \
|
|
--ei crop_width 638 \
|
|
--ei crop_height 478 \
|
|
--es ssim_threshold 0.99
|
|
```
|
|
|
|
Read back the result and images:
|
|
|
|
```sh
|
|
adb shell run-as $PKG cat files/trace-replay/output/result.json
|
|
adb exec-out run-as $PKG cat files/trace-replay/output/actual.png > openra-actual.png
|
|
adb exec-out run-as $PKG cat files/trace-replay/output/openra-diff.png > openra-diff.png
|
|
```
|
|
|
|
For the Vulkan backend, build and install `:app:assembleMagmaTraceDebug`, set
|
|
`PKG=top.mobilegl.plugin.magma.trace`, and pass `--es backend DirectVulkan`.
|
|
DirectGLES also renders to the Activity surface by default; pass
|
|
`--ez use_pbuffer true` to use the offscreen pbuffer path.
|