Commit f3a38d97 by Jamie Madill Committed by Commit Bot

Add a custom trace tests loader.

This custom loader will disambiguate the trace tests gl layer from the util GL/EGL loader. Bug: angleproject:4845 Change-Id: I5e8340eb50f736d931302f71f15f556fd9e52081 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2315627 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarCody Northrop <cnorthrop@google.com> Reviewed-by: 's avatarManh Nguyen <nguyenmh@google.com>
parent 2c41931c
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
"scripts/egl_angle_ext.xml": "scripts/egl_angle_ext.xml":
"087d6a3996a91fbb0b664cac57c50c4c", "087d6a3996a91fbb0b664cac57c50c4c",
"scripts/generate_loader.py": "scripts/generate_loader.py":
"c6c02d859fabc61410470f50198a5a80", "92c731390cf5c0305ea57a3661a01240",
"scripts/gl.xml": "scripts/gl.xml":
"e74a595068cbdd6064300be1e71b7cc9", "e74a595068cbdd6064300be1e71b7cc9",
"scripts/gl_angle_ext.xml": "scripts/gl_angle_ext.xml":
...@@ -17,6 +17,14 @@ ...@@ -17,6 +17,14 @@
"394c31d7e61b285be5bc6a2cb8325a8d", "394c31d7e61b285be5bc6a2cb8325a8d",
"src/libEGL/egl_loader_autogen.h": "src/libEGL/egl_loader_autogen.h":
"343b43d7318884204c0699cfaa8ef2dc", "343b43d7318884204c0699cfaa8ef2dc",
"src/tests/perf_tests/restricted_traces/trace_egl_loader_autogen.cpp":
"fa2cce11eef7e995c62c31da0658a5da",
"src/tests/perf_tests/restricted_traces/trace_egl_loader_autogen.h":
"389cf2453f8359538c391e58cd6a84d2",
"src/tests/perf_tests/restricted_traces/trace_gles_loader_autogen.cpp":
"7918a0ca5fd9efa5d7c67be5ab7ac3de",
"src/tests/perf_tests/restricted_traces/trace_gles_loader_autogen.h":
"5b3100dda9f66e388d0a6cbb49810e1b",
"util/egl_loader_autogen.cpp": "util/egl_loader_autogen.cpp":
"6eb720862e78992d0ed3abfe50bfa0ff", "6eb720862e78992d0ed3abfe50bfa0ff",
"util/egl_loader_autogen.h": "util/egl_loader_autogen.h":
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
"src/tests/perf_tests/restricted_traces/egypt_1500.tar.gz.sha1": "src/tests/perf_tests/restricted_traces/egypt_1500.tar.gz.sha1":
"1d80caa37b937f83c95cd053b1bdd4ac", "1d80caa37b937f83c95cd053b1bdd4ac",
"src/tests/perf_tests/restricted_traces/gen_restricted_traces.py": "src/tests/perf_tests/restricted_traces/gen_restricted_traces.py":
"8f72f02cfb21ad18c3558d38b77320cc", "79d6e6bcdcea1bf7236091183d34dd9e",
"src/tests/perf_tests/restricted_traces/manhattan_10.tar.gz.sha1": "src/tests/perf_tests/restricted_traces/manhattan_10.tar.gz.sha1":
"752781119592a190cc02b773adf38fc3", "752781119592a190cc02b773adf38fc3",
"src/tests/perf_tests/restricted_traces/nba2k20_800.tar.gz.sha1": "src/tests/perf_tests/restricted_traces/nba2k20_800.tar.gz.sha1":
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
"src/tests/perf_tests/restricted_traces/restricted_traces_autogen.gni": "src/tests/perf_tests/restricted_traces/restricted_traces_autogen.gni":
"7edfef5f418500f6092127065e3e894f", "7edfef5f418500f6092127065e3e894f",
"src/tests/perf_tests/restricted_traces/restricted_traces_autogen.h": "src/tests/perf_tests/restricted_traces/restricted_traces_autogen.h":
"38e25e80888e80d149e236456fed1715", "961c4192564a6198c8114969baa32bb7",
"src/tests/perf_tests/restricted_traces/subway_surfer_500.tar.gz.sha1": "src/tests/perf_tests/restricted_traces/subway_surfer_500.tar.gz.sha1":
"a47a797dd227f5025439b47cee80dbc9", "a47a797dd227f5025439b47cee80dbc9",
"src/tests/perf_tests/restricted_traces/temple_run_300.tar.gz.sha1": "src/tests/perf_tests/restricted_traces/temple_run_300.tar.gz.sha1":
......
...@@ -13,7 +13,7 @@ from datetime import date ...@@ -13,7 +13,7 @@ from datetime import date
import registry_xml import registry_xml
internal_prefix = "l_" DEFAULT_INTERNAL_PREFIX = "l_"
def write_header(data_source_name, def write_header(data_source_name,
...@@ -24,8 +24,10 @@ def write_header(data_source_name, ...@@ -24,8 +24,10 @@ def write_header(data_source_name,
lib, lib,
ns="", ns="",
prefix=None, prefix=None,
export=""): export="",
file_name = "%s_loader_autogen.h" % api internal_prefix=DEFAULT_INTERNAL_PREFIX,
file_prefix=""):
file_name = "%s%s_loader_autogen.h" % (file_prefix, api)
header_path = registry_xml.path_to(path, file_name) header_path = registry_xml.path_to(path, file_name)
def pre(cmd): def pre(cmd):
...@@ -53,14 +55,23 @@ def write_header(data_source_name, ...@@ -53,14 +55,23 @@ def write_header(data_source_name,
preamble=preamble, preamble=preamble,
export=export, export=export,
lib=lib.upper(), lib=lib.upper(),
load_fn_name="Load%s%s" % (prefix if prefix else "", api.upper())) load_fn_name="Load%s%s" % (prefix if prefix else "", api.upper()),
file_prefix=file_prefix)
out.write(loader_header) out.write(loader_header)
out.close() out.close()
def write_source(data_source_name, all_cmds, api, path, ns="", prefix=None, export=""): def write_source(data_source_name,
file_name = "%s_loader_autogen.cpp" % api all_cmds,
api,
path,
ns="",
prefix=None,
export="",
internal_prefix=DEFAULT_INTERNAL_PREFIX,
file_prefix=""):
file_name = "%s%s_loader_autogen.cpp" % (file_prefix, api)
source_path = registry_xml.path_to(path, file_name) source_path = registry_xml.path_to(path, file_name)
def pre(cmd): def pre(cmd):
...@@ -87,7 +98,8 @@ def write_source(data_source_name, all_cmds, api, path, ns="", prefix=None, expo ...@@ -87,7 +98,8 @@ def write_source(data_source_name, all_cmds, api, path, ns="", prefix=None, expo
set_pointers="\n".join(setters), set_pointers="\n".join(setters),
api_upper=api.upper(), api_upper=api.upper(),
api_lower=api, api_lower=api,
load_fn_name="Load%s%s" % (prefix if prefix else "", api.upper())) load_fn_name="Load%s%s" % (prefix if prefix else "", api.upper()),
file_prefix=file_prefix)
out.write(loader_source) out.write(loader_source)
out.close() out.close()
...@@ -123,7 +135,7 @@ def gen_libegl_loader(): ...@@ -123,7 +135,7 @@ def gen_libegl_loader():
write_source(data_source_name, all_cmds, "egl", path, prefix="EGL_") write_source(data_source_name, all_cmds, "egl", path, prefix="EGL_")
def gen_gl_loader(): def gen_gles_loader(gles_preamble, path, header_lib, export, internal_prefix, file_prefix):
data_source_name = "gl.xml and gl_angle_ext.xml" data_source_name = "gl.xml and gl_angle_ext.xml"
xml = registry_xml.RegistryXML("gl.xml", "gl_angle_ext.xml") xml = registry_xml.RegistryXML("gl.xml", "gl_angle_ext.xml")
...@@ -149,13 +161,27 @@ def gen_gl_loader(): ...@@ -149,13 +161,27 @@ def gen_gl_loader():
if registry_xml.support_EGL_ANGLE_explicit_context: if registry_xml.support_EGL_ANGLE_explicit_context:
all_cmds += [cmd + "ContextANGLE" for cmd in xml.all_cmd_names.get_all_commands()] all_cmds += [cmd + "ContextANGLE" for cmd in xml.all_cmd_names.get_all_commands()]
path = os.path.join("..", "util") write_header(
ex = "ANGLE_UTIL_EXPORT " data_source_name,
write_header(data_source_name, all_cmds, "gles", util_gles_preamble, path, "UTIL", export=ex) all_cmds,
write_source(data_source_name, all_cmds, "gles", path, export=ex) "gles",
gles_preamble,
path,
header_lib,
export=export,
internal_prefix=internal_prefix,
file_prefix=file_prefix)
write_source(
data_source_name,
all_cmds,
"gles",
path,
export=export,
internal_prefix=internal_prefix,
file_prefix=file_prefix)
def gen_egl_loader(): def gen_egl_loader(egl_preamble, path, header_lib, export, internal_prefix, file_prefix):
data_source_name = "egl.xml and egl_angle_ext.xml" data_source_name = "egl.xml and egl_angle_ext.xml"
xml = registry_xml.RegistryXML("egl.xml", "egl_angle_ext.xml") xml = registry_xml.RegistryXML("egl.xml", "egl_angle_ext.xml")
...@@ -172,13 +198,43 @@ def gen_egl_loader(): ...@@ -172,13 +198,43 @@ def gen_egl_loader():
all_cmds = xml.all_cmd_names.get_all_commands() all_cmds = xml.all_cmd_names.get_all_commands()
write_header(
data_source_name,
all_cmds,
"egl",
egl_preamble,
path,
header_lib,
export=export,
internal_prefix=internal_prefix,
file_prefix=file_prefix)
write_source(
data_source_name,
all_cmds,
"egl",
path,
export=export,
internal_prefix=internal_prefix,
file_prefix=file_prefix)
def gen_util_gles_and_egl_loaders():
path = os.path.join("..", "util") path = os.path.join("..", "util")
ex = "ANGLE_UTIL_EXPORT " export = "ANGLE_UTIL_EXPORT "
write_header(data_source_name, all_cmds, "egl", util_egl_preamble, path, "UTIL", export=ex) lib = "UTIL"
write_source(data_source_name, all_cmds, "egl", path, export=ex) gen_gles_loader(util_gles_preamble, path, lib, export, DEFAULT_INTERNAL_PREFIX, "")
gen_egl_loader(util_egl_preamble, path, lib, export, DEFAULT_INTERNAL_PREFIX, "")
def gen_wgl_loader(): def gen_trace_gles_and_egl_loaders():
path = os.path.join("..", "src", "tests", "perf_tests", "restricted_traces")
export = "ANGLE_TRACE_EXPORT "
lib = "ANGLE_RESTRICTED_TRACES"
gen_gles_loader(trace_gles_preamble, path, lib, export, "t_", "trace_")
gen_egl_loader(trace_egl_preamble, path, lib, export, "t_", "trace_")
def gen_util_wgl_loader():
supported_wgl_extensions = [ supported_wgl_extensions = [
"WGL_ARB_create_context", "WGL_ARB_create_context",
...@@ -227,6 +283,10 @@ def main(): ...@@ -227,6 +283,10 @@ def main():
'../util/gles_loader_autogen.h', '../util/gles_loader_autogen.h',
'../util/windows/wgl_loader_autogen.cpp', '../util/windows/wgl_loader_autogen.cpp',
'../util/windows/wgl_loader_autogen.h', '../util/windows/wgl_loader_autogen.h',
'../src/tests/perf_tests/restricted_traces/trace_egl_loader_autogen.cpp',
'../src/tests/perf_tests/restricted_traces/trace_egl_loader_autogen.h',
'../src/tests/perf_tests/restricted_traces/trace_gles_loader_autogen.cpp',
'../src/tests/perf_tests/restricted_traces/trace_gles_loader_autogen.h',
] ]
if sys.argv[1] == 'inputs': if sys.argv[1] == 'inputs':
...@@ -239,9 +299,9 @@ def main(): ...@@ -239,9 +299,9 @@ def main():
return 0 return 0
gen_libegl_loader() gen_libegl_loader()
gen_gl_loader() gen_util_gles_and_egl_loaders()
gen_egl_loader() gen_util_wgl_loader()
gen_wgl_loader() gen_trace_gles_and_egl_loaders()
return 0 return 0
...@@ -264,6 +324,20 @@ util_egl_preamble = """#include "util/util_export.h" ...@@ -264,6 +324,20 @@ util_egl_preamble = """#include "util/util_export.h"
#include <EGL/eglext.h> #include <EGL/eglext.h>
""" """
trace_gles_preamble = """#if defined(GL_GLES_PROTOTYPES) && GL_GLES_PROTOTYPES
#error "Don't define GL prototypes if you want to use a loader!"
#endif // defined(GL_GLES_PROTOTYPES)
#include "angle_gl.h"
#include "restricted_traces_autogen.h"
"""
trace_egl_preamble = """#include "restricted_traces_autogen.h"
#include <EGL/egl.h>
#include <EGL/eglext.h>
"""
util_wgl_preamble = """ util_wgl_preamble = """
#include <WGL/wgl.h> #include <WGL/wgl.h>
#include <GLES2/gl2.h> #include <GLES2/gl2.h>
...@@ -290,7 +364,7 @@ template_loader_h = """// GENERATED FILE - DO NOT EDIT. ...@@ -290,7 +364,7 @@ template_loader_h = """// GENERATED FILE - DO NOT EDIT.
{defines} {defines}
{function_pointers} {function_pointers}
namespace angle namespace {file_prefix}angle
{{ {{
using GenericProc = void (*)(); using GenericProc = void (*)();
using LoadProc = GenericProc (KHRONOS_APIENTRY *)(const char *); using LoadProc = GenericProc (KHRONOS_APIENTRY *)(const char *);
...@@ -310,11 +384,11 @@ template_loader_cpp = """// GENERATED FILE - DO NOT EDIT. ...@@ -310,11 +384,11 @@ template_loader_cpp = """// GENERATED FILE - DO NOT EDIT.
// {api_lower}_loader_autogen.cpp: // {api_lower}_loader_autogen.cpp:
// Simple {api_upper} function loader. // Simple {api_upper} function loader.
#include "{api_lower}_loader_autogen.h" #include "{file_prefix}{api_lower}_loader_autogen.h"
{function_pointers} {function_pointers}
namespace angle namespace {file_prefix}angle
{{ {{
void {load_fn_name}(LoadProc loadProc) void {load_fn_name}(LoadProc loadProc)
{{ {{
......
...@@ -296,6 +296,10 @@ if (is_win || is_linux || is_android || is_mac || is_fuchsia) { ...@@ -296,6 +296,10 @@ if (is_win || is_linux || is_android || is_mac || is_fuchsia) {
"perf_tests/restricted_traces/angle_trace_gl.h", "perf_tests/restricted_traces/angle_trace_gl.h",
"perf_tests/restricted_traces/restricted_traces_autogen.cpp", "perf_tests/restricted_traces/restricted_traces_autogen.cpp",
"perf_tests/restricted_traces/restricted_traces_autogen.h", "perf_tests/restricted_traces/restricted_traces_autogen.h",
"perf_tests/restricted_traces/trace_egl_loader_autogen.cpp",
"perf_tests/restricted_traces/trace_egl_loader_autogen.h",
"perf_tests/restricted_traces/trace_gles_loader_autogen.cpp",
"perf_tests/restricted_traces/trace_gles_loader_autogen.h",
] ]
data = [] data = []
......
...@@ -99,6 +99,24 @@ class TracePerfTest : public ANGLERenderTest, public ::testing::WithParamInterfa ...@@ -99,6 +99,24 @@ class TracePerfTest : public ANGLERenderTest, public ::testing::WithParamInterfa
std::string mStartingDirectory; std::string mStartingDirectory;
}; };
class TracePerfTest;
TracePerfTest *gCurrentTracePerfTest = nullptr;
void BindFramebufferProc(GLenum target, GLuint framebuffer)
{
glBindFramebuffer(target, framebuffer);
gCurrentTracePerfTest->onReplayFramebufferChange(target, framebuffer);
}
angle::GenericProc KHRONOS_APIENTRY TraceLoadProc(const char *procName)
{
if (strcmp(procName, "glBindFramebuffer") == 0)
{
return reinterpret_cast<angle::GenericProc>(BindFramebufferProc);
}
return gCurrentTracePerfTest->getGLWindow()->getProcAddress(procName);
}
TracePerfTest::TracePerfTest() TracePerfTest::TracePerfTest()
: ANGLERenderTest("TracePerf", GetParam()), mStartFrame(0), mEndFrame(0) : ANGLERenderTest("TracePerf", GetParam()), mStartFrame(0), mEndFrame(0)
{ {
...@@ -120,6 +138,8 @@ TracePerfTest::TracePerfTest() ...@@ -120,6 +138,8 @@ TracePerfTest::TracePerfTest()
// We already swap in TracePerfTest::drawBenchmark, no need to swap again in the harness. // We already swap in TracePerfTest::drawBenchmark, no need to swap again in the harness.
disableTestHarnessSwap(); disableTestHarnessSwap();
gCurrentTracePerfTest = this;
} }
void TracePerfTest::initializeBenchmark() void TracePerfTest::initializeBenchmark()
...@@ -135,6 +155,8 @@ void TracePerfTest::initializeBenchmark() ...@@ -135,6 +155,8 @@ void TracePerfTest::initializeBenchmark()
angle::SetCWD(exeDir.c_str()); angle::SetCWD(exeDir.c_str());
} }
trace_angle::LoadGLES(TraceLoadProc);
const TraceInfo &traceInfo = GetTraceInfo(params.testID); const TraceInfo &traceInfo = GetTraceInfo(params.testID);
mStartFrame = traceInfo.startFrame; mStartFrame = traceInfo.startFrame;
mEndFrame = traceInfo.endFrame; mEndFrame = traceInfo.endFrame;
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
#ifndef ANGLE_TRACE_GL_H_ #ifndef ANGLE_TRACE_GL_H_
#define ANGLE_TRACE_GL_H_ #define ANGLE_TRACE_GL_H_
// TODO(jmadill): Bind to trace GL loader. http://anglebug.com/4845 #include "trace_egl_loader_autogen.h"
#include "util/util_gl.h" #include "trace_gles_loader_autogen.h"
#endif // ANGLE_TRACE_GL_H_ #endif // ANGLE_TRACE_GL_H_
...@@ -41,6 +41,7 @@ header_template = """// GENERATED FILE - DO NOT EDIT. ...@@ -41,6 +41,7 @@ header_template = """// GENERATED FILE - DO NOT EDIT.
#include <cstdint> #include <cstdint>
#include <vector> #include <vector>
#include <KHR/khrplatform.h>
// See util/util_export.h for details on import/export labels. // See util/util_export.h for details on import/export labels.
#if !defined(ANGLE_TRACE_EXPORT) #if !defined(ANGLE_TRACE_EXPORT)
...@@ -57,6 +58,13 @@ header_template = """// GENERATED FILE - DO NOT EDIT. ...@@ -57,6 +58,13 @@ header_template = """// GENERATED FILE - DO NOT EDIT.
# endif # endif
#endif // !defined(ANGLE_TRACE_EXPORT) #endif // !defined(ANGLE_TRACE_EXPORT)
namespace trace_angle
{{
using GenericProc = void (*)();
using LoadProc = GenericProc(KHRONOS_APIENTRY *)(const char *);
ANGLE_TRACE_EXPORT void LoadGLES(LoadProc loadProc);
}} // namespace trace_angle
namespace angle namespace angle
{{ {{
enum class RestrictedTraceID enum class RestrictedTraceID
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#ifndef ANGLE_RESTRICTED_TRACES_H_ #ifndef ANGLE_RESTRICTED_TRACES_H_
#define ANGLE_RESTRICTED_TRACES_H_ #define ANGLE_RESTRICTED_TRACES_H_
#include <KHR/khrplatform.h>
#include <cstdint> #include <cstdint>
#include <vector> #include <vector>
...@@ -28,6 +29,13 @@ ...@@ -28,6 +29,13 @@
# endif # endif
#endif // !defined(ANGLE_TRACE_EXPORT) #endif // !defined(ANGLE_TRACE_EXPORT)
namespace trace_angle
{
using GenericProc = void (*)();
using LoadProc = GenericProc(KHRONOS_APIENTRY *)(const char *);
ANGLE_TRACE_EXPORT void LoadGLES(LoadProc loadProc);
} // namespace trace_angle
namespace angle namespace angle
{ {
enum class RestrictedTraceID enum class RestrictedTraceID
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment