From e619552a5df5fdfa3c95efa0959ff2da20eac452 Mon Sep 17 00:00:00 2001 From: zmiao Date: Wed, 4 Dec 2019 18:10:58 +0200 Subject: [PATCH] [test-runner] Make Android RenderTestRunner bot fail when test cases are not fully passed (#15994) * [test-runner] Fix failed tests, generate android specific expectations * [test-runner] Check render test runner testing result * [test-runner] Add error case to android ignore list * [test-runner] Update metrics * [test-runner] Move Android render tests with big diff(>0.006) to ignore list --- circle.yml | 6 +++ next/platform/android/android.cmake | 15 +------- .../android/src/test/render_test_runner.cpp | 11 ++++-- .../android-manifest-probe-memory.json | 4 +- .../android-manifest-probe-network-gfx.json | 4 +- render-test/android-manifest.json | 6 +-- .../java/android/app/NativeActivityTest.java | 5 ++- .../java/android/app/TestState.java | 1 + .../android/app/src/main/assets/to_zip.txt | 4 +- .../expected.png | Bin 0 -> 429 bytes .../mapbox-gl-js#2305/expected.png | Bin 0 -> 52155 bytes .../mapbox-gl-js#5978/expected.png | Bin 0 -> 731 bytes .../sprites/1x-screen-1x-pattern/expected.png | Bin 0 -> 1600 bytes .../sprites/1x-screen-2x-pattern/expected.png | Bin 0 -> 1274 bytes .../sprites/2x-screen-1x-pattern/expected.png | Bin 0 -> 6342 bytes .../sprites/2x-screen-2x-pattern/expected.png | Bin 0 -> 4339 bytes render-test/ignores/android-temp-fail.json | 9 +++++ render-test/{ => ignores}/linux-ignores.json | 0 .../linux-manifest-probe-gfx-network.json | 2 +- render-test/linux-manifest-probe-memory.json | 2 +- render-test/linux-manifest.json | 2 +- render-test/linux-query-manifest.json | 2 +- .../round/segments/metrics.json | 35 ++++++++++++++++++ .../round/zero-gap-width/metrics.json | 35 ++++++++++++++++++ .../metrics.json | 35 ++++++++++++++++++ .../formatted-images-line/metrics.json | 35 ++++++++++++++++++ .../formatted-images-multiline/metrics.json | 35 ++++++++++++++++++ .../metrics.json | 35 ++++++++++++++++++ .../formatted-images-vertical/metrics.json | 35 ++++++++++++++++++ .../metrics.json | 35 ++++++++++++++++++ .../text-field/formatted-images/metrics.json | 35 ++++++++++++++++++ 31 files changed, 357 insertions(+), 31 deletions(-) create mode 100644 render-test/expected/android/render-tests/combinations/symbol-translucent--fill-translucent/expected.png create mode 100644 render-test/expected/android/render-tests/regressions/mapbox-gl-js#2305/expected.png create mode 100644 render-test/expected/android/render-tests/regressions/mapbox-gl-js#5978/expected.png create mode 100644 render-test/expected/android/render-tests/sprites/1x-screen-1x-pattern/expected.png create mode 100644 render-test/expected/android/render-tests/sprites/1x-screen-2x-pattern/expected.png create mode 100644 render-test/expected/android/render-tests/sprites/2x-screen-1x-pattern/expected.png create mode 100644 render-test/expected/android/render-tests/sprites/2x-screen-2x-pattern/expected.png create mode 100644 render-test/ignores/android-temp-fail.json rename render-test/{ => ignores}/linux-ignores.json (100%) create mode 100644 render-test/metrics/android/render-tests/line-dasharray/round/segments/metrics.json create mode 100644 render-test/metrics/android/render-tests/line-dasharray/round/zero-gap-width/metrics.json create mode 100644 render-test/metrics/android/render-tests/text-field/formatted-images-constant-size/metrics.json create mode 100644 render-test/metrics/android/render-tests/text-field/formatted-images-line/metrics.json create mode 100644 render-test/metrics/android/render-tests/text-field/formatted-images-multiline/metrics.json create mode 100644 render-test/metrics/android/render-tests/text-field/formatted-images-variable-anchors-justification/metrics.json create mode 100644 render-test/metrics/android/render-tests/text-field/formatted-images-vertical/metrics.json create mode 100644 render-test/metrics/android/render-tests/text-field/formatted-images-zoom-dependent-size/metrics.json create mode 100644 render-test/metrics/android/render-tests/text-field/formatted-images/metrics.json diff --git a/circle.yml b/circle.yml index 129033809..2cd1aa4b3 100644 --- a/circle.yml +++ b/circle.yml @@ -665,6 +665,12 @@ jobs: --device-ids flame --os-version-ids 29 --locales en --orientations portrait --timeout 20m \ --directories-to-pull /sdcard --results-dir render-test-app-${CIRCLE_BUILD_NUM} \ --no-record-video --no-performance-metrics + fi + - run: + name: Retrieve TestResult from gcloud + when: always + command: | + if [[ -n "${GCLOUD_SERVICE_ACCOUNT_JSON}" && -z "${SKIP_FIREBASE:-}" ]]; then testResult=$(gsutil ls gs://test-lab-186672a0qp5bq-ycr70axads3nc/render-test-app-${CIRCLE_BUILD_NUM}/**/*.html) mkdir -p /tmp/tests/render-test-app gsutil cp $testResult /tmp/tests/render-test-app | true diff --git a/next/platform/android/android.cmake b/next/platform/android/android.cmake index 0f8dd0431..29bc9c132 100644 --- a/next/platform/android/android.cmake +++ b/next/platform/android/android.cmake @@ -357,26 +357,15 @@ add_custom_command( -E copy ${MBGL_ROOT}/platform/node/test/ignores.json - ${MBGL_ROOT}/ignores/ignores.json - COMMAND - ${CMAKE_COMMAND} - -E - copy - ${MBGL_ROOT}/render-test/linux-ignores.json - ${MBGL_ROOT}/ignores/linux-ignores.json + ${MBGL_ROOT}/render-test/ignores/ignores.json COMMAND ${CMAKE_COMMAND} -E tar - "chvf" + "chf" "render-test/android/app/src/main/assets/data.zip" --format=zip --files-from=render-test/android/app/src/main/assets/to_zip.txt - COMMAND - ${CMAKE_COMMAND} - -E - remove_directory - ${MBGL_ROOT}/ignores COMMAND ${CMAKE_COMMAND} -E diff --git a/platform/android/src/test/render_test_runner.cpp b/platform/android/src/test/render_test_runner.cpp index d0af8d21a..7e209aff3 100644 --- a/platform/android/src/test/render_test_runner.cpp +++ b/platform/android/src/test/render_test_runner.cpp @@ -79,7 +79,7 @@ std::string jstringToStdString(JNIEnv* env, jstring jStr) { return ret; } -void changeState(JNIEnv* env, struct android_app* app) { +void changeState(JNIEnv* env, struct android_app* app, bool result) { jobject nativeActivity = app->activity->clazz; jclass acl = env->GetObjectClass(nativeActivity); jmethodID getClassLoader = env->GetMethodID(acl, "getClassLoader", "()Ljava/lang/ClassLoader;"); @@ -89,6 +89,8 @@ void changeState(JNIEnv* env, struct android_app* app) { JavaWrapper strClassName(env, env->NewStringUTF("android.app.TestState")); jclass testStateClass = static_cast(env->CallObjectMethod(cls, findClass, strClassName.get())); if (testStateClass != NULL) { + jfieldID id0 = env->GetStaticFieldID(testStateClass, "testResult", "Z"); + env->SetStaticBooleanField(testStateClass, id0, result); jfieldID id = env->GetStaticFieldID(testStateClass, "running", "Z"); env->SetStaticBooleanField(testStateClass, id, false); } @@ -278,10 +280,11 @@ void android_main(struct android_app* app) { mbgl::Log::Info(mbgl::Event::General, "End running RenderTestRunner with manifest: '%s'", manifest.c_str()); return result; }; - runTestWithManifest("/android-manifest-probe-network-gfx.json"); - runTestWithManifest("/android-manifest-probe-memory.json"); + + auto result = runTestWithManifest("/android-manifest-probe-network-gfx.json"); + result = runTestWithManifest("/android-manifest-probe-memory.json") && result; mbgl::Log::Info(mbgl::Event::General, "All tests are finished!"); - changeState(env, app); + changeState(env, app, result); } while (true) { ALooper_pollAll(0, &outFd, &outEvents, reinterpret_cast(&source)); diff --git a/render-test/android-manifest-probe-memory.json b/render-test/android-manifest-probe-memory.json index a3562088f..a90d39ee8 100644 --- a/render-test/android-manifest-probe-memory.json +++ b/render-test/android-manifest-probe-memory.json @@ -1,7 +1,7 @@ { "base_test_path":"mapbox-gl-js/test/integration", - "expectation_paths":["render-test/expected"], - "ignore_paths":["ignores/ignores.json", "ignores/linux-ignores.json"], + "expectation_paths":["render-test/expected", "render-test/expected/android"], + "ignore_paths":["render-test/ignores/ignores.json", "render-test/ignores/linux-ignores.json", "render-test/ignores/android-temp-fail.json"], "vendor_path":"vendor", "asset_path": "mapbox-gl-js/test/integration", "result_path":"/sdcard/", diff --git a/render-test/android-manifest-probe-network-gfx.json b/render-test/android-manifest-probe-network-gfx.json index b16424d99..c7b45417d 100644 --- a/render-test/android-manifest-probe-network-gfx.json +++ b/render-test/android-manifest-probe-network-gfx.json @@ -1,7 +1,7 @@ { "base_test_path":"mapbox-gl-js/test/integration", - "expectation_paths":["render-test/expected"], - "ignore_paths":["ignores/ignores.json", "ignores/linux-ignores.json"], + "expectation_paths":["render-test/expected", "render-test/expected/android"], + "ignore_paths":["render-test/ignores/ignores.json", "render-test/ignores/linux-ignores.json", "render-test/ignores/android-temp-fail.json"], "vendor_path":"vendor", "asset_path": "mapbox-gl-js/test/integration", "result_path":"/sdcard/", diff --git a/render-test/android-manifest.json b/render-test/android-manifest.json index ddc91d193..00783aba6 100644 --- a/render-test/android-manifest.json +++ b/render-test/android-manifest.json @@ -1,10 +1,10 @@ { "base_test_path":"mapbox-gl-js/test/integration", - "expectation_paths":["render-test/expected"], + "expectation_paths":["render-test/expected", "render-test/expected/android"], "ignore_paths":["ignores/ignores.json", "ignores/linux-ignores.json"], "vendor_path":"vendor", "asset_path": "mapbox-gl-js/test/integration", - "result_path":"/sdcard/", + "result_path": "/sdcard/", "probes": ["probeGFX", "probeNetwork"], "metric_path":"render-test/metrics/android" -} \ No newline at end of file +} diff --git a/render-test/android/app/src/androidTest/java/android/app/NativeActivityTest.java b/render-test/android/app/src/androidTest/java/android/app/NativeActivityTest.java index 3d8c33390..d508a9d5a 100644 --- a/render-test/android/app/src/androidTest/java/android/app/NativeActivityTest.java +++ b/render-test/android/app/src/androidTest/java/android/app/NativeActivityTest.java @@ -6,6 +6,7 @@ import androidx.test.rule.ActivityTestRule; import org.junit.Rule; import org.junit.Test; +import org.junit.Assert; import org.junit.runner.RunWith; import android.util.Log; @@ -24,6 +25,8 @@ public class NativeActivityTest { Log.v("Test", "Test is running"); Thread.sleep(1000L); } - Log.v("Test", "End the test"); + Log.v("Test", "All render tests are finished!"); + Assert.assertTrue("All test cases are passed", TestState.testResult); + } } \ No newline at end of file diff --git a/render-test/android/app/src/androidTest/java/android/app/TestState.java b/render-test/android/app/src/androidTest/java/android/app/TestState.java index 44a0653fb..b374a72af 100644 --- a/render-test/android/app/src/androidTest/java/android/app/TestState.java +++ b/render-test/android/app/src/androidTest/java/android/app/TestState.java @@ -2,4 +2,5 @@ package android.app; public class TestState { static boolean running = true; + static boolean testResult = true; } \ No newline at end of file diff --git a/render-test/android/app/src/main/assets/to_zip.txt b/render-test/android/app/src/main/assets/to_zip.txt index fbf953958..e440a7c51 100644 --- a/render-test/android/app/src/main/assets/to_zip.txt +++ b/render-test/android/app/src/main/assets/to_zip.txt @@ -12,8 +12,8 @@ mapbox-gl-js/test/integration/sprites/ vendor/mapbox-gl-styles/styles/ vendor/mapbox-gl-styles/sprites/ vendor/mvt-fixtures/real-world/ -ignores/ +render-test/ignores/ render-test/metrics/android/ render-test/expected/ android-manifest-probe-network-gfx.json -android-manifest-probe-memory.json \ No newline at end of file +android-manifest-probe-memory.json diff --git a/render-test/expected/android/render-tests/combinations/symbol-translucent--fill-translucent/expected.png b/render-test/expected/android/render-tests/combinations/symbol-translucent--fill-translucent/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..6a14209d0d8d870020e2909a4881c02d6c3616fc GIT binary patch literal 429 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 literal 0 HcmV?d00001 diff --git a/render-test/expected/android/render-tests/sprites/1x-screen-1x-pattern/expected.png b/render-test/expected/android/render-tests/sprites/1x-screen-1x-pattern/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..e4564aeee873c6929046fac406afa7ae6b53457c GIT binary patch literal 1600 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 literal 0 HcmV?d00001 diff --git a/render-test/expected/android/render-tests/sprites/2x-screen-1x-pattern/expected.png b/render-test/expected/android/render-tests/sprites/2x-screen-1x-pattern/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..0756d836524a35d9d03eac1ff8c0ba8857edf58a GIT binary patch literal 6342 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 b`iweXta~F{A?)w>20&d!Q@KRRGT{FJG5M9j literal 0 HcmV?d00001 diff --git a/render-test/ignores/android-temp-fail.json b/render-test/ignores/android-temp-fail.json new file mode 100644 index 000000000..655c69752 --- /dev/null +++ b/render-test/ignores/android-temp-fail.json @@ -0,0 +1,9 @@ +{ + "render-tests/icon-text-fit/both-text-anchor-1x-image-2x-screen": "Temporarily fails as android test app does not derefence symbolinks in sprites folder.", + "render-tests/icon-text-fit/both-text-anchor-2x-image-1x-screen": "Temporarily fails as android test app does not derefence symbolinks in sprites folder.", + "render-tests/regressions/mapbox-gl-native#9976": "Needs to be investigated and fixed.", + "render-tests/regressions/mapbox-gl-js#5911a": "Needs to be investigated and fixed.", + "render-tests/line-pattern/overscaled": "Needs to be investigated and fixed.", + "render-tests/runtime-styling/image-add-pattern": "Needs to be investigated and fixed.", + "render-tests/runtime-styling/image-update-pattern": "Needs to be investigated and fixed." +} diff --git a/render-test/linux-ignores.json b/render-test/ignores/linux-ignores.json similarity index 100% rename from render-test/linux-ignores.json rename to render-test/ignores/linux-ignores.json diff --git a/render-test/linux-manifest-probe-gfx-network.json b/render-test/linux-manifest-probe-gfx-network.json index b63013ca1..fedf9fa6b 100644 --- a/render-test/linux-manifest-probe-gfx-network.json +++ b/render-test/linux-manifest-probe-gfx-network.json @@ -1,7 +1,7 @@ { "base_test_path":"../mapbox-gl-js/test/integration", "expectation_paths":["expected/"], - "ignore_paths":["../platform/node/test/ignores.json", "../render-test/linux-ignores.json"], + "ignore_paths":["../platform/node/test/ignores.json", "../render-test/ignores/linux-ignores.json"], "vendor_path":"../vendor", "asset_path": "../mapbox-gl-js/test/integration", "probes": ["probeGFX", "probeNetwork"], diff --git a/render-test/linux-manifest-probe-memory.json b/render-test/linux-manifest-probe-memory.json index 25b59e4a4..e21326875 100644 --- a/render-test/linux-manifest-probe-memory.json +++ b/render-test/linux-manifest-probe-memory.json @@ -1,7 +1,7 @@ { "base_test_path":"../mapbox-gl-js/test/integration", "expectation_paths":["expected/"], - "ignore_paths":["../platform/node/test/ignores.json", "../render-test/linux-ignores.json"], + "ignore_paths":["../platform/node/test/ignores.json", "../render-test/ignores/linux-ignores.json"], "vendor_path":"../vendor", "asset_path": "../mapbox-gl-js/test/integration", "probes": ["probeMemory"], diff --git a/render-test/linux-manifest.json b/render-test/linux-manifest.json index cc72a7446..91b062c2c 100644 --- a/render-test/linux-manifest.json +++ b/render-test/linux-manifest.json @@ -1,7 +1,7 @@ { "base_test_path":"../mapbox-gl-js/test/integration", "expectation_paths":["expected/"], - "ignore_paths":["../platform/node/test/ignores.json", "../render-test/linux-ignores.json"], + "ignore_paths":["../platform/node/test/ignores.json", "../render-test/ignores/linux-ignores.json"], "vendor_path":"../vendor", "asset_path": "../mapbox-gl-js/test/integration" } \ No newline at end of file diff --git a/render-test/linux-query-manifest.json b/render-test/linux-query-manifest.json index a6723f551..6d2071b19 100644 --- a/render-test/linux-query-manifest.json +++ b/render-test/linux-query-manifest.json @@ -1,6 +1,6 @@ { "base_test_path":"../mapbox-gl-js/test/integration", - "ignore_paths":["../platform/node/test/ignores.json", "../render-test/linux-ignores.json"], + "ignore_paths":["../platform/node/test/ignores.json", "../render-test/ignores/linux-ignores.json"], "vendor_path":"../vendor", "asset_path": "../mapbox-gl-js/test/integration" } \ No newline at end of file diff --git a/render-test/metrics/android/render-tests/line-dasharray/round/segments/metrics.json b/render-test/metrics/android/render-tests/line-dasharray/round/segments/metrics.json new file mode 100644 index 000000000..d3af31170 --- /dev/null +++ b/render-test/metrics/android/render-tests/line-dasharray/round/segments/metrics.json @@ -0,0 +1,35 @@ +{ + "network": [ + [ + "probeNetwork - default - end", + 0, + 0 + ], + [ + "probeNetwork - default - start", + 0, + 0 + ] + ], + "gfx": [ + [ + "probeGFX - default - end", + 2, + 4, + 9, + 1, + [ + 36864, + 36864 + ], + [ + 202, + 202 + ], + [ + 704, + 704 + ] + ] + ] +} \ No newline at end of file diff --git a/render-test/metrics/android/render-tests/line-dasharray/round/zero-gap-width/metrics.json b/render-test/metrics/android/render-tests/line-dasharray/round/zero-gap-width/metrics.json new file mode 100644 index 000000000..d3af31170 --- /dev/null +++ b/render-test/metrics/android/render-tests/line-dasharray/round/zero-gap-width/metrics.json @@ -0,0 +1,35 @@ +{ + "network": [ + [ + "probeNetwork - default - end", + 0, + 0 + ], + [ + "probeNetwork - default - start", + 0, + 0 + ] + ], + "gfx": [ + [ + "probeGFX - default - end", + 2, + 4, + 9, + 1, + [ + 36864, + 36864 + ], + [ + 202, + 202 + ], + [ + 704, + 704 + ] + ] + ] +} \ No newline at end of file diff --git a/render-test/metrics/android/render-tests/text-field/formatted-images-constant-size/metrics.json b/render-test/metrics/android/render-tests/text-field/formatted-images-constant-size/metrics.json new file mode 100644 index 000000000..1ebdc9b09 --- /dev/null +++ b/render-test/metrics/android/render-tests/text-field/formatted-images-constant-size/metrics.json @@ -0,0 +1,35 @@ +{ + "network": [ + [ + "probeNetwork - default - end", + 3, + 161976 + ], + [ + "probeNetwork - default - start", + 0, + 0 + ] + ], + "gfx": [ + [ + "probeGFX - default - end", + 2, + 4, + 13, + 1, + [ + 24580, + 24580 + ], + [ + 190, + 190 + ], + [ + 1856, + 1856 + ] + ] + ] +} \ No newline at end of file diff --git a/render-test/metrics/android/render-tests/text-field/formatted-images-line/metrics.json b/render-test/metrics/android/render-tests/text-field/formatted-images-line/metrics.json new file mode 100644 index 000000000..f7f0edc2f --- /dev/null +++ b/render-test/metrics/android/render-tests/text-field/formatted-images-line/metrics.json @@ -0,0 +1,35 @@ +{ + "network": [ + [ + "probeNetwork - default - end", + 3, + 120865 + ], + [ + "probeNetwork - default - start", + 0, + 0 + ] + ], + "gfx": [ + [ + "probeGFX - default - end", + 3, + 4, + 11, + 1, + [ + 28318, + 28318 + ], + [ + 190, + 190 + ], + [ + 1424, + 1424 + ] + ] + ] +} \ No newline at end of file diff --git a/render-test/metrics/android/render-tests/text-field/formatted-images-multiline/metrics.json b/render-test/metrics/android/render-tests/text-field/formatted-images-multiline/metrics.json new file mode 100644 index 000000000..5dfadecdc --- /dev/null +++ b/render-test/metrics/android/render-tests/text-field/formatted-images-multiline/metrics.json @@ -0,0 +1,35 @@ +{ + "network": [ + [ + "probeNetwork - default - end", + 3, + 120865 + ], + [ + "probeNetwork - default - start", + 0, + 0 + ] + ], + "gfx": [ + [ + "probeGFX - default - end", + 2, + 6, + 13, + 1, + [ + 44921, + 44921 + ], + [ + 310, + 310 + ], + [ + 3136, + 3136 + ] + ] + ] +} \ No newline at end of file diff --git a/render-test/metrics/android/render-tests/text-field/formatted-images-variable-anchors-justification/metrics.json b/render-test/metrics/android/render-tests/text-field/formatted-images-variable-anchors-justification/metrics.json new file mode 100644 index 000000000..312dedfbf --- /dev/null +++ b/render-test/metrics/android/render-tests/text-field/formatted-images-variable-anchors-justification/metrics.json @@ -0,0 +1,35 @@ +{ + "network": [ + [ + "probeNetwork - default - end", + 3, + 161976 + ], + [ + "probeNetwork - default - start", + 0, + 0 + ] + ], + "gfx": [ + [ + "probeGFX - default - end", + 1, + 4, + 9, + 1, + [ + 24580, + 24580 + ], + [ + 2290, + 2290 + ], + [ + 24256, + 24256 + ] + ] + ] +} \ No newline at end of file diff --git a/render-test/metrics/android/render-tests/text-field/formatted-images-vertical/metrics.json b/render-test/metrics/android/render-tests/text-field/formatted-images-vertical/metrics.json new file mode 100644 index 000000000..e4a881696 --- /dev/null +++ b/render-test/metrics/android/render-tests/text-field/formatted-images-vertical/metrics.json @@ -0,0 +1,35 @@ +{ + "network": [ + [ + "probeNetwork - default - end", + 4, + 255564 + ], + [ + "probeNetwork - default - start", + 0, + 0 + ] + ], + "gfx": [ + [ + "probeGFX - default - end", + 1, + 4, + 9, + 1, + [ + 35756, + 35756 + ], + [ + 310, + 310 + ], + [ + 3136, + 3136 + ] + ] + ] +} \ No newline at end of file diff --git a/render-test/metrics/android/render-tests/text-field/formatted-images-zoom-dependent-size/metrics.json b/render-test/metrics/android/render-tests/text-field/formatted-images-zoom-dependent-size/metrics.json new file mode 100644 index 000000000..7cf8a26c5 --- /dev/null +++ b/render-test/metrics/android/render-tests/text-field/formatted-images-zoom-dependent-size/metrics.json @@ -0,0 +1,35 @@ +{ + "network": [ + [ + "probeNetwork - default - end", + 3, + 161976 + ], + [ + "probeNetwork - default - start", + 0, + 0 + ] + ], + "gfx": [ + [ + "probeGFX - default - end", + 2, + 13, + 13, + 1, + [ + 98636, + 98636 + ], + [ + 142, + 142 + ], + [ + 1344, + 1344 + ] + ] + ] +} \ No newline at end of file diff --git a/render-test/metrics/android/render-tests/text-field/formatted-images/metrics.json b/render-test/metrics/android/render-tests/text-field/formatted-images/metrics.json new file mode 100644 index 000000000..1c7d44f5f --- /dev/null +++ b/render-test/metrics/android/render-tests/text-field/formatted-images/metrics.json @@ -0,0 +1,35 @@ +{ + "network": [ + [ + "probeNetwork - default - end", + 3, + 161976 + ], + [ + "probeNetwork - default - start", + 0, + 0 + ] + ], + "gfx": [ + [ + "probeGFX - default - end", + 3, + 4, + 17, + 1, + [ + 52510, + 52510 + ], + [ + 166, + 166 + ], + [ + 1600, + 1600 + ] + ] + ] +} \ No newline at end of file