Capture/Replay: Use custom GL header.

This will let us override the util loader for all new traces. It will
also be easier to maintain going forward if we have to change the
header again.

The end goal is to run the trace tests with a custom GL layer that can
intercept certain API calls.

Bug: angleproject:4845
Change-Id: I028a1afdadf638998805d7b9a2cc6717cf5f0148
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2308029
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
diff --git a/src/libANGLE/FrameCapture.cpp b/src/libANGLE/FrameCapture.cpp
index 2613391..69fa989 100644
--- a/src/libANGLE/FrameCapture.cpp
+++ b/src/libANGLE/FrameCapture.cpp
@@ -992,7 +992,7 @@
 
     header << "#pragma once\n";
     header << "\n";
-    header << "#include \"util/util_gl.h\"\n";
+    header << "#include \"angle_trace_gl.h\"\n";
     header << "\n";
     header << "#include <cstdint>\n";
     header << "#include <cstdio>\n";
@@ -1043,12 +1043,6 @@
                << "StateData(uint32_t frameIndex);\n";
     }
     header << "\n";
-    header << "using FramebufferChangeCallback = void(*)(void *userData, GLenum target, GLuint "
-              "framebuffer);\n";
-    header << "void SetFramebufferChangeCallback(void *userData, FramebufferChangeCallback "
-              "callback);\n";
-    header << "void OnFramebufferChange(GLenum target, GLuint framebuffer);\n";
-    header << "\n";
     for (uint32_t frameIndex = frameStart; frameIndex <= frameEnd; ++frameIndex)
     {
         header << "void " << FmtReplayFunction(contextId, frameIndex) << ";\n";
@@ -1102,8 +1096,6 @@
     source << "\n";
     source << "DecompressCallback gDecompressCallback;\n";
     source << "const char *gBinaryDataDir = \".\";\n";
-    source << "FramebufferChangeCallback gFramebufferChangeCallback;\n";
-    source << "void *gFramebufferChangeCallbackUserData;\n";
     source << "}  // namespace\n";
     source << "\n";
     source << "LocationsMap gUniformLocations;\n";
@@ -1152,21 +1144,6 @@
     header << "\n";
 
     source << "\n";
-    source << "void SetFramebufferChangeCallback(void *userData, FramebufferChangeCallback "
-              "callback)\n";
-    source << "{\n";
-    source << "    gFramebufferChangeCallbackUserData = userData;\n";
-    source << "    gFramebufferChangeCallback = callback;\n";
-    source << "}\n";
-    source << "\n";
-    source << "void OnFramebufferChange(GLenum target, GLuint framebuffer)\n";
-    source << "{\n";
-    source << "    if (gFramebufferChangeCallback)\n";
-    source << "        gFramebufferChangeCallback(gFramebufferChangeCallbackUserData, target, "
-              "framebuffer);\n";
-    source << "}\n";
-
-    source << "\n";
     source << "void ReplayContext" << static_cast<int>(contextId) << "Frame(uint32_t frameIndex)\n";
     source << "{\n";
     source << "    switch (frameIndex)\n";
@@ -1436,16 +1413,6 @@
     callsOut->emplace_back("DeleteUniformLocations", std::move(params));
 }
 
-void CaptureOnFramebufferChange(GLenum target,
-                                gl::FramebufferID framebufferID,
-                                std::vector<CallCapture> *callsOut)
-{
-    ParamBuffer params;
-    params.addValueParam("target", ParamType::TGLenum, target);
-    params.addValueParam("framebuffer", ParamType::TFramebufferID, framebufferID);
-    callsOut->emplace_back("OnFramebufferChange", std::move(params));
-}
-
 void MaybeCaptureUpdateResourceIDs(std::vector<CallCapture> *callsOut)
 {
     const CallCapture &call = callsOut->back();
@@ -3888,15 +3855,6 @@
             CaptureDeleteUniformLocations(param.value.ShaderProgramIDVal, &mFrameCalls);
             break;
         }
-        case gl::EntryPoint::BindFramebuffer:
-        {
-            const ParamCapture &target = lastCall.params.getParam("target", ParamType::TGLenum, 0);
-            const ParamCapture &framebuffer =
-                lastCall.params.getParam("framebufferPacked", ParamType::TFramebufferID, 1);
-            CaptureOnFramebufferChange(target.value.GLenumVal, framebuffer.value.FramebufferIDVal,
-                                       &mFrameCalls);
-            break;
-        }
         default:
             break;
     }
diff --git a/src/tests/BUILD.gn b/src/tests/BUILD.gn
index 8b50a81..2281ef9 100644
--- a/src/tests/BUILD.gn
+++ b/src/tests/BUILD.gn
@@ -293,6 +293,7 @@
       # Imports "angle_restricted_traces"
       import("perf_tests/restricted_traces/restricted_traces_autogen.gni")
       sources = [
+        "perf_tests/restricted_traces/angle_trace_gl.h",
         "perf_tests/restricted_traces/restricted_traces_autogen.cpp",
         "perf_tests/restricted_traces/restricted_traces_autogen.h",
       ]
@@ -300,6 +301,8 @@
       data = []
       defines = [ "ANGLE_TRACE_IMPLEMENTATION" ]
 
+      include_dirs = [ "perf_tests/restricted_traces" ]
+
       foreach(_test_info, angle_restricted_traces) {
         _test_and_ctx = []
         _test_and_ctx = string_split(_test_info)
diff --git a/src/tests/perf_tests/TracePerfTest.cpp b/src/tests/perf_tests/TracePerfTest.cpp
index d742c7c..c6a2f73 100644
--- a/src/tests/perf_tests/TracePerfTest.cpp
+++ b/src/tests/perf_tests/TracePerfTest.cpp
@@ -27,8 +27,6 @@
 
 namespace
 {
-void FramebufferChangeCallback(void *userData, GLenum target, GLuint framebuffer);
-
 struct TracePerfParams final : public RenderTestParams
 {
     // Common default options
@@ -67,7 +65,7 @@
     void destroyBenchmark() override;
     void drawBenchmark() override;
 
-    void onFramebufferChange(GLenum target, GLuint framebuffer);
+    void onReplayFramebufferChange(GLenum target, GLuint framebuffer);
 
     uint32_t mStartFrame;
     uint32_t mEndFrame;
@@ -286,8 +284,8 @@
     return mTimeline[firstSampleIndex].hostTime + hostRange * t;
 }
 
-// Callback from the perf tests.
-void TracePerfTest::onFramebufferChange(GLenum target, GLuint framebuffer)
+// Triggered when the replay calls glBindFramebuffer.
+void TracePerfTest::onReplayFramebufferChange(GLenum target, GLuint framebuffer)
 {
     if (!mIsTimestampQueryAvailable)
         return;
@@ -351,11 +349,6 @@
     glFinish();
 }
 
-ANGLE_MAYBE_UNUSED void FramebufferChangeCallback(void *userData, GLenum target, GLuint framebuffer)
-{
-    reinterpret_cast<TracePerfTest *>(userData)->onFramebufferChange(target, framebuffer);
-}
-
 TEST_P(TracePerfTest, Run)
 {
     run();
diff --git a/src/tests/perf_tests/restricted_traces/angle_trace_gl.h b/src/tests/perf_tests/restricted_traces/angle_trace_gl.h
new file mode 100644
index 0000000..db8c992
--- /dev/null
+++ b/src/tests/perf_tests/restricted_traces/angle_trace_gl.h
@@ -0,0 +1,14 @@
+//
+// Copyright 2020 The ANGLE Project Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// Sets up the GL bindings for the trace tests.
+
+#ifndef ANGLE_TRACE_GL_H_
+#define ANGLE_TRACE_GL_H_
+
+// TODO(jmadill): Bind to trace GL loader. http://anglebug.com/4845
+#include "util/util_gl.h"
+
+#endif  // ANGLE_TRACE_GL_H_