diff --git a/scripts/code_generation_hashes/restricted_traces.json b/scripts/code_generation_hashes/restricted_traces.json
index d077cb7..65e5823 100644
--- a/scripts/code_generation_hashes/restricted_traces.json
+++ b/scripts/code_generation_hashes/restricted_traces.json
@@ -2,13 +2,13 @@
   "src/tests/restricted_traces/.gitignore":
     "111524060c1eb48a1969a91f8ae13e59",
   "src/tests/restricted_traces/gen_restricted_traces.py":
-    "f59f4c6c0891917ae0db0b95b3d67a52",
+    "7af1825f7a46ece5f93947c2b16a7839",
   "src/tests/restricted_traces/restricted_traces.json":
     "b7d9e3fe8e34d206a147d6be3a60a688",
   "src/tests/restricted_traces/restricted_traces_autogen.cpp":
-    "756ac60386e3ce26bb15f71ffec4a954",
+    "8d6a8004aaf1aa00cb8b525940dd6f7d",
   "src/tests/restricted_traces/restricted_traces_autogen.gni":
     "3016d2852c61cbb5dbf876b787cabe10",
   "src/tests/restricted_traces/restricted_traces_autogen.h":
-    "c6e084559bb22c362e307dba25264a4c"
+    "4da2eb50842afbb7c1023b395f4bfb8e"
 }
\ No newline at end of file
diff --git a/src/tests/perf_tests/TracePerfTest.cpp b/src/tests/perf_tests/TracePerfTest.cpp
index 23f29f8..734bbcc 100644
--- a/src/tests/perf_tests/TracePerfTest.cpp
+++ b/src/tests/perf_tests/TracePerfTest.cpp
@@ -9,6 +9,7 @@
 
 #include <gtest/gtest.h>
 #include "common/PackedEnums.h"
+#include "common/string_utils.h"
 #include "common/system_utils.h"
 #include "tests/perf_tests/ANGLEPerfTest.h"
 #include "tests/perf_tests/ANGLEPerfTestArgs.h"
@@ -20,7 +21,11 @@
 
 #include "restricted_traces/restricted_traces_autogen.h"
 
+#include <rapidjson/document.h>
+#include <rapidjson/istreamwrapper.h>
+
 #include <cassert>
+#include <fstream>
 #include <functional>
 #include <sstream>
 
@@ -42,6 +47,8 @@
 
 namespace
 {
+constexpr size_t kMaxPath = 1024;
+
 struct TracePerfParams final : public RenderTestParams
 {
     // Common default options
@@ -54,11 +61,11 @@
     std::string story() const override
     {
         std::stringstream strstr;
-        strstr << RenderTestParams::story() << "_" << GetTraceInfo(testID).name;
+        strstr << RenderTestParams::story() << "_" << traceInfo.name;
         return strstr.str();
     }
 
-    RestrictedTraceID testID;
+    TraceInfo traceInfo;
 };
 
 std::ostream &operator<<(std::ostream &os, const TracePerfParams &params)
@@ -108,15 +115,25 @@
 
     double getHostTimeFromGLTime(GLint64 glTime);
 
+    uint32_t frameCount() const
+    {
+        const TraceInfo &traceInfo = mParams.traceInfo;
+        return traceInfo.endFrame - traceInfo.startFrame + 1;
+    }
+
     int getStepAlignment() const override
     {
         // Align step counts to the number of frames in a trace.
-        const TraceInfo &traceInfo = GetTraceInfo(mParams.testID);
-        return static_cast<int>(traceInfo.endFrame - traceInfo.startFrame + 1);
+        return static_cast<int>(frameCount());
     }
 
     void TestBody() override { run(); }
 
+    bool traceNameIs(const char *name) const
+    {
+        return strncmp(name, mParams.traceInfo.name, kTraceInfoMaxNameLen) == 0;
+    }
+
   private:
     struct QueryInfo
     {
@@ -631,37 +648,36 @@
     gCurrentTracePerfTest->validateSerializedState(serializedState, fileName, line);
 }
 
+constexpr char kTraceTestFolder[] = "src/tests/restricted_traces";
+
+bool FindTraceTestDataPath(const char *traceName, char *testDataDirOut, size_t maxDataDirLen)
+{
+    char relativeTestDataDir[kMaxPath] = {};
+    snprintf(relativeTestDataDir, kMaxPath, "%s%s", kTraceTestFolder, traceName);
+    return angle::FindTestDataPath(relativeTestDataDir, testDataDirOut, maxDataDirLen);
+}
+
+bool FindRootTraceTestDataPath(char *testDataDirOut, size_t maxDataDirLen)
+{
+    return angle::FindTestDataPath(kTraceTestFolder, testDataDirOut, maxDataDirLen);
+}
+
 TracePerfTest::TracePerfTest(const TracePerfParams &params)
     : ANGLERenderTest("TracePerf", params, "ms"), mParams(params), mStartFrame(0), mEndFrame(0)
 {
     // TODO: http://anglebug.com/4533 This fails after the upgrade to the 26.20.100.7870 driver.
-    if (IsWindows() && IsIntel() && mParams.getRenderer() == EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE &&
-        mParams.testID == RestrictedTraceID::manhattan_10)
+    if (IsWindows() && IsIntel() && mParams.isVulkan() && traceNameIs("manhattan_10"))
     {
         mSkipTest = true;
     }
 
     // TODO: http://anglebug.com/4731 Fails on older Intel drivers. Passes in newer.
-    if (IsWindows() && IsIntel() && mParams.driver != GLESDriverType::AngleEGL &&
-        mParams.testID == RestrictedTraceID::angry_birds_2_1500)
+    if (IsWindows() && IsIntel() && !mParams.isANGLE() && traceNameIs("angry_birds_2_1500"))
     {
         mSkipTest = true;
     }
 
-    if (mParams.surfaceType != SurfaceType::Window && !gEnableAllTraceTests)
-    {
-        printf("Test skipped. Use --enable-all-trace-tests to run.\n");
-        mSkipTest = true;
-    }
-
-    if (mParams.eglParameters.deviceType != EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE &&
-        !gEnableAllTraceTests)
-    {
-        printf("Test skipped. Use --enable-all-trace-tests to run.\n");
-        mSkipTest = true;
-    }
-
-    if (mParams.testID == RestrictedTraceID::cod_mobile)
+    if (traceNameIs("cod_mobile"))
     {
         // TODO: http://anglebug.com/4967 Vulkan: GL_EXT_color_buffer_float not supported on Pixel 2
         // The COD:Mobile trace uses a framebuffer attachment with:
@@ -675,62 +691,62 @@
         addExtensionPrerequisite("GL_OES_EGL_image_external");
     }
 
-    if (mParams.testID == RestrictedTraceID::brawl_stars)
+    if (traceNameIs("brawl_stars"))
     {
         addExtensionPrerequisite("GL_EXT_shadow_samplers");
     }
 
-    if (mParams.testID == RestrictedTraceID::free_fire)
+    if (traceNameIs("free_fire"))
     {
         addExtensionPrerequisite("GL_OES_EGL_image_external");
     }
 
-    if (mParams.testID == RestrictedTraceID::marvel_contest_of_champions)
+    if (traceNameIs("marvel_contest_of_champions"))
     {
         addExtensionPrerequisite("GL_EXT_color_buffer_half_float");
     }
 
-    if (mParams.testID == RestrictedTraceID::world_of_tanks_blitz)
+    if (traceNameIs("world_of_tanks_blitz"))
     {
         addExtensionPrerequisite("GL_EXT_disjoint_timer_query");
     }
 
-    if (mParams.testID == RestrictedTraceID::dragon_ball_legends)
+    if (traceNameIs("dragon_ball_legends"))
     {
         addExtensionPrerequisite("GL_KHR_texture_compression_astc_ldr");
     }
 
-    if (mParams.testID == RestrictedTraceID::lego_legacy)
+    if (traceNameIs("lego_legacy"))
     {
         addExtensionPrerequisite("GL_EXT_shadow_samplers");
     }
 
-    if (mParams.testID == RestrictedTraceID::world_war_doh)
+    if (traceNameIs("world_war_doh"))
     {
-        // Linux+Nvidia doesn't support GL_KHR_texture_compression_astc_ldr (possibly others also)
+        // Linux+NVIDIA doesn't support GL_KHR_texture_compression_astc_ldr (possibly others also)
         addExtensionPrerequisite("GL_KHR_texture_compression_astc_ldr");
     }
 
-    if (mParams.testID == RestrictedTraceID::saint_seiya_awakening)
+    if (traceNameIs("saint_seiya_awakening"))
     {
         addExtensionPrerequisite("GL_EXT_shadow_samplers");
 
         // TODO(https://anglebug.com/5517) Linux+Intel generates "Framebuffer is incomplete" errors.
-        if (IsLinux() && IsIntel() && mParams.getRenderer() == EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE)
+        if (IsLinux() && IsIntel() && mParams.isVulkan())
         {
             mSkipTest = true;
         }
     }
 
-    if (mParams.testID == RestrictedTraceID::magic_tiles_3)
+    if (traceNameIs("magic_tiles_3"))
     {
-        // Linux+Nvidia doesn't support GL_KHR_texture_compression_astc_ldr (possibly others also)
+        // Linux+NVIDIA doesn't support GL_KHR_texture_compression_astc_ldr (possibly others also)
         addExtensionPrerequisite("GL_KHR_texture_compression_astc_ldr");
     }
 
-    if (mParams.testID == RestrictedTraceID::real_gangster_crime)
+    if (traceNameIs("real_gangster_crime"))
     {
-        // Linux+Nvidia doesn't support GL_KHR_texture_compression_astc_ldr (possibly others also)
+        // Linux+NVIDIA doesn't support GL_KHR_texture_compression_astc_ldr (possibly others also)
         addExtensionPrerequisite("GL_KHR_texture_compression_astc_ldr");
 
         // Intel doesn't support external images.
@@ -743,37 +759,36 @@
         }
     }
 
-    if (mParams.testID == RestrictedTraceID::asphalt_8)
+    if (traceNameIs("asphalt_8"))
     {
         addExtensionPrerequisite("GL_KHR_texture_compression_astc_ldr");
     }
 
-    if (mParams.testID == RestrictedTraceID::hearthstone)
+    if (traceNameIs("hearthstone"))
     {
         addExtensionPrerequisite("GL_KHR_texture_compression_astc_ldr");
     }
 
-    if (mParams.testID == RestrictedTraceID::efootball_pes_2021)
+    if (traceNameIs("efootball_pes_2021"))
     {
         // TODO(https://anglebug.com/5517) Linux+Intel and Pixel 2 generate "Framebuffer is
         // incomplete" errors with the Vulkan backend.
-        if (mParams.getRenderer() == EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE &&
-            ((IsLinux() && IsIntel()) || IsPixel2()))
+        if (mParams.isVulkan() && ((IsLinux() && IsIntel()) || IsPixel2()))
         {
             mSkipTest = true;
         }
     }
 
-    if (mParams.testID == RestrictedTraceID::manhattan_31)
+    if (traceNameIs("manhattan_31"))
     {
         // TODO: http://anglebug.com/5591 Trace crashes on Pixel 2 in vulkan driver
-        if (IsPixel2() && mParams.getRenderer() == EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE)
+        if (IsPixel2() && mParams.isVulkan())
         {
             mSkipTest = true;
         }
     }
 
-    if (mParams.testID == RestrictedTraceID::idle_heroes)
+    if (traceNameIs("idle_heroes"))
     {
         // TODO: http://anglebug.com/5591 Trace crashes on Pixel 2
         if (IsPixel2())
@@ -782,118 +797,113 @@
         }
     }
 
-    if (mParams.testID == RestrictedTraceID::shadow_fight_2)
+    if (traceNameIs("shadow_fight_2"))
     {
         addExtensionPrerequisite("GL_OES_EGL_image_external");
         addExtensionPrerequisite("GL_KHR_texture_compression_astc_ldr");
     }
 
-    if (mParams.testID == RestrictedTraceID::rise_of_kingdoms)
+    if (traceNameIs("rise_of_kingdoms"))
     {
         addExtensionPrerequisite("GL_OES_EGL_image_external");
     }
 
-    if (mParams.testID == RestrictedTraceID::happy_color)
+    if (traceNameIs("happy_color"))
     {
-        if (IsWindows() && IsAMD() && mParams.getRenderer() == EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE)
+        if (IsWindows() && IsAMD() && mParams.isVulkan())
         {
             mSkipTest = true;
         }
     }
 
-    if (mParams.testID == RestrictedTraceID::bus_simulator_indonesia)
+    if (traceNameIs("bus_simulator_indonesia"))
     {
         // TODO(https://anglebug.com/5629) Linux+(Intel|AMD) native GLES generates
         // GL_INVALID_OPERATION
-        if (IsLinux() && (IsIntel() || IsAMD()) &&
-            mParams.getRenderer() != EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE)
+        if (IsLinux() && (IsIntel() || IsAMD()) && !mParams.isVulkan())
         {
             mSkipTest = true;
         }
     }
 
-    if (mParams.testID == RestrictedTraceID::messenger_lite)
+    if (traceNameIs("messenger_lite"))
     {
-        // TODO: https://anglebug.com/5663 Incorrect pixels on Nvidia Windows for first frame
-        if (IsWindows() && IsNVIDIA() &&
-            mParams.getRenderer() == EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE &&
-            mParams.getDeviceType() != EGL_PLATFORM_ANGLE_DEVICE_TYPE_SWIFTSHADER_ANGLE)
+        // TODO: https://anglebug.com/5663 Incorrect pixels on NVIDIA Windows for first frame
+        if (IsWindows() && IsNVIDIA() && mParams.isVulkan() && !mParams.isSwiftshader())
         {
             mSkipTest = true;
         }
     }
 
-    if (mParams.testID == RestrictedTraceID::among_us)
+    if (traceNameIs("among_us"))
     {
         addExtensionPrerequisite("GL_KHR_texture_compression_astc_ldr");
     }
 
-    if (mParams.testID == RestrictedTraceID::car_parking_multiplayer)
+    if (traceNameIs("car_parking_multiplayer"))
     {
-        // TODO: https://anglebug.com/5613 Nvidia native driver spews undefined behavior warnings
-        if (IsNVIDIA() && mParams.getRenderer() != EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE)
+        // TODO: https://anglebug.com/5613 NVIDIA native driver spews undefined behavior warnings
+        if (IsNVIDIA() && !mParams.isVulkan())
         {
             mSkipTest = true;
         }
         // TODO: https://anglebug.com/5724 Device lost on Win Intel
-        if (IsWindows() && IsIntel() &&
-            mParams.getRenderer() == EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE)
+        if (IsWindows() && IsIntel() && mParams.isVulkan())
         {
             mSkipTest = true;
         }
     }
 
-    if (mParams.testID == RestrictedTraceID::fifa_mobile)
+    if (traceNameIs("fifa_mobile"))
     {
         // TODO: http://anglebug.com/5875 Intel Windows Vulkan flakily renders entirely black
-        if (IsWindows() && IsIntel() &&
-            mParams.getRenderer() == EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE)
+        if (IsWindows() && IsIntel() && mParams.isVulkan())
         {
             mSkipTest = true;
         }
     }
 
-    if (mParams.testID == RestrictedTraceID::rope_hero_vice_town)
+    if (traceNameIs("rope_hero_vice_town"))
     {
         // TODO: http://anglebug.com/5716 Trace crashes on Pixel 2 in vulkan driver
-        if (IsPixel2() && mParams.getRenderer() == EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE)
+        if (IsPixel2() && mParams.isVulkan())
         {
             mSkipTest = true;
         }
     }
 
-    if (mParams.testID == RestrictedTraceID::extreme_car_driving_simulator)
+    if (traceNameIs("extreme_car_driving_simulator"))
     {
         addExtensionPrerequisite("GL_KHR_texture_compression_astc_ldr");
     }
 
-    if (mParams.testID == RestrictedTraceID::plants_vs_zombies_2)
+    if (traceNameIs("plants_vs_zombies_2"))
     {
         // TODO: http://crbug.com/1187752 Corrupted image
-        if (IsWindows() && IsAMD() && mParams.getRenderer() == EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE)
+        if (IsWindows() && IsAMD() && mParams.isVulkan())
         {
             mSkipTest = true;
         }
     }
 
-    if (mParams.testID == RestrictedTraceID::junes_journey)
+    if (traceNameIs("junes_journey"))
     {
         addExtensionPrerequisite("GL_OES_EGL_image_external");
     }
 
-    if (mParams.testID == RestrictedTraceID::ragnarok_m_eternal_love)
+    if (traceNameIs("ragnarok_m_eternal_love"))
     {
         addExtensionPrerequisite("GL_OES_EGL_image_external");
         addExtensionPrerequisite("GL_KHR_texture_compression_astc_ldr");
 
         // TODO: http://anglebug.com/5772 Pixel 2 errors with "Framebuffer is incomplete" on Vulkan
-        if (IsPixel2() && mParams.getRenderer() == EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE)
+        if (IsPixel2() && mParams.isVulkan())
         {
             mSkipTest = true;
         }
     }
 
-    if (mParams.testID == RestrictedTraceID::real_cricket_20)
+    if (traceNameIs("real_cricket_20"))
     {
         // TODO: http://anglebug.com/5777 ARM doesn't have enough VS storage blocks
         if (IsAndroid() && IsARM())
@@ -902,44 +912,43 @@
         }
     }
 
-    if (mParams.testID == RestrictedTraceID::league_of_legends_wild_rift)
+    if (traceNameIs("league_of_legends_wild_rift"))
     {
         addExtensionPrerequisite("GL_OES_EGL_image_external");
         addExtensionPrerequisite("GL_KHR_texture_compression_astc_ldr");
 
         // TODO: http://anglebug.com/5815 Trace is crashing on Intel Linux
-        if (IsLinux() && IsIntel() && mParams.getRenderer() == EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE)
+        if (IsLinux() && IsIntel() && mParams.isVulkan())
         {
             mSkipTest = true;
         }
     }
 
-    if (mParams.testID == RestrictedTraceID::aztec_ruins)
+    if (traceNameIs("aztec_ruins"))
     {
         addExtensionPrerequisite("GL_KHR_texture_compression_astc_ldr");
 
         // TODO: http://anglebug.com/5553 Pixel 2 errors with "Framebuffer is incomplete" on Vulkan
-        if (IsPixel2() && mParams.getRenderer() == EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE)
+        if (IsPixel2() && mParams.isVulkan())
         {
             mSkipTest = true;
         }
     }
 
-    if (mParams.testID == RestrictedTraceID::dragon_raja)
+    if (traceNameIs("dragon_raja"))
     {
         addExtensionPrerequisite("GL_OES_EGL_image_external");
 
         // TODO: http://anglebug.com/5807 Intel Linux and Pixel 2 error with "Framebuffer is
         // incomplete" on Vulkan
-        if (((IsLinux() && IsIntel()) || IsPixel2()) &&
-            mParams.getRenderer() == EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE)
+        if (((IsLinux() && IsIntel()) || IsPixel2()) && mParams.isVulkan())
         {
             mSkipTest = true;
         }
     }
 
     // Adreno gives a driver error with empty/small draw calls. http://anglebug.com/5823
-    if (mParams.testID == RestrictedTraceID::hill_climb_racing)
+    if (traceNameIs("hill_climb_racing"))
     {
         if (IsAndroid() && (IsPixel2() || IsPixel4()) &&
             mParams.driver == GLESDriverType::SystemEGL)
@@ -948,51 +957,47 @@
         }
     }
 
-    if (mParams.testID == RestrictedTraceID::avakin_life)
+    if (traceNameIs("avakin_life"))
     {
         addExtensionPrerequisite("GL_OES_EGL_image_external");
     }
 
-    if (mParams.testID == RestrictedTraceID::professional_baseball_spirits)
+    if (traceNameIs("professional_baseball_spirits"))
     {
         // TODO(https://anglebug.com/5827) Linux+Mesa/RADV Vulkan generates
         // GL_INVALID_FRAMEBUFFER_OPERATION.
         // Mesa versions below 20.3.5 produce the same issue on Linux+Mesa/Intel Vulkan
-        if (IsLinux() && (IsAMD() || IsIntel()) &&
-            mParams.getRenderer() == EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE &&
-            mParams.eglParameters.deviceType != EGL_PLATFORM_ANGLE_DEVICE_TYPE_SWIFTSHADER_ANGLE)
+        if (IsLinux() && (IsAMD() || IsIntel()) && mParams.isVulkan() && !mParams.isSwiftshader())
         {
             mSkipTest = true;
         }
     }
 
-    if (mParams.testID == RestrictedTraceID::call_break_offline_card_game)
+    if (traceNameIs("call_break_offline_card_game"))
     {
         // TODO: http://anglebug.com/5837 Intel Linux Vulkan errors with "Framebuffer is incomplete"
-        if ((IsLinux() && IsIntel()) &&
-            mParams.getRenderer() == EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE)
+        if ((IsLinux() && IsIntel()) && mParams.isVulkan())
         {
             mSkipTest = true;
         }
     }
 
-    if (mParams.testID == RestrictedTraceID::slingshot_test1 ||
-        mParams.testID == RestrictedTraceID::slingshot_test2)
+    if (traceNameIs("slingshot_test1") || traceNameIs("slingshot_test2"))
     {
         // TODO: http://anglebug.com/5877 Trace crashes on Pixel 2 in vulkan driver
-        if (IsPixel2() && mParams.getRenderer() == EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE)
+        if (IsPixel2() && mParams.isVulkan())
         {
             mSkipTest = true;
         }
     }
 
-    if (mParams.testID == RestrictedTraceID::ludo_king)
+    if (traceNameIs("ludo_king"))
     {
         addExtensionPrerequisite("GL_KHR_texture_compression_astc_ldr");
     }
 
     // TODO: http://anglebug.com/5943 GL_INVALID_ENUM on Windows/Intel.
-    if (mParams.testID == RestrictedTraceID::summoners_war)
+    if (traceNameIs("summoners_war"))
     {
         if (IsWindows() && IsIntel() && mParams.driver != GLESDriverType::AngleEGL)
         {
@@ -1000,21 +1005,20 @@
         }
     }
 
-    if (mParams.testID == RestrictedTraceID::pokemon_go)
+    if (traceNameIs("pokemon_go"))
     {
         addExtensionPrerequisite("GL_EXT_texture_cube_map_array");
         addExtensionPrerequisite("GL_KHR_texture_compression_astc_ldr");
 
         // TODO: http://anglebug.com/5989 Intel Linux crashing on teardown
         // TODO: http://anglebug.com/5994 Intel Windows timing out periodically
-        if ((IsLinux() || IsWindows()) && IsIntel() &&
-            mParams.getRenderer() == EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE)
+        if ((IsLinux() || IsWindows()) && IsIntel() && mParams.isVulkan())
         {
             mSkipTest = true;
         }
     }
 
-    if (mParams.testID == RestrictedTraceID::cookie_run_kingdom)
+    if (traceNameIs("cookie_run_kingdom"))
     {
         addExtensionPrerequisite("GL_EXT_texture_cube_map_array");
         addExtensionPrerequisite("GL_OES_EGL_image_external");
@@ -1026,32 +1030,30 @@
         }
     }
 
-    if (mParams.testID == RestrictedTraceID::genshin_impact)
+    if (traceNameIs("genshin_impact"))
     {
         addExtensionPrerequisite("GL_KHR_texture_compression_astc_ldr");
 
         // TODO: http://anglebug.com/6023 Crashes on Pixel 2 in vulkan driver
         // TODO: http://anglebug.com/6029 Crashes on Linux Intel Vulkan
-        if (((IsLinux() && IsIntel()) || IsPixel2()) &&
-            mParams.getRenderer() == EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE)
+        if (((IsLinux() && IsIntel()) || IsPixel2()) && mParams.isVulkan())
         {
             mSkipTest = true;
         }
     }
 
-    if (mParams.testID == RestrictedTraceID::pubg_mobile_skydive ||
-        mParams.testID == RestrictedTraceID::pubg_mobile_battle_royale)
+    if (traceNameIs("pubg_mobile_skydive") || traceNameIs("pubg_mobile_battle_royale"))
     {
         addExtensionPrerequisite("GL_EXT_texture_buffer");
 
-        // TODO: http://anglebug.com/6240 Internal errors on Windows using Intel or Nvida
+        // TODO: http://anglebug.com/6240 Internal errors on Windows using Intel or NVIDIA
         if (IsWindows() && (IsIntel() || IsNVIDIA()) && mParams.driver == GLESDriverType::SystemWGL)
         {
             mSkipTest = true;
         }
     }
 
-    if (mParams.testID == RestrictedTraceID::sakura_school_simulator)
+    if (traceNameIs("sakura_school_simulator"))
     {
         // Flaky on Intel. http://anglebug.com/6294
         if (IsWindows() && IsIntel())
@@ -1060,16 +1062,20 @@
         }
     }
 
-    if (mParams.testID == RestrictedTraceID::scrabble_go)
+    if (traceNameIs("scrabble_go"))
     {
         addExtensionPrerequisite("GL_KHR_texture_compression_astc_ldr");
     }
 
-    if (mParams.testID == RestrictedTraceID::world_of_kings)
+    if (traceNameIs("world_of_kings"))
     {
         addExtensionPrerequisite("GL_OES_EGL_image_external");
     }
 
+    ASSERT(mParams.surfaceType == SurfaceType::Window || gEnableAllTraceTests);
+    ASSERT(mParams.eglParameters.deviceType == EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE ||
+           gEnableAllTraceTests);
+
     // We already swap in TracePerfTest::drawBenchmark, no need to swap again in the harness.
     disableTestHarnessSwap();
 
@@ -1077,14 +1083,13 @@
 
     if (gTraceTestValidation)
     {
-        const TraceInfo &traceInfo = GetTraceInfo(mParams.testID);
-        mStepsToRun                = (traceInfo.endFrame - traceInfo.startFrame + 1);
+        mStepsToRun = frameCount();
     }
 }
 
 void TracePerfTest::initializeBenchmark()
 {
-    const TraceInfo &traceInfo = GetTraceInfo(mParams.testID);
+    const TraceInfo &traceInfo = mParams.traceInfo;
 
     mStartingDirectory = angle::GetCWD().value();
 
@@ -1116,11 +1121,8 @@
 
     mTraceLibrary->setValidateSerializedStateCallback(ValidateSerializedState);
 
-    std::string relativeTestDataDir = std::string("src/tests/restricted_traces/") + traceInfo.name;
-
-    constexpr size_t kMaxDataDirLen = 1000;
-    char testDataDir[kMaxDataDirLen];
-    if (!angle::FindTestDataPath(relativeTestDataDir.c_str(), testDataDir, kMaxDataDirLen))
+    char testDataDir[kMaxPath] = {};
+    if (!FindTraceTestDataPath(traceInfo.name, testDataDir, kMaxPath))
     {
         ERR() << "Could not find test data folder.";
         mSkipTest = true;
@@ -1584,8 +1586,7 @@
 
     printf("Serialization mismatch!\n");
 
-    constexpr size_t kMaxPath = 1024;
-    char aFilePath[kMaxPath]  = {};
+    char aFilePath[kMaxPath] = {};
     if (CreateTemporaryFile(aFilePath, kMaxPath))
     {
         printf("Saving \"expected\" capture serialization to \"%s\".\n", aFilePath);
@@ -1773,8 +1774,7 @@
     std::vector<uint8_t> pixelData(pixelCount * 4);
 
     // Only unbind the framebuffer on context versions where it's available.
-    const TraceInfo &traceInfo = GetTraceInfo(mParams.testID);
-    if (traceInfo.contextClientMajorVersion > 1)
+    if (mParams.traceInfo.contextClientMajorVersion > 1)
     {
         glBindFramebuffer(GL_FRAMEBUFFER, 0);
     }
@@ -1805,12 +1805,12 @@
     }
 }
 
-TracePerfParams CombineTestID(const TracePerfParams &in, RestrictedTraceID id)
+TracePerfParams CombineTestID(const TracePerfParams &in, const std::string &traceName)
 {
-    const TraceInfo &traceInfo = GetTraceInfo(id);
+    const TraceInfo &traceInfo = GetTraceInfo(traceName.c_str());
 
     TracePerfParams out = in;
-    out.testID          = id;
+    out.traceInfo       = traceInfo;
     out.majorVersion    = traceInfo.contextClientMajorVersion;
     out.minorVersion    = traceInfo.contextClientMinorVersion;
     out.windowWidth     = traceInfo.drawSurfaceWidth;
@@ -1844,6 +1844,72 @@
 
 void RegisterTraceTests()
 {
+    // To load the trace data path correctly we set the CWD to the executable dir.
+    std::string previousCWD;
+    if (!IsAndroid())
+    {
+        previousCWD        = angle::GetCWD().value();
+        std::string exeDir = angle::GetExecutableDirectory();
+        angle::SetCWD(exeDir.c_str());
+    }
+
+    char rootTracePath[kMaxPath] = {};
+    if (!FindRootTraceTestDataPath(rootTracePath, kMaxPath))
+    {
+        ERR() << "Unable to find trace folder.";
+        return;
+    }
+
+    // Open JSON file.
+    rapidjson::Document doc;
+    {
+        std::stringstream traceJsonStream;
+        traceJsonStream << rootTracePath << angle::GetPathSeparator() << "restricted_traces.json";
+        std::string traceJsonPath = traceJsonStream.str();
+
+        std::ifstream ifs(traceJsonPath);
+        if (!ifs.is_open())
+        {
+            ERR() << "Unable to open trace JSON file: " << traceJsonPath;
+            return;
+        }
+
+        rapidjson::IStreamWrapper inWrapper(ifs);
+
+        doc.ParseStream(inWrapper);
+
+        if (doc.HasParseError())
+        {
+            ERR() << "Parse error reading JSON stream from " << traceJsonPath;
+            return;
+        }
+    }
+
+    if (!doc.IsObject() || !doc.HasMember("traces") || !doc["traces"].IsArray())
+    {
+        ERR() << "Trace JSON document not formed properly.";
+        return;
+    }
+
+    // Read trace json into a list of trace names.
+    std::vector<std::string> traces;
+
+    rapidjson::Document::Array traceArray = doc["traces"].GetArray();
+    for (rapidjson::SizeType arrayIndex = 0; arrayIndex < traceArray.Size(); ++arrayIndex)
+    {
+        const rapidjson::Document::ValueType &arrayElement = traceArray[arrayIndex];
+
+        if (!arrayElement.IsString())
+        {
+            ERR() << "Trace JSON document not formed properly.";
+            return;
+        }
+
+        std::vector<std::string> traceAndVersion;
+        angle::SplitStringAlongWhitespace(arrayElement.GetString(), &traceAndVersion);
+        traces.push_back(traceAndVersion[0]);
+    }
+
     std::vector<SurfaceType> surfaceTypes = {SurfaceType::Window};
     if (gEnableAllTraceTests)
     {
@@ -1861,7 +1927,7 @@
         renderers.push_back(VulkanSwiftShader<P>);
     }
 
-    PV testsWithID = CombineWithValues({P()}, AllEnums<RestrictedTraceID>(), CombineTestID);
+    PV testsWithID          = CombineWithValues({P()}, traces, CombineTestID);
     PV testsWithSurfaceType = CombineWithValues(testsWithID, surfaceTypes, CombineWithSurfaceType);
     PV testsWithRenderer    = CombineWithFuncs(testsWithSurfaceType, renderers);
     PV filteredTests        = FilterTestParams(testsWithRenderer);
@@ -1887,4 +1953,9 @@
         testing::RegisterTest("TracePerfTest", testName.c_str(), nullptr, paramName.c_str(),
                               __FILE__, __LINE__, factory);
     }
+
+    if (!previousCWD.empty())
+    {
+        angle::SetCWD(previousCWD.c_str());
+    }
 }
diff --git a/src/tests/restricted_traces/BUILD.gn b/src/tests/restricted_traces/BUILD.gn
index 9a7a800..26f86a2 100644
--- a/src/tests/restricted_traces/BUILD.gn
+++ b/src/tests/restricted_traces/BUILD.gn
@@ -59,6 +59,8 @@
     "restricted_traces_export.h",
   ]
 
+  data = [ "restricted_traces.json" ]
+
   data_deps = _traces
   defines = [ "ANGLE_TRACE_IMPLEMENTATION" ]
 
diff --git a/src/tests/restricted_traces/gen_restricted_traces.py b/src/tests/restricted_traces/gen_restricted_traces.py
index ccec9ed..a4296b5 100755
--- a/src/tests/restricted_traces/gen_restricted_traces.py
+++ b/src/tests/restricted_traces/gen_restricted_traces.py
@@ -60,11 +60,6 @@
 
 namespace angle
 {{
-enum class RestrictedTraceID
-{{
-{trace_ids}, InvalidEnum, EnumCount = InvalidEnum
-}};
-
 static constexpr size_t kTraceInfoMaxNameLen = 32;
 
 static constexpr uint32_t kDefaultReplayContextClientMajorVersion = 3;
@@ -83,7 +78,7 @@
     char name[kTraceInfoMaxNameLen];
 }};
 
-ANGLE_TRACE_EXPORT const TraceInfo &GetTraceInfo(RestrictedTraceID traceID);
+ANGLE_TRACE_EXPORT const TraceInfo &GetTraceInfo(const char *traceName);
 }}  // namespace angle
 
 #endif  // ANGLE_RESTRICTED_TRACES_AUTOGEN_H_
@@ -110,14 +105,29 @@
 {{
 namespace
 {{
-constexpr angle::PackedEnumMap<RestrictedTraceID, TraceInfo> kTraceInfos = {{
+constexpr size_t kNumTraces = {num_traces};
+struct TracePair
+{{
+    const char name[kTraceInfoMaxNameLen];
+    TraceInfo info;
+}};
+constexpr TracePair kTraceInfos[kNumTraces] = {{
 {trace_infos}
 }};
 }}
 
-const TraceInfo &GetTraceInfo(RestrictedTraceID traceID)
+const TraceInfo &GetTraceInfo(const char *traceName)
 {{
-    return kTraceInfos[traceID];
+    // Could be improved using std::lower_bound.
+    for (const TracePair &tracePair : kTraceInfos)
+    {{
+        if (strncmp(tracePair.name, traceName, kTraceInfoMaxNameLen) == 0)
+        {{
+            return tracePair.info;
+        }}
+    }}
+    UNREACHABLE();
+    return kTraceInfos[0].info;
 }}
 }}  // namespace angle
 """
@@ -202,25 +212,25 @@
     info = []
     if contains_context_version(trace):
         info += [
-            f"{trace}::kReplayContextClientMajorVersion",
-            f"{trace}::kReplayContextClientMinorVersion"
+            f'{trace}::kReplayContextClientMajorVersion',
+            f'{trace}::kReplayContextClientMinorVersion'
         ]
     else:
         info += [
-            "kDefaultReplayContextClientMajorVersion", "kDefaultReplayContextClientMinorVersion"
+            'kDefaultReplayContextClientMajorVersion', 'kDefaultReplayContextClientMinorVersion'
         ]
 
     info += [
-        f"{trace}::kReplayFrameStart", f"{trace}::kReplayFrameEnd",
-        f"{trace}::kReplayDrawSurfaceWidth", f"{trace}::kReplayDrawSurfaceHeight"
+        f'{trace}::kReplayFrameStart', f'{trace}::kReplayFrameEnd',
+        f'{trace}::kReplayDrawSurfaceWidth', f'{trace}::kReplayDrawSurfaceHeight'
     ]
 
     if contains_colorspace(trace):
-        info += [f"{trace}::kReplayDrawSurfaceColorSpace"]
+        info += [f'{trace}::kReplayDrawSurfaceColorSpace']
     else:
-        info += ["kDefaultReplayDrawSurfaceColorSpace"]
+        info += ['kDefaultReplayDrawSurfaceColorSpace']
 
-    info += [f"\"{trace}\""]
+    info += [f'"{trace}"']
 
     return ", ".join(info)
 
@@ -240,16 +250,16 @@
             while file[start - 1].isdigit():
                 start -= 1
             context = file[start:end]
-            assert context.isnumeric(), "Failed to find trace context number"
+            assert context.isnumeric(), 'Failed to find trace context number'
             return context
 
 
 def get_header_name(trace):
-    return "%s/%s_capture_context%s.h" % (trace, trace, get_context(trace))
+    return '%s/%s_capture_context%s.h' % (trace, trace, get_context(trace))
 
 
 def get_source_name(trace):
-    return "%s/%s_capture_context%s.cpp" % (trace, trace, get_context(trace))
+    return '%s/%s_capture_context%s.cpp' % (trace, trace, get_context(trace))
 
 
 def gen_header(header_file, format_args):
@@ -346,23 +356,21 @@
         return 0
 
     format_args = {
-        "script_name": os.path.basename(__file__),
-        "data_source_name": json_file,
+        'script_name': os.path.basename(__file__),
+        'data_source_name': json_file,
     }
 
     if not gen_gni(traces, gni_file, format_args):
         print('.gni file generation failed.')
         return 1
 
-    includes = ["#include \"%s\"" % get_header_name(trace) for trace in traces]
-    trace_infos = [
-        "{RestrictedTraceID::%s, {%s}}" % (trace, get_trace_info(trace)) for trace in traces
-    ]
+    includes = ['#include "%s"' % get_header_name(trace) for trace in traces]
+    trace_infos = ['{"%s", {%s}}' % (trace, get_trace_info(trace)) for trace in traces]
 
-    format_args["filename"] = "restricted_traces_autogen"
-    format_args["trace_ids"] = ",\n".join(traces)
-    format_args["trace_includes"] = "\n".join(includes)
-    format_args["trace_infos"] = ",\n".join(trace_infos)
+    format_args['filename'] = 'restricted_traces_autogen'
+    format_args['num_traces'] = len(trace_infos)
+    format_args['trace_includes'] = '\n'.join(includes)
+    format_args['trace_infos'] = ',\n'.join(trace_infos)
     if not gen_header(header_file, format_args):
         print('.h file generation failed.')
         return 1
diff --git a/src/tests/restricted_traces/restricted_traces_autogen.cpp b/src/tests/restricted_traces/restricted_traces_autogen.cpp
index 5ece274..8ffaf3c 100644
--- a/src/tests/restricted_traces/restricted_traces_autogen.cpp
+++ b/src/tests/restricted_traces/restricted_traces_autogen.cpp
@@ -119,73 +119,79 @@
 {
 namespace
 {
-constexpr angle::PackedEnumMap<RestrictedTraceID, TraceInfo> kTraceInfos = {
-    {RestrictedTraceID::aliexpress,
+constexpr size_t kNumTraces = 102;
+struct TracePair
+{
+    const char name[kTraceInfoMaxNameLen];
+    TraceInfo info;
+};
+constexpr TracePair kTraceInfos[kNumTraces] = {
+    {"aliexpress",
      {aliexpress::kReplayContextClientMajorVersion, aliexpress::kReplayContextClientMinorVersion,
       aliexpress::kReplayFrameStart, aliexpress::kReplayFrameEnd,
       aliexpress::kReplayDrawSurfaceWidth, aliexpress::kReplayDrawSurfaceHeight,
       kDefaultReplayDrawSurfaceColorSpace, "aliexpress"}},
-    {RestrictedTraceID::among_us,
+    {"among_us",
      {among_us::kReplayContextClientMajorVersion, among_us::kReplayContextClientMinorVersion,
       among_us::kReplayFrameStart, among_us::kReplayFrameEnd, among_us::kReplayDrawSurfaceWidth,
       among_us::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace, "among_us"}},
-    {RestrictedTraceID::angry_birds_2_1500,
+    {"angry_birds_2_1500",
      {angry_birds_2_1500::kReplayContextClientMajorVersion,
       angry_birds_2_1500::kReplayContextClientMinorVersion, angry_birds_2_1500::kReplayFrameStart,
       angry_birds_2_1500::kReplayFrameEnd, angry_birds_2_1500::kReplayDrawSurfaceWidth,
       angry_birds_2_1500::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "angry_birds_2_1500"}},
-    {RestrictedTraceID::arena_of_valor,
+    {"arena_of_valor",
      {arena_of_valor::kReplayContextClientMajorVersion,
       arena_of_valor::kReplayContextClientMinorVersion, arena_of_valor::kReplayFrameStart,
       arena_of_valor::kReplayFrameEnd, arena_of_valor::kReplayDrawSurfaceWidth,
       arena_of_valor::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "arena_of_valor"}},
-    {RestrictedTraceID::asphalt_8,
+    {"asphalt_8",
      {asphalt_8::kReplayContextClientMajorVersion, asphalt_8::kReplayContextClientMinorVersion,
       asphalt_8::kReplayFrameStart, asphalt_8::kReplayFrameEnd, asphalt_8::kReplayDrawSurfaceWidth,
       asphalt_8::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace, "asphalt_8"}},
-    {RestrictedTraceID::avakin_life,
+    {"avakin_life",
      {avakin_life::kReplayContextClientMajorVersion, avakin_life::kReplayContextClientMinorVersion,
       avakin_life::kReplayFrameStart, avakin_life::kReplayFrameEnd,
       avakin_life::kReplayDrawSurfaceWidth, avakin_life::kReplayDrawSurfaceHeight,
       kDefaultReplayDrawSurfaceColorSpace, "avakin_life"}},
-    {RestrictedTraceID::aztec_ruins,
+    {"aztec_ruins",
      {aztec_ruins::kReplayContextClientMajorVersion, aztec_ruins::kReplayContextClientMinorVersion,
       aztec_ruins::kReplayFrameStart, aztec_ruins::kReplayFrameEnd,
       aztec_ruins::kReplayDrawSurfaceWidth, aztec_ruins::kReplayDrawSurfaceHeight,
       kDefaultReplayDrawSurfaceColorSpace, "aztec_ruins"}},
-    {RestrictedTraceID::beach_buggy_racing,
+    {"beach_buggy_racing",
      {beach_buggy_racing::kReplayContextClientMajorVersion,
       beach_buggy_racing::kReplayContextClientMinorVersion, beach_buggy_racing::kReplayFrameStart,
       beach_buggy_racing::kReplayFrameEnd, beach_buggy_racing::kReplayDrawSurfaceWidth,
       beach_buggy_racing::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "beach_buggy_racing"}},
-    {RestrictedTraceID::brawl_stars,
+    {"brawl_stars",
      {brawl_stars::kReplayContextClientMajorVersion, brawl_stars::kReplayContextClientMinorVersion,
       brawl_stars::kReplayFrameStart, brawl_stars::kReplayFrameEnd,
       brawl_stars::kReplayDrawSurfaceWidth, brawl_stars::kReplayDrawSurfaceHeight,
       kDefaultReplayDrawSurfaceColorSpace, "brawl_stars"}},
-    {RestrictedTraceID::bricks_breaker_quest,
+    {"bricks_breaker_quest",
      {bricks_breaker_quest::kReplayContextClientMajorVersion,
       bricks_breaker_quest::kReplayContextClientMinorVersion,
       bricks_breaker_quest::kReplayFrameStart, bricks_breaker_quest::kReplayFrameEnd,
       bricks_breaker_quest::kReplayDrawSurfaceWidth, bricks_breaker_quest::kReplayDrawSurfaceHeight,
       kDefaultReplayDrawSurfaceColorSpace, "bricks_breaker_quest"}},
-    {RestrictedTraceID::bubble_shooter,
+    {"bubble_shooter",
      {bubble_shooter::kReplayContextClientMajorVersion,
       bubble_shooter::kReplayContextClientMinorVersion, bubble_shooter::kReplayFrameStart,
       bubble_shooter::kReplayFrameEnd, bubble_shooter::kReplayDrawSurfaceWidth,
       bubble_shooter::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "bubble_shooter"}},
-    {RestrictedTraceID::bus_simulator_indonesia,
+    {"bus_simulator_indonesia",
      {bus_simulator_indonesia::kReplayContextClientMajorVersion,
       bus_simulator_indonesia::kReplayContextClientMinorVersion,
       bus_simulator_indonesia::kReplayFrameStart, bus_simulator_indonesia::kReplayFrameEnd,
       bus_simulator_indonesia::kReplayDrawSurfaceWidth,
       bus_simulator_indonesia::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "bus_simulator_indonesia"}},
-    {RestrictedTraceID::call_break_offline_card_game,
+    {"call_break_offline_card_game",
      {call_break_offline_card_game::kReplayContextClientMajorVersion,
       call_break_offline_card_game::kReplayContextClientMinorVersion,
       call_break_offline_card_game::kReplayFrameStart,
@@ -193,100 +199,100 @@
       call_break_offline_card_game::kReplayDrawSurfaceWidth,
       call_break_offline_card_game::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "call_break_offline_card_game"}},
-    {RestrictedTraceID::candy_crush_500,
+    {"candy_crush_500",
      {candy_crush_500::kReplayContextClientMajorVersion,
       candy_crush_500::kReplayContextClientMinorVersion, candy_crush_500::kReplayFrameStart,
       candy_crush_500::kReplayFrameEnd, candy_crush_500::kReplayDrawSurfaceWidth,
       candy_crush_500::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "candy_crush_500"}},
-    {RestrictedTraceID::candy_crush_soda_saga,
+    {"candy_crush_soda_saga",
      {candy_crush_soda_saga::kReplayContextClientMajorVersion,
       candy_crush_soda_saga::kReplayContextClientMinorVersion,
       candy_crush_soda_saga::kReplayFrameStart, candy_crush_soda_saga::kReplayFrameEnd,
       candy_crush_soda_saga::kReplayDrawSurfaceWidth,
       candy_crush_soda_saga::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "candy_crush_soda_saga"}},
-    {RestrictedTraceID::car_parking_multiplayer,
+    {"car_parking_multiplayer",
      {car_parking_multiplayer::kReplayContextClientMajorVersion,
       car_parking_multiplayer::kReplayContextClientMinorVersion,
       car_parking_multiplayer::kReplayFrameStart, car_parking_multiplayer::kReplayFrameEnd,
       car_parking_multiplayer::kReplayDrawSurfaceWidth,
       car_parking_multiplayer::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "car_parking_multiplayer"}},
-    {RestrictedTraceID::clash_of_clans,
+    {"clash_of_clans",
      {clash_of_clans::kReplayContextClientMajorVersion,
       clash_of_clans::kReplayContextClientMinorVersion, clash_of_clans::kReplayFrameStart,
       clash_of_clans::kReplayFrameEnd, clash_of_clans::kReplayDrawSurfaceWidth,
       clash_of_clans::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "clash_of_clans"}},
-    {RestrictedTraceID::clash_royale,
+    {"clash_royale",
      {clash_royale::kReplayContextClientMajorVersion,
       clash_royale::kReplayContextClientMinorVersion, clash_royale::kReplayFrameStart,
       clash_royale::kReplayFrameEnd, clash_royale::kReplayDrawSurfaceWidth,
       clash_royale::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace, "clash_royale"}},
-    {RestrictedTraceID::cod_mobile,
+    {"cod_mobile",
      {cod_mobile::kReplayContextClientMajorVersion, cod_mobile::kReplayContextClientMinorVersion,
       cod_mobile::kReplayFrameStart, cod_mobile::kReplayFrameEnd,
       cod_mobile::kReplayDrawSurfaceWidth, cod_mobile::kReplayDrawSurfaceHeight,
       kDefaultReplayDrawSurfaceColorSpace, "cod_mobile"}},
-    {RestrictedTraceID::coin_master,
+    {"coin_master",
      {coin_master::kReplayContextClientMajorVersion, coin_master::kReplayContextClientMinorVersion,
       coin_master::kReplayFrameStart, coin_master::kReplayFrameEnd,
       coin_master::kReplayDrawSurfaceWidth, coin_master::kReplayDrawSurfaceHeight,
       kDefaultReplayDrawSurfaceColorSpace, "coin_master"}},
-    {RestrictedTraceID::command_and_conquer_rivals,
+    {"command_and_conquer_rivals",
      {command_and_conquer_rivals::kReplayContextClientMajorVersion,
       command_and_conquer_rivals::kReplayContextClientMinorVersion,
       command_and_conquer_rivals::kReplayFrameStart, command_and_conquer_rivals::kReplayFrameEnd,
       command_and_conquer_rivals::kReplayDrawSurfaceWidth,
       command_and_conquer_rivals::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "command_and_conquer_rivals"}},
-    {RestrictedTraceID::cookie_run_kingdom,
+    {"cookie_run_kingdom",
      {cookie_run_kingdom::kReplayContextClientMajorVersion,
       cookie_run_kingdom::kReplayContextClientMinorVersion, cookie_run_kingdom::kReplayFrameStart,
       cookie_run_kingdom::kReplayFrameEnd, cookie_run_kingdom::kReplayDrawSurfaceWidth,
       cookie_run_kingdom::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "cookie_run_kingdom"}},
-    {RestrictedTraceID::disney_tsum_tsum,
+    {"disney_tsum_tsum",
      {disney_tsum_tsum::kReplayContextClientMajorVersion,
       disney_tsum_tsum::kReplayContextClientMinorVersion, disney_tsum_tsum::kReplayFrameStart,
       disney_tsum_tsum::kReplayFrameEnd, disney_tsum_tsum::kReplayDrawSurfaceWidth,
       disney_tsum_tsum::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "disney_tsum_tsum"}},
-    {RestrictedTraceID::dr_driving,
+    {"dr_driving",
      {dr_driving::kReplayContextClientMajorVersion, dr_driving::kReplayContextClientMinorVersion,
       dr_driving::kReplayFrameStart, dr_driving::kReplayFrameEnd,
       dr_driving::kReplayDrawSurfaceWidth, dr_driving::kReplayDrawSurfaceHeight,
       kDefaultReplayDrawSurfaceColorSpace, "dr_driving"}},
-    {RestrictedTraceID::dragon_ball_legends,
+    {"dragon_ball_legends",
      {dragon_ball_legends::kReplayContextClientMajorVersion,
       dragon_ball_legends::kReplayContextClientMinorVersion, dragon_ball_legends::kReplayFrameStart,
       dragon_ball_legends::kReplayFrameEnd, dragon_ball_legends::kReplayDrawSurfaceWidth,
       dragon_ball_legends::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "dragon_ball_legends"}},
-    {RestrictedTraceID::dragon_raja,
+    {"dragon_raja",
      {dragon_raja::kReplayContextClientMajorVersion, dragon_raja::kReplayContextClientMinorVersion,
       dragon_raja::kReplayFrameStart, dragon_raja::kReplayFrameEnd,
       dragon_raja::kReplayDrawSurfaceWidth, dragon_raja::kReplayDrawSurfaceHeight,
       kDefaultReplayDrawSurfaceColorSpace, "dragon_raja"}},
-    {RestrictedTraceID::efootball_pes_2021,
+    {"efootball_pes_2021",
      {efootball_pes_2021::kReplayContextClientMajorVersion,
       efootball_pes_2021::kReplayContextClientMinorVersion, efootball_pes_2021::kReplayFrameStart,
       efootball_pes_2021::kReplayFrameEnd, efootball_pes_2021::kReplayDrawSurfaceWidth,
       efootball_pes_2021::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "efootball_pes_2021"}},
-    {RestrictedTraceID::egypt_1500,
+    {"egypt_1500",
      {egypt_1500::kReplayContextClientMajorVersion, egypt_1500::kReplayContextClientMinorVersion,
       egypt_1500::kReplayFrameStart, egypt_1500::kReplayFrameEnd,
       egypt_1500::kReplayDrawSurfaceWidth, egypt_1500::kReplayDrawSurfaceHeight,
       kDefaultReplayDrawSurfaceColorSpace, "egypt_1500"}},
-    {RestrictedTraceID::eight_ball_pool,
+    {"eight_ball_pool",
      {eight_ball_pool::kReplayContextClientMajorVersion,
       eight_ball_pool::kReplayContextClientMinorVersion, eight_ball_pool::kReplayFrameStart,
       eight_ball_pool::kReplayFrameEnd, eight_ball_pool::kReplayDrawSurfaceWidth,
       eight_ball_pool::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "eight_ball_pool"}},
-    {RestrictedTraceID::extreme_car_driving_simulator,
+    {"extreme_car_driving_simulator",
      {extreme_car_driving_simulator::kReplayContextClientMajorVersion,
       extreme_car_driving_simulator::kReplayContextClientMinorVersion,
       extreme_car_driving_simulator::kReplayFrameStart,
@@ -294,198 +300,198 @@
       extreme_car_driving_simulator::kReplayDrawSurfaceWidth,
       extreme_car_driving_simulator::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "extreme_car_driving_simulator"}},
-    {RestrictedTraceID::fallout_shelter_online,
+    {"fallout_shelter_online",
      {fallout_shelter_online::kReplayContextClientMajorVersion,
       fallout_shelter_online::kReplayContextClientMinorVersion,
       fallout_shelter_online::kReplayFrameStart, fallout_shelter_online::kReplayFrameEnd,
       fallout_shelter_online::kReplayDrawSurfaceWidth,
       fallout_shelter_online::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "fallout_shelter_online"}},
-    {RestrictedTraceID::farm_heroes_saga,
+    {"farm_heroes_saga",
      {farm_heroes_saga::kReplayContextClientMajorVersion,
       farm_heroes_saga::kReplayContextClientMinorVersion, farm_heroes_saga::kReplayFrameStart,
       farm_heroes_saga::kReplayFrameEnd, farm_heroes_saga::kReplayDrawSurfaceWidth,
       farm_heroes_saga::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "farm_heroes_saga"}},
-    {RestrictedTraceID::fate_grand_order,
+    {"fate_grand_order",
      {fate_grand_order::kReplayContextClientMajorVersion,
       fate_grand_order::kReplayContextClientMinorVersion, fate_grand_order::kReplayFrameStart,
       fate_grand_order::kReplayFrameEnd, fate_grand_order::kReplayDrawSurfaceWidth,
       fate_grand_order::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "fate_grand_order"}},
-    {RestrictedTraceID::fifa_mobile,
+    {"fifa_mobile",
      {fifa_mobile::kReplayContextClientMajorVersion, fifa_mobile::kReplayContextClientMinorVersion,
       fifa_mobile::kReplayFrameStart, fifa_mobile::kReplayFrameEnd,
       fifa_mobile::kReplayDrawSurfaceWidth, fifa_mobile::kReplayDrawSurfaceHeight,
       kDefaultReplayDrawSurfaceColorSpace, "fifa_mobile"}},
-    {RestrictedTraceID::final_fantasy,
+    {"final_fantasy",
      {final_fantasy::kReplayContextClientMajorVersion,
       final_fantasy::kReplayContextClientMinorVersion, final_fantasy::kReplayFrameStart,
       final_fantasy::kReplayFrameEnd, final_fantasy::kReplayDrawSurfaceWidth,
       final_fantasy::kReplayDrawSurfaceHeight, final_fantasy::kReplayDrawSurfaceColorSpace,
       "final_fantasy"}},
-    {RestrictedTraceID::free_fire,
+    {"free_fire",
      {free_fire::kReplayContextClientMajorVersion, free_fire::kReplayContextClientMinorVersion,
       free_fire::kReplayFrameStart, free_fire::kReplayFrameEnd, free_fire::kReplayDrawSurfaceWidth,
       free_fire::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace, "free_fire"}},
-    {RestrictedTraceID::gardenscapes,
+    {"gardenscapes",
      {gardenscapes::kReplayContextClientMajorVersion,
       gardenscapes::kReplayContextClientMinorVersion, gardenscapes::kReplayFrameStart,
       gardenscapes::kReplayFrameEnd, gardenscapes::kReplayDrawSurfaceWidth,
       gardenscapes::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace, "gardenscapes"}},
-    {RestrictedTraceID::genshin_impact,
+    {"genshin_impact",
      {genshin_impact::kReplayContextClientMajorVersion,
       genshin_impact::kReplayContextClientMinorVersion, genshin_impact::kReplayFrameStart,
       genshin_impact::kReplayFrameEnd, genshin_impact::kReplayDrawSurfaceWidth,
       genshin_impact::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "genshin_impact"}},
-    {RestrictedTraceID::google_maps,
+    {"google_maps",
      {google_maps::kReplayContextClientMajorVersion, google_maps::kReplayContextClientMinorVersion,
       google_maps::kReplayFrameStart, google_maps::kReplayFrameEnd,
       google_maps::kReplayDrawSurfaceWidth, google_maps::kReplayDrawSurfaceHeight,
       kDefaultReplayDrawSurfaceColorSpace, "google_maps"}},
-    {RestrictedTraceID::happy_color,
+    {"happy_color",
      {happy_color::kReplayContextClientMajorVersion, happy_color::kReplayContextClientMinorVersion,
       happy_color::kReplayFrameStart, happy_color::kReplayFrameEnd,
       happy_color::kReplayDrawSurfaceWidth, happy_color::kReplayDrawSurfaceHeight,
       kDefaultReplayDrawSurfaceColorSpace, "happy_color"}},
-    {RestrictedTraceID::hay_day,
+    {"hay_day",
      {hay_day::kReplayContextClientMajorVersion, hay_day::kReplayContextClientMinorVersion,
       hay_day::kReplayFrameStart, hay_day::kReplayFrameEnd, hay_day::kReplayDrawSurfaceWidth,
       hay_day::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace, "hay_day"}},
-    {RestrictedTraceID::hearthstone,
+    {"hearthstone",
      {hearthstone::kReplayContextClientMajorVersion, hearthstone::kReplayContextClientMinorVersion,
       hearthstone::kReplayFrameStart, hearthstone::kReplayFrameEnd,
       hearthstone::kReplayDrawSurfaceWidth, hearthstone::kReplayDrawSurfaceHeight,
       kDefaultReplayDrawSurfaceColorSpace, "hearthstone"}},
-    {RestrictedTraceID::higgs_domino_island,
+    {"higgs_domino_island",
      {higgs_domino_island::kReplayContextClientMajorVersion,
       higgs_domino_island::kReplayContextClientMinorVersion, higgs_domino_island::kReplayFrameStart,
       higgs_domino_island::kReplayFrameEnd, higgs_domino_island::kReplayDrawSurfaceWidth,
       higgs_domino_island::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "higgs_domino_island"}},
-    {RestrictedTraceID::hill_climb_racing,
+    {"hill_climb_racing",
      {hill_climb_racing::kReplayContextClientMajorVersion,
       hill_climb_racing::kReplayContextClientMinorVersion, hill_climb_racing::kReplayFrameStart,
       hill_climb_racing::kReplayFrameEnd, hill_climb_racing::kReplayDrawSurfaceWidth,
       hill_climb_racing::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "hill_climb_racing"}},
-    {RestrictedTraceID::homescapes,
+    {"homescapes",
      {homescapes::kReplayContextClientMajorVersion, homescapes::kReplayContextClientMinorVersion,
       homescapes::kReplayFrameStart, homescapes::kReplayFrameEnd,
       homescapes::kReplayDrawSurfaceWidth, homescapes::kReplayDrawSurfaceHeight,
       kDefaultReplayDrawSurfaceColorSpace, "homescapes"}},
-    {RestrictedTraceID::idle_heroes,
+    {"idle_heroes",
      {idle_heroes::kReplayContextClientMajorVersion, idle_heroes::kReplayContextClientMinorVersion,
       idle_heroes::kReplayFrameStart, idle_heroes::kReplayFrameEnd,
       idle_heroes::kReplayDrawSurfaceWidth, idle_heroes::kReplayDrawSurfaceHeight,
       kDefaultReplayDrawSurfaceColorSpace, "idle_heroes"}},
-    {RestrictedTraceID::junes_journey,
+    {"junes_journey",
      {junes_journey::kReplayContextClientMajorVersion,
       junes_journey::kReplayContextClientMinorVersion, junes_journey::kReplayFrameStart,
       junes_journey::kReplayFrameEnd, junes_journey::kReplayDrawSurfaceWidth,
       junes_journey::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "junes_journey"}},
-    {RestrictedTraceID::kartrider_rush,
+    {"kartrider_rush",
      {kartrider_rush::kReplayContextClientMajorVersion,
       kartrider_rush::kReplayContextClientMinorVersion, kartrider_rush::kReplayFrameStart,
       kartrider_rush::kReplayFrameEnd, kartrider_rush::kReplayDrawSurfaceWidth,
       kartrider_rush::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "kartrider_rush"}},
-    {RestrictedTraceID::klondike_adventures,
+    {"klondike_adventures",
      {klondike_adventures::kReplayContextClientMajorVersion,
       klondike_adventures::kReplayContextClientMinorVersion, klondike_adventures::kReplayFrameStart,
       klondike_adventures::kReplayFrameEnd, klondike_adventures::kReplayDrawSurfaceWidth,
       klondike_adventures::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "klondike_adventures"}},
-    {RestrictedTraceID::league_of_legends_wild_rift,
+    {"league_of_legends_wild_rift",
      {league_of_legends_wild_rift::kReplayContextClientMajorVersion,
       league_of_legends_wild_rift::kReplayContextClientMinorVersion,
       league_of_legends_wild_rift::kReplayFrameStart, league_of_legends_wild_rift::kReplayFrameEnd,
       league_of_legends_wild_rift::kReplayDrawSurfaceWidth,
       league_of_legends_wild_rift::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "league_of_legends_wild_rift"}},
-    {RestrictedTraceID::lego_legacy,
+    {"lego_legacy",
      {lego_legacy::kReplayContextClientMajorVersion, lego_legacy::kReplayContextClientMinorVersion,
       lego_legacy::kReplayFrameStart, lego_legacy::kReplayFrameEnd,
       lego_legacy::kReplayDrawSurfaceWidth, lego_legacy::kReplayDrawSurfaceHeight,
       kDefaultReplayDrawSurfaceColorSpace, "lego_legacy"}},
-    {RestrictedTraceID::lineage_m,
+    {"lineage_m",
      {lineage_m::kReplayContextClientMajorVersion, lineage_m::kReplayContextClientMinorVersion,
       lineage_m::kReplayFrameStart, lineage_m::kReplayFrameEnd, lineage_m::kReplayDrawSurfaceWidth,
       lineage_m::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace, "lineage_m"}},
-    {RestrictedTraceID::ludo_king,
+    {"ludo_king",
      {ludo_king::kReplayContextClientMajorVersion, ludo_king::kReplayContextClientMinorVersion,
       ludo_king::kReplayFrameStart, ludo_king::kReplayFrameEnd, ludo_king::kReplayDrawSurfaceWidth,
       ludo_king::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace, "ludo_king"}},
-    {RestrictedTraceID::magic_tiles_3,
+    {"magic_tiles_3",
      {magic_tiles_3::kReplayContextClientMajorVersion,
       magic_tiles_3::kReplayContextClientMinorVersion, magic_tiles_3::kReplayFrameStart,
       magic_tiles_3::kReplayFrameEnd, magic_tiles_3::kReplayDrawSurfaceWidth,
       magic_tiles_3::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "magic_tiles_3"}},
-    {RestrictedTraceID::manhattan_10,
+    {"manhattan_10",
      {manhattan_10::kReplayContextClientMajorVersion,
       manhattan_10::kReplayContextClientMinorVersion, manhattan_10::kReplayFrameStart,
       manhattan_10::kReplayFrameEnd, manhattan_10::kReplayDrawSurfaceWidth,
       manhattan_10::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace, "manhattan_10"}},
-    {RestrictedTraceID::manhattan_31,
+    {"manhattan_31",
      {manhattan_31::kReplayContextClientMajorVersion,
       manhattan_31::kReplayContextClientMinorVersion, manhattan_31::kReplayFrameStart,
       manhattan_31::kReplayFrameEnd, manhattan_31::kReplayDrawSurfaceWidth,
       manhattan_31::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace, "manhattan_31"}},
-    {RestrictedTraceID::mario_kart_tour,
+    {"mario_kart_tour",
      {mario_kart_tour::kReplayContextClientMajorVersion,
       mario_kart_tour::kReplayContextClientMinorVersion, mario_kart_tour::kReplayFrameStart,
       mario_kart_tour::kReplayFrameEnd, mario_kart_tour::kReplayDrawSurfaceWidth,
       mario_kart_tour::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "mario_kart_tour"}},
-    {RestrictedTraceID::marvel_contest_of_champions,
+    {"marvel_contest_of_champions",
      {marvel_contest_of_champions::kReplayContextClientMajorVersion,
       marvel_contest_of_champions::kReplayContextClientMinorVersion,
       marvel_contest_of_champions::kReplayFrameStart, marvel_contest_of_champions::kReplayFrameEnd,
       marvel_contest_of_champions::kReplayDrawSurfaceWidth,
       marvel_contest_of_champions::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "marvel_contest_of_champions"}},
-    {RestrictedTraceID::messenger_lite,
+    {"messenger_lite",
      {messenger_lite::kReplayContextClientMajorVersion,
       messenger_lite::kReplayContextClientMinorVersion, messenger_lite::kReplayFrameStart,
       messenger_lite::kReplayFrameEnd, messenger_lite::kReplayDrawSurfaceWidth,
       messenger_lite::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "messenger_lite"}},
-    {RestrictedTraceID::minecraft,
+    {"minecraft",
      {minecraft::kReplayContextClientMajorVersion, minecraft::kReplayContextClientMinorVersion,
       minecraft::kReplayFrameStart, minecraft::kReplayFrameEnd, minecraft::kReplayDrawSurfaceWidth,
       minecraft::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace, "minecraft"}},
-    {RestrictedTraceID::mobile_legends,
+    {"mobile_legends",
      {mobile_legends::kReplayContextClientMajorVersion,
       mobile_legends::kReplayContextClientMinorVersion, mobile_legends::kReplayFrameStart,
       mobile_legends::kReplayFrameEnd, mobile_legends::kReplayDrawSurfaceWidth,
       mobile_legends::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "mobile_legends"}},
-    {RestrictedTraceID::nba2k20_800,
+    {"nba2k20_800",
      {nba2k20_800::kReplayContextClientMajorVersion, nba2k20_800::kReplayContextClientMinorVersion,
       nba2k20_800::kReplayFrameStart, nba2k20_800::kReplayFrameEnd,
       nba2k20_800::kReplayDrawSurfaceWidth, nba2k20_800::kReplayDrawSurfaceHeight,
       kDefaultReplayDrawSurfaceColorSpace, "nba2k20_800"}},
-    {RestrictedTraceID::one_punch_man,
+    {"one_punch_man",
      {one_punch_man::kReplayContextClientMajorVersion,
       one_punch_man::kReplayContextClientMinorVersion, one_punch_man::kReplayFrameStart,
       one_punch_man::kReplayFrameEnd, one_punch_man::kReplayDrawSurfaceWidth,
       one_punch_man::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "one_punch_man"}},
-    {RestrictedTraceID::plants_vs_zombies_2,
+    {"plants_vs_zombies_2",
      {plants_vs_zombies_2::kReplayContextClientMajorVersion,
       plants_vs_zombies_2::kReplayContextClientMinorVersion, plants_vs_zombies_2::kReplayFrameStart,
       plants_vs_zombies_2::kReplayFrameEnd, plants_vs_zombies_2::kReplayDrawSurfaceWidth,
       plants_vs_zombies_2::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "plants_vs_zombies_2"}},
-    {RestrictedTraceID::pokemon_go,
+    {"pokemon_go",
      {pokemon_go::kReplayContextClientMajorVersion, pokemon_go::kReplayContextClientMinorVersion,
       pokemon_go::kReplayFrameStart, pokemon_go::kReplayFrameEnd,
       pokemon_go::kReplayDrawSurfaceWidth, pokemon_go::kReplayDrawSurfaceHeight,
       kDefaultReplayDrawSurfaceColorSpace, "pokemon_go"}},
-    {RestrictedTraceID::professional_baseball_spirits,
+    {"professional_baseball_spirits",
      {professional_baseball_spirits::kReplayContextClientMajorVersion,
       professional_baseball_spirits::kReplayContextClientMinorVersion,
       professional_baseball_spirits::kReplayFrameStart,
@@ -493,39 +499,39 @@
       professional_baseball_spirits::kReplayDrawSurfaceWidth,
       professional_baseball_spirits::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "professional_baseball_spirits"}},
-    {RestrictedTraceID::pubg_mobile_battle_royale,
+    {"pubg_mobile_battle_royale",
      {pubg_mobile_battle_royale::kReplayContextClientMajorVersion,
       pubg_mobile_battle_royale::kReplayContextClientMinorVersion,
       pubg_mobile_battle_royale::kReplayFrameStart, pubg_mobile_battle_royale::kReplayFrameEnd,
       pubg_mobile_battle_royale::kReplayDrawSurfaceWidth,
       pubg_mobile_battle_royale::kReplayDrawSurfaceHeight,
       pubg_mobile_battle_royale::kReplayDrawSurfaceColorSpace, "pubg_mobile_battle_royale"}},
-    {RestrictedTraceID::pubg_mobile_lite,
+    {"pubg_mobile_lite",
      {pubg_mobile_lite::kReplayContextClientMajorVersion,
       pubg_mobile_lite::kReplayContextClientMinorVersion, pubg_mobile_lite::kReplayFrameStart,
       pubg_mobile_lite::kReplayFrameEnd, pubg_mobile_lite::kReplayDrawSurfaceWidth,
       pubg_mobile_lite::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "pubg_mobile_lite"}},
-    {RestrictedTraceID::pubg_mobile_skydive,
+    {"pubg_mobile_skydive",
      {pubg_mobile_skydive::kReplayContextClientMajorVersion,
       pubg_mobile_skydive::kReplayContextClientMinorVersion, pubg_mobile_skydive::kReplayFrameStart,
       pubg_mobile_skydive::kReplayFrameEnd, pubg_mobile_skydive::kReplayDrawSurfaceWidth,
       pubg_mobile_skydive::kReplayDrawSurfaceHeight,
       pubg_mobile_skydive::kReplayDrawSurfaceColorSpace, "pubg_mobile_skydive"}},
-    {RestrictedTraceID::ragnarok_m_eternal_love,
+    {"ragnarok_m_eternal_love",
      {ragnarok_m_eternal_love::kReplayContextClientMajorVersion,
       ragnarok_m_eternal_love::kReplayContextClientMinorVersion,
       ragnarok_m_eternal_love::kReplayFrameStart, ragnarok_m_eternal_love::kReplayFrameEnd,
       ragnarok_m_eternal_love::kReplayDrawSurfaceWidth,
       ragnarok_m_eternal_love::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "ragnarok_m_eternal_love"}},
-    {RestrictedTraceID::raid_shadow_legends,
+    {"raid_shadow_legends",
      {raid_shadow_legends::kReplayContextClientMajorVersion,
       raid_shadow_legends::kReplayContextClientMinorVersion, raid_shadow_legends::kReplayFrameStart,
       raid_shadow_legends::kReplayFrameEnd, raid_shadow_legends::kReplayDrawSurfaceWidth,
       raid_shadow_legends::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "raid_shadow_legends"}},
-    {RestrictedTraceID::real_commando_secret_mission,
+    {"real_commando_secret_mission",
      {real_commando_secret_mission::kReplayContextClientMajorVersion,
       real_commando_secret_mission::kReplayContextClientMinorVersion,
       real_commando_secret_mission::kReplayFrameStart,
@@ -533,181 +539,190 @@
       real_commando_secret_mission::kReplayDrawSurfaceWidth,
       real_commando_secret_mission::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "real_commando_secret_mission"}},
-    {RestrictedTraceID::real_cricket_20,
+    {"real_cricket_20",
      {real_cricket_20::kReplayContextClientMajorVersion,
       real_cricket_20::kReplayContextClientMinorVersion, real_cricket_20::kReplayFrameStart,
       real_cricket_20::kReplayFrameEnd, real_cricket_20::kReplayDrawSurfaceWidth,
       real_cricket_20::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "real_cricket_20"}},
-    {RestrictedTraceID::real_gangster_crime,
+    {"real_gangster_crime",
      {real_gangster_crime::kReplayContextClientMajorVersion,
       real_gangster_crime::kReplayContextClientMinorVersion, real_gangster_crime::kReplayFrameStart,
       real_gangster_crime::kReplayFrameEnd, real_gangster_crime::kReplayDrawSurfaceWidth,
       real_gangster_crime::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "real_gangster_crime"}},
-    {RestrictedTraceID::rise_of_kingdoms,
+    {"rise_of_kingdoms",
      {rise_of_kingdoms::kReplayContextClientMajorVersion,
       rise_of_kingdoms::kReplayContextClientMinorVersion, rise_of_kingdoms::kReplayFrameStart,
       rise_of_kingdoms::kReplayFrameEnd, rise_of_kingdoms::kReplayDrawSurfaceWidth,
       rise_of_kingdoms::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "rise_of_kingdoms"}},
-    {RestrictedTraceID::romancing_saga,
+    {"romancing_saga",
      {romancing_saga::kReplayContextClientMajorVersion,
       romancing_saga::kReplayContextClientMinorVersion, romancing_saga::kReplayFrameStart,
       romancing_saga::kReplayFrameEnd, romancing_saga::kReplayDrawSurfaceWidth,
       romancing_saga::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "romancing_saga"}},
-    {RestrictedTraceID::rope_hero_vice_town,
+    {"rope_hero_vice_town",
      {rope_hero_vice_town::kReplayContextClientMajorVersion,
       rope_hero_vice_town::kReplayContextClientMinorVersion, rope_hero_vice_town::kReplayFrameStart,
       rope_hero_vice_town::kReplayFrameEnd, rope_hero_vice_town::kReplayDrawSurfaceWidth,
       rope_hero_vice_town::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "rope_hero_vice_town"}},
-    {RestrictedTraceID::saint_seiya_awakening,
+    {"saint_seiya_awakening",
      {saint_seiya_awakening::kReplayContextClientMajorVersion,
       saint_seiya_awakening::kReplayContextClientMinorVersion,
       saint_seiya_awakening::kReplayFrameStart, saint_seiya_awakening::kReplayFrameEnd,
       saint_seiya_awakening::kReplayDrawSurfaceWidth,
       saint_seiya_awakening::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "saint_seiya_awakening"}},
-    {RestrictedTraceID::sakura_school_simulator,
+    {"sakura_school_simulator",
      {sakura_school_simulator::kReplayContextClientMajorVersion,
       sakura_school_simulator::kReplayContextClientMinorVersion,
       sakura_school_simulator::kReplayFrameStart, sakura_school_simulator::kReplayFrameEnd,
       sakura_school_simulator::kReplayDrawSurfaceWidth,
       sakura_school_simulator::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "sakura_school_simulator"}},
-    {RestrictedTraceID::scrabble_go,
+    {"scrabble_go",
      {scrabble_go::kReplayContextClientMajorVersion, scrabble_go::kReplayContextClientMinorVersion,
       scrabble_go::kReplayFrameStart, scrabble_go::kReplayFrameEnd,
       scrabble_go::kReplayDrawSurfaceWidth, scrabble_go::kReplayDrawSurfaceHeight,
       scrabble_go::kReplayDrawSurfaceColorSpace, "scrabble_go"}},
-    {RestrictedTraceID::shadow_fight_2,
+    {"shadow_fight_2",
      {shadow_fight_2::kReplayContextClientMajorVersion,
       shadow_fight_2::kReplayContextClientMinorVersion, shadow_fight_2::kReplayFrameStart,
       shadow_fight_2::kReplayFrameEnd, shadow_fight_2::kReplayDrawSurfaceWidth,
       shadow_fight_2::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "shadow_fight_2"}},
-    {RestrictedTraceID::slingshot_test1,
+    {"slingshot_test1",
      {slingshot_test1::kReplayContextClientMajorVersion,
       slingshot_test1::kReplayContextClientMinorVersion, slingshot_test1::kReplayFrameStart,
       slingshot_test1::kReplayFrameEnd, slingshot_test1::kReplayDrawSurfaceWidth,
       slingshot_test1::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "slingshot_test1"}},
-    {RestrictedTraceID::slingshot_test2,
+    {"slingshot_test2",
      {slingshot_test2::kReplayContextClientMajorVersion,
       slingshot_test2::kReplayContextClientMinorVersion, slingshot_test2::kReplayFrameStart,
       slingshot_test2::kReplayFrameEnd, slingshot_test2::kReplayDrawSurfaceWidth,
       slingshot_test2::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "slingshot_test2"}},
-    {RestrictedTraceID::sniper_3d,
+    {"sniper_3d",
      {sniper_3d::kReplayContextClientMajorVersion, sniper_3d::kReplayContextClientMinorVersion,
       sniper_3d::kReplayFrameStart, sniper_3d::kReplayFrameEnd, sniper_3d::kReplayDrawSurfaceWidth,
       sniper_3d::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace, "sniper_3d"}},
-    {RestrictedTraceID::sonic_the_hedgehog,
+    {"sonic_the_hedgehog",
      {sonic_the_hedgehog::kReplayContextClientMajorVersion,
       sonic_the_hedgehog::kReplayContextClientMinorVersion, sonic_the_hedgehog::kReplayFrameStart,
       sonic_the_hedgehog::kReplayFrameEnd, sonic_the_hedgehog::kReplayDrawSurfaceWidth,
       sonic_the_hedgehog::kReplayDrawSurfaceHeight,
       sonic_the_hedgehog::kReplayDrawSurfaceColorSpace, "sonic_the_hedgehog"}},
-    {RestrictedTraceID::standoff_2,
+    {"standoff_2",
      {standoff_2::kReplayContextClientMajorVersion, standoff_2::kReplayContextClientMinorVersion,
       standoff_2::kReplayFrameStart, standoff_2::kReplayFrameEnd,
       standoff_2::kReplayDrawSurfaceWidth, standoff_2::kReplayDrawSurfaceHeight,
       kDefaultReplayDrawSurfaceColorSpace, "standoff_2"}},
-    {RestrictedTraceID::subway_princess_runner,
+    {"subway_princess_runner",
      {subway_princess_runner::kReplayContextClientMajorVersion,
       subway_princess_runner::kReplayContextClientMinorVersion,
       subway_princess_runner::kReplayFrameStart, subway_princess_runner::kReplayFrameEnd,
       subway_princess_runner::kReplayDrawSurfaceWidth,
       subway_princess_runner::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "subway_princess_runner"}},
-    {RestrictedTraceID::subway_surfers,
+    {"subway_surfers",
      {subway_surfers::kReplayContextClientMajorVersion,
       subway_surfers::kReplayContextClientMinorVersion, subway_surfers::kReplayFrameStart,
       subway_surfers::kReplayFrameEnd, subway_surfers::kReplayDrawSurfaceWidth,
       subway_surfers::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "subway_surfers"}},
-    {RestrictedTraceID::summoners_war,
+    {"summoners_war",
      {summoners_war::kReplayContextClientMajorVersion,
       summoners_war::kReplayContextClientMinorVersion, summoners_war::kReplayFrameStart,
       summoners_war::kReplayFrameEnd, summoners_war::kReplayDrawSurfaceWidth,
       summoners_war::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "summoners_war"}},
-    {RestrictedTraceID::talking_tom_hero_dash,
+    {"talking_tom_hero_dash",
      {talking_tom_hero_dash::kReplayContextClientMajorVersion,
       talking_tom_hero_dash::kReplayContextClientMinorVersion,
       talking_tom_hero_dash::kReplayFrameStart, talking_tom_hero_dash::kReplayFrameEnd,
       talking_tom_hero_dash::kReplayDrawSurfaceWidth,
       talking_tom_hero_dash::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "talking_tom_hero_dash"}},
-    {RestrictedTraceID::temple_run_2,
+    {"temple_run_2",
      {temple_run_2::kReplayContextClientMajorVersion,
       temple_run_2::kReplayContextClientMinorVersion, temple_run_2::kReplayFrameStart,
       temple_run_2::kReplayFrameEnd, temple_run_2::kReplayDrawSurfaceWidth,
       temple_run_2::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace, "temple_run_2"}},
-    {RestrictedTraceID::temple_run_300,
+    {"temple_run_300",
      {temple_run_300::kReplayContextClientMajorVersion,
       temple_run_300::kReplayContextClientMinorVersion, temple_run_300::kReplayFrameStart,
       temple_run_300::kReplayFrameEnd, temple_run_300::kReplayDrawSurfaceWidth,
       temple_run_300::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "temple_run_300"}},
-    {RestrictedTraceID::toon_blast,
+    {"toon_blast",
      {toon_blast::kReplayContextClientMajorVersion, toon_blast::kReplayContextClientMinorVersion,
       toon_blast::kReplayFrameStart, toon_blast::kReplayFrameEnd,
       toon_blast::kReplayDrawSurfaceWidth, toon_blast::kReplayDrawSurfaceHeight,
       kDefaultReplayDrawSurfaceColorSpace, "toon_blast"}},
-    {RestrictedTraceID::township,
+    {"township",
      {township::kReplayContextClientMajorVersion, township::kReplayContextClientMinorVersion,
       township::kReplayFrameStart, township::kReplayFrameEnd, township::kReplayDrawSurfaceWidth,
       township::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace, "township"}},
-    {RestrictedTraceID::trex_200,
+    {"trex_200",
      {trex_200::kReplayContextClientMajorVersion, trex_200::kReplayContextClientMinorVersion,
       trex_200::kReplayFrameStart, trex_200::kReplayFrameEnd, trex_200::kReplayDrawSurfaceWidth,
       trex_200::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace, "trex_200"}},
-    {RestrictedTraceID::whatsapp,
+    {"whatsapp",
      {whatsapp::kReplayContextClientMajorVersion, whatsapp::kReplayContextClientMinorVersion,
       whatsapp::kReplayFrameStart, whatsapp::kReplayFrameEnd, whatsapp::kReplayDrawSurfaceWidth,
       whatsapp::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace, "whatsapp"}},
-    {RestrictedTraceID::words_with_friends_2,
+    {"words_with_friends_2",
      {words_with_friends_2::kReplayContextClientMajorVersion,
       words_with_friends_2::kReplayContextClientMinorVersion,
       words_with_friends_2::kReplayFrameStart, words_with_friends_2::kReplayFrameEnd,
       words_with_friends_2::kReplayDrawSurfaceWidth, words_with_friends_2::kReplayDrawSurfaceHeight,
       words_with_friends_2::kReplayDrawSurfaceColorSpace, "words_with_friends_2"}},
-    {RestrictedTraceID::wordscapes,
+    {"wordscapes",
      {wordscapes::kReplayContextClientMajorVersion, wordscapes::kReplayContextClientMinorVersion,
       wordscapes::kReplayFrameStart, wordscapes::kReplayFrameEnd,
       wordscapes::kReplayDrawSurfaceWidth, wordscapes::kReplayDrawSurfaceHeight,
       wordscapes::kReplayDrawSurfaceColorSpace, "wordscapes"}},
-    {RestrictedTraceID::world_of_kings,
+    {"world_of_kings",
      {world_of_kings::kReplayContextClientMajorVersion,
       world_of_kings::kReplayContextClientMinorVersion, world_of_kings::kReplayFrameStart,
       world_of_kings::kReplayFrameEnd, world_of_kings::kReplayDrawSurfaceWidth,
       world_of_kings::kReplayDrawSurfaceHeight, world_of_kings::kReplayDrawSurfaceColorSpace,
       "world_of_kings"}},
-    {RestrictedTraceID::world_of_tanks_blitz,
+    {"world_of_tanks_blitz",
      {world_of_tanks_blitz::kReplayContextClientMajorVersion,
       world_of_tanks_blitz::kReplayContextClientMinorVersion,
       world_of_tanks_blitz::kReplayFrameStart, world_of_tanks_blitz::kReplayFrameEnd,
       world_of_tanks_blitz::kReplayDrawSurfaceWidth, world_of_tanks_blitz::kReplayDrawSurfaceHeight,
       kDefaultReplayDrawSurfaceColorSpace, "world_of_tanks_blitz"}},
-    {RestrictedTraceID::world_war_doh,
+    {"world_war_doh",
      {world_war_doh::kReplayContextClientMajorVersion,
       world_war_doh::kReplayContextClientMinorVersion, world_war_doh::kReplayFrameStart,
       world_war_doh::kReplayFrameEnd, world_war_doh::kReplayDrawSurfaceWidth,
       world_war_doh::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "world_war_doh"}},
-    {RestrictedTraceID::worms_zone_io,
+    {"worms_zone_io",
      {worms_zone_io::kReplayContextClientMajorVersion,
       worms_zone_io::kReplayContextClientMinorVersion, worms_zone_io::kReplayFrameStart,
       worms_zone_io::kReplayFrameEnd, worms_zone_io::kReplayDrawSurfaceWidth,
       worms_zone_io::kReplayDrawSurfaceHeight, kDefaultReplayDrawSurfaceColorSpace,
       "worms_zone_io"}}};
-}
+}  // namespace
 
-const TraceInfo &GetTraceInfo(RestrictedTraceID traceID)
+const TraceInfo &GetTraceInfo(const char *traceName)
 {
-    return kTraceInfos[traceID];
+    // Could be improved using std::lower_bound.
+    for (const TracePair &tracePair : kTraceInfos)
+    {
+        if (strncmp(tracePair.name, traceName, kTraceInfoMaxNameLen) == 0)
+        {
+            return tracePair.info;
+        }
+    }
+    UNREACHABLE();
+    return kTraceInfos[0].info;
 }
 }  // namespace angle
diff --git a/src/tests/restricted_traces/restricted_traces_autogen.h b/src/tests/restricted_traces/restricted_traces_autogen.h
index e3cb434..a8a5e64 100644
--- a/src/tests/restricted_traces/restricted_traces_autogen.h
+++ b/src/tests/restricted_traces/restricted_traces_autogen.h
@@ -27,114 +27,6 @@
 
 namespace angle
 {
-enum class RestrictedTraceID
-{
-    aliexpress,
-    among_us,
-    angry_birds_2_1500,
-    arena_of_valor,
-    asphalt_8,
-    avakin_life,
-    aztec_ruins,
-    beach_buggy_racing,
-    brawl_stars,
-    bricks_breaker_quest,
-    bubble_shooter,
-    bus_simulator_indonesia,
-    call_break_offline_card_game,
-    candy_crush_500,
-    candy_crush_soda_saga,
-    car_parking_multiplayer,
-    clash_of_clans,
-    clash_royale,
-    cod_mobile,
-    coin_master,
-    command_and_conquer_rivals,
-    cookie_run_kingdom,
-    disney_tsum_tsum,
-    dr_driving,
-    dragon_ball_legends,
-    dragon_raja,
-    efootball_pes_2021,
-    egypt_1500,
-    eight_ball_pool,
-    extreme_car_driving_simulator,
-    fallout_shelter_online,
-    farm_heroes_saga,
-    fate_grand_order,
-    fifa_mobile,
-    final_fantasy,
-    free_fire,
-    gardenscapes,
-    genshin_impact,
-    google_maps,
-    happy_color,
-    hay_day,
-    hearthstone,
-    higgs_domino_island,
-    hill_climb_racing,
-    homescapes,
-    idle_heroes,
-    junes_journey,
-    kartrider_rush,
-    klondike_adventures,
-    league_of_legends_wild_rift,
-    lego_legacy,
-    lineage_m,
-    ludo_king,
-    magic_tiles_3,
-    manhattan_10,
-    manhattan_31,
-    mario_kart_tour,
-    marvel_contest_of_champions,
-    messenger_lite,
-    minecraft,
-    mobile_legends,
-    nba2k20_800,
-    one_punch_man,
-    plants_vs_zombies_2,
-    pokemon_go,
-    professional_baseball_spirits,
-    pubg_mobile_battle_royale,
-    pubg_mobile_lite,
-    pubg_mobile_skydive,
-    ragnarok_m_eternal_love,
-    raid_shadow_legends,
-    real_commando_secret_mission,
-    real_cricket_20,
-    real_gangster_crime,
-    rise_of_kingdoms,
-    romancing_saga,
-    rope_hero_vice_town,
-    saint_seiya_awakening,
-    sakura_school_simulator,
-    scrabble_go,
-    shadow_fight_2,
-    slingshot_test1,
-    slingshot_test2,
-    sniper_3d,
-    sonic_the_hedgehog,
-    standoff_2,
-    subway_princess_runner,
-    subway_surfers,
-    summoners_war,
-    talking_tom_hero_dash,
-    temple_run_2,
-    temple_run_300,
-    toon_blast,
-    township,
-    trex_200,
-    whatsapp,
-    words_with_friends_2,
-    wordscapes,
-    world_of_kings,
-    world_of_tanks_blitz,
-    world_war_doh,
-    worms_zone_io,
-    InvalidEnum,
-    EnumCount = InvalidEnum
-};
-
 static constexpr size_t kTraceInfoMaxNameLen = 32;
 
 static constexpr uint32_t kDefaultReplayContextClientMajorVersion = 3;
@@ -153,7 +45,7 @@
     char name[kTraceInfoMaxNameLen];
 };
 
-ANGLE_TRACE_EXPORT const TraceInfo &GetTraceInfo(RestrictedTraceID traceID);
+ANGLE_TRACE_EXPORT const TraceInfo &GetTraceInfo(const char *traceName);
 }  // namespace angle
 
 #endif  // ANGLE_RESTRICTED_TRACES_AUTOGEN_H_
diff --git a/src/tests/test_utils/angle_test_configs.cpp b/src/tests/test_utils/angle_test_configs.cpp
index 2950127..259cc81 100644
--- a/src/tests/test_utils/angle_test_configs.cpp
+++ b/src/tests/test_utils/angle_test_configs.cpp
@@ -49,6 +49,16 @@
     return eglParameters.deviceType == EGL_PLATFORM_ANGLE_DEVICE_TYPE_SWIFTSHADER_ANGLE;
 }
 
+bool PlatformParameters::isVulkan() const
+{
+    return eglParameters.renderer == EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE;
+}
+
+bool PlatformParameters::isANGLE() const
+{
+    return driver == GLESDriverType::AngleEGL;
+}
+
 EGLint PlatformParameters::getAllocateNonZeroMemoryFeature() const
 {
     return eglParameters.allocateNonZeroMemoryFeature;
diff --git a/src/tests/test_utils/angle_test_configs.h b/src/tests/test_utils/angle_test_configs.h
index ff482b6..7931d35 100644
--- a/src/tests/test_utils/angle_test_configs.h
+++ b/src/tests/test_utils/angle_test_configs.h
@@ -34,6 +34,8 @@
     EGLint getRenderer() const;
     EGLint getDeviceType() const;
     bool isSwiftshader() const;
+    bool isVulkan() const;
+    bool isANGLE() const;
     EGLint getAllocateNonZeroMemoryFeature() const;
 
     void initDefaultParameters();
