[PATCH] cli: Add testing for recently-added "apitrace trim --trim-spec"

Carl Worth cworth at cworth.org
Mon Jan 28 20:12:22 PST 2013


Each test here is quite simple. Without doing any image-based
verification, simply ensure that the expected calls are trimmed with
each different invocation of --trim-spec.
---

Obviously, this depends on the --trim-spec code which is on the master
branch of my apitrace repository.

I apologize for the length of these tests. Each one is actually very
simple: run the trim, and diff the untrimmed and trimmed traces.

They just look long because our non-context diffs include the entire
dump.

But it should at least be easy to visually verify that the expected
calls are removed by looking through these dumps.

 cli/CMakeLists.txt                       |    5 ++
 cli/cli-trim-spec-all.script             |   97 ++++++++++++++++++++++++++++++
 cli/cli-trim-spec-drawing.script         |   97 ++++++++++++++++++++++++++++++
 cli/cli-trim-spec-no-side-effects.script |   97 ++++++++++++++++++++++++++++++
 cli/cli-trim-spec-shaders.script         |   97 ++++++++++++++++++++++++++++++
 cli/cli-trim-spec-textures.script        |   97 ++++++++++++++++++++++++++++++
 6 files changed, 490 insertions(+)
 create mode 100644 cli/cli-trim-spec-all.script
 create mode 100644 cli/cli-trim-spec-drawing.script
 create mode 100644 cli/cli-trim-spec-no-side-effects.script
 create mode 100644 cli/cli-trim-spec-shaders.script
 create mode 100644 cli/cli-trim-spec-textures.script

diff --git a/cli/CMakeLists.txt b/cli/CMakeLists.txt
index 9d7ce55..d3aca6c 100644
--- a/cli/CMakeLists.txt
+++ b/cli/CMakeLists.txt
@@ -27,3 +27,8 @@ add_cli_test(NAME "cli-diff-images-mismatch.script")
 add_cli_test(NAME "cli-trim-single-swapbuffers.script")
 add_cli_test(NAME "cli-trim-unused-textures.script")
 add_cli_test(NAME "cli-trim-unused-shaders.script")
+add_cli_test(NAME "cli-trim-spec-all.script")
+add_cli_test(NAME "cli-trim-spec-no-side-effects.script")
+add_cli_test(NAME "cli-trim-spec-textures.script")
+add_cli_test(NAME "cli-trim-spec-shaders.script")
+add_cli_test(NAME "cli-trim-spec-drawing.script")
diff --git a/cli/cli-trim-spec-all.script b/cli/cli-trim-spec-all.script
new file mode 100644
index 0000000..53c1e0e
--- /dev/null
+++ b/cli/cli-trim-spec-all.script
@@ -0,0 +1,97 @@
+# Trim trace to the final glxDestroyContext, eliminating almost everything
+
+apitrace trim --auto --calls=88 glxsimple.trace
+
+# Verify that we actually trimmed what we wanted to (most of the trace)
+
+apitrace diff --diff=python glxsimple.trace glxsimple-trim.trace
+expect r"""  glXChooseVisual(37134976, 0, (GLX_RGBA, GLX_RED_SIZE, GLX_RED_SIZE, GLX_GREEN_SIZE, GLX_RED_SIZE, GLX_BLUE_SIZE, GLX_RED_SIZE, GLX_ALPHA_SIZE, GLX_RED_SIZE, GLX_DOUBLEBUFFER, GLX_DEPTH_SIZE, 24, GLX_STENCIL_SIZE, GLX_RED_SIZE, GLX_X_VISUAL_TYPE, GLX_DIRECT_COLOR, 0)) = ([37179128, 34, 0, 24, 5, 16711680, 65280, 255, 256, 8])
+  glXCreateContext(37134976, ([37179128, 34, 0, 24, 5, 16711680, 65280, 255, 256, 8]), 0, True) = 37241648
+  glXMakeCurrent(37134976, 41943041, 37241648) = True
+  glViewport(0, 0, 64, 64)
+  glMatrixMode(GL_PROJECTION)
+  glLoadIdentity()
+  glOrtho(0.0, 64.0, 64.0, 0.0, 0.0, 1.0)
+  glMatrixMode(GL_MODELVIEW)
+  glClearColor(0.0, 0.0, 1.0, 1.0)
+- glClear((GL_COLOR_BUFFER_BIT))
+- glXSwapBuffers(37134976, 41943041)
+- glCreateShader(GL_VERTEX_SHADER) = 7
+- glShaderSource(7, 1, ('void main()\n{\n        gl_Position = ftransform();\n}\n'), 0)
+- glCompileShader(7)
+- glCreateShader(GL_FRAGMENT_SHADER) = 8
+- glShaderSource(8, 1, ('#version 120\nuniform vec4 color;\nvoid main()\n{\n        gl_FragColor = color;\n}\n'), 0)
+- glCompileShader(8)
+- glCreateProgram() = 9
+- glAttachShader(9, 7)
+- glAttachShader(9, 8)
+- glLinkProgram(9)
+- glUseProgram(9)
+- glGetUniformLocation(9, color) = 0
+- glUniform4f(0, 0.0, 1.0, 0.0, 1.0)
+- glBegin(GL_QUADS)
+- glVertex2f(0.0, 0.0)
+- glVertex2f(64.0, 0.0)
+- glVertex2f(64.0, 64.0)
+- glVertex2f(0.0, 64.0)
+- glEnd()
+  glUseProgram(0)
+- glXSwapBuffers(37134976, 41943041)
+- glGenTextures(1, (1))
+  glBindTexture(GL_TEXTURE_2D, 1)
+- glTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, blob(3))
+  glEnable(GL_TEXTURE_2D)
+- glBegin(GL_QUADS)
+- glTexCoord2f(0.0, 0.0)
+- glVertex2f(0.0, 0.0)
+- glTexCoord2f(1.0, 0.0)
+- glVertex2f(64.0, 0.0)
+- glTexCoord2f(1.0, 1.0)
+- glVertex2f(64.0, 64.0)
+- glTexCoord2f(0.0, 1.0)
+- glVertex2f(0.0, 64.0)
+- glEnd()
+  glDisable(GL_TEXTURE_2D)
+- glXSwapBuffers(37134976, 41943041)
+  glClearColor(1.0, 0.0, 0.0, 1.0)
+- glClear((GL_COLOR_BUFFER_BIT))
+- glXSwapBuffers(37134976, 41943041)
+- glCreateShader(GL_VERTEX_SHADER) = 10
+- glShaderSource(10, 1, ('void main()\n{\n        gl_Position = ftransform();\n}\n'), 0)
+- glCompileShader(10)
+- glCreateShader(GL_FRAGMENT_SHADER) = 11
+- glShaderSource(11, 1, ('#version 120\nuniform vec4 color;\nvoid main()\n{\n        gl_FragColor = color;\n}\n'), 0)
+- glCompileShader(11)
+- glCreateProgram() = 12
+- glAttachShader(12, 10)
+- glAttachShader(12, 11)
+- glLinkProgram(12)
+- glUseProgram(12)
+- glGetUniformLocation(12, color) = 0
+- glUniform4f(0, 1.0, 0.0, 1.0, 1.0)
+- glBegin(GL_QUADS)
+- glVertex2f(0.0, 0.0)
+- glVertex2f(64.0, 0.0)
+- glVertex2f(64.0, 64.0)
+- glVertex2f(0.0, 64.0)
+- glEnd()
+  glUseProgram(0)
+- glXSwapBuffers(37134976, 41943041)
+- glGenTextures(1, (2))
+  glBindTexture(GL_TEXTURE_2D, 2)
+- glTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, blob(3))
+  glEnable(GL_TEXTURE_2D)
+- glBegin(GL_QUADS)
+- glTexCoord2f(0.0, 0.0)
+- glVertex2f(0.0, 0.0)
+- glTexCoord2f(1.0, 0.0)
+- glVertex2f(64.0, 0.0)
+- glTexCoord2f(1.0, 1.0)
+- glVertex2f(64.0, 64.0)
+- glTexCoord2f(0.0, 1.0)
+- glVertex2f(0.0, 64.0)
+- glEnd()
+  glDisable(GL_TEXTURE_2D)
+- glXSwapBuffers(37134976, 41943041)
+  glXDestroyContext(37134976, 37241648)
+"""
diff --git a/cli/cli-trim-spec-drawing.script b/cli/cli-trim-spec-drawing.script
new file mode 100644
index 0000000..ea4d3e7
--- /dev/null
+++ b/cli/cli-trim-spec-drawing.script
@@ -0,0 +1,97 @@
+# Trim trace to the final glxDestroyContext, eliminating almost everything
+
+apitrace trim --auto --trim-spec=drawing --calls=88 glxsimple.trace
+
+# Verify that we actually trimmed what we wanted to (just drawing calls)
+
+apitrace diff --diff=python glxsimple.trace glxsimple-trim.trace
+expect r"""  glXChooseVisual(37134976, 0, (GLX_RGBA, GLX_RED_SIZE, GLX_RED_SIZE, GLX_GREEN_SIZE, GLX_RED_SIZE, GLX_BLUE_SIZE, GLX_RED_SIZE, GLX_ALPHA_SIZE, GLX_RED_SIZE, GLX_DOUBLEBUFFER, GLX_DEPTH_SIZE, 24, GLX_STENCIL_SIZE, GLX_RED_SIZE, GLX_X_VISUAL_TYPE, GLX_DIRECT_COLOR, 0)) = ([37179128, 34, 0, 24, 5, 16711680, 65280, 255, 256, 8])
+  glXCreateContext(37134976, ([37179128, 34, 0, 24, 5, 16711680, 65280, 255, 256, 8]), 0, True) = 37241648
+  glXMakeCurrent(37134976, 41943041, 37241648) = True
+  glViewport(0, 0, 64, 64)
+  glMatrixMode(GL_PROJECTION)
+  glLoadIdentity()
+  glOrtho(0.0, 64.0, 64.0, 0.0, 0.0, 1.0)
+  glMatrixMode(GL_MODELVIEW)
+  glClearColor(0.0, 0.0, 1.0, 1.0)
+- glClear((GL_COLOR_BUFFER_BIT))
+- glXSwapBuffers(37134976, 41943041)
+  glCreateShader(GL_VERTEX_SHADER) = 7
+  glShaderSource(7, 1, ('void main()\n{\n        gl_Position = ftransform();\n}\n'), 0)
+  glCompileShader(7)
+  glCreateShader(GL_FRAGMENT_SHADER) = 8
+  glShaderSource(8, 1, ('#version 120\nuniform vec4 color;\nvoid main()\n{\n        gl_FragColor = color;\n}\n'), 0)
+  glCompileShader(8)
+  glCreateProgram() = 9
+  glAttachShader(9, 7)
+  glAttachShader(9, 8)
+  glLinkProgram(9)
+  glUseProgram(9)
+  glGetUniformLocation(9, color) = 0
+  glUniform4f(0, 0.0, 1.0, 0.0, 1.0)
+- glBegin(GL_QUADS)
+- glVertex2f(0.0, 0.0)
+- glVertex2f(64.0, 0.0)
+- glVertex2f(64.0, 64.0)
+- glVertex2f(0.0, 64.0)
+- glEnd()
+  glUseProgram(0)
+- glXSwapBuffers(37134976, 41943041)
+  glGenTextures(1, (1))
+  glBindTexture(GL_TEXTURE_2D, 1)
+  glTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, blob(3))
+  glEnable(GL_TEXTURE_2D)
+- glBegin(GL_QUADS)
+- glTexCoord2f(0.0, 0.0)
+- glVertex2f(0.0, 0.0)
+- glTexCoord2f(1.0, 0.0)
+- glVertex2f(64.0, 0.0)
+- glTexCoord2f(1.0, 1.0)
+- glVertex2f(64.0, 64.0)
+- glTexCoord2f(0.0, 1.0)
+- glVertex2f(0.0, 64.0)
+- glEnd()
+  glDisable(GL_TEXTURE_2D)
+- glXSwapBuffers(37134976, 41943041)
+  glClearColor(1.0, 0.0, 0.0, 1.0)
+- glClear((GL_COLOR_BUFFER_BIT))
+- glXSwapBuffers(37134976, 41943041)
+  glCreateShader(GL_VERTEX_SHADER) = 10
+  glShaderSource(10, 1, ('void main()\n{\n        gl_Position = ftransform();\n}\n'), 0)
+  glCompileShader(10)
+  glCreateShader(GL_FRAGMENT_SHADER) = 11
+  glShaderSource(11, 1, ('#version 120\nuniform vec4 color;\nvoid main()\n{\n        gl_FragColor = color;\n}\n'), 0)
+  glCompileShader(11)
+  glCreateProgram() = 12
+  glAttachShader(12, 10)
+  glAttachShader(12, 11)
+  glLinkProgram(12)
+  glUseProgram(12)
+  glGetUniformLocation(12, color) = 0
+  glUniform4f(0, 1.0, 0.0, 1.0, 1.0)
+- glBegin(GL_QUADS)
+- glVertex2f(0.0, 0.0)
+- glVertex2f(64.0, 0.0)
+- glVertex2f(64.0, 64.0)
+- glVertex2f(0.0, 64.0)
+- glEnd()
+  glUseProgram(0)
+- glXSwapBuffers(37134976, 41943041)
+  glGenTextures(1, (2))
+  glBindTexture(GL_TEXTURE_2D, 2)
+  glTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, blob(3))
+  glEnable(GL_TEXTURE_2D)
+- glBegin(GL_QUADS)
+- glTexCoord2f(0.0, 0.0)
+- glVertex2f(0.0, 0.0)
+- glTexCoord2f(1.0, 0.0)
+- glVertex2f(64.0, 0.0)
+- glTexCoord2f(1.0, 1.0)
+- glVertex2f(64.0, 64.0)
+- glTexCoord2f(0.0, 1.0)
+- glVertex2f(0.0, 64.0)
+- glEnd()
+  glDisable(GL_TEXTURE_2D)
+- glXSwapBuffers(37134976, 41943041)
+  glXDestroyContext(37134976, 37241648)
+"""
diff --git a/cli/cli-trim-spec-no-side-effects.script b/cli/cli-trim-spec-no-side-effects.script
new file mode 100644
index 0000000..aa4527c
--- /dev/null
+++ b/cli/cli-trim-spec-no-side-effects.script
@@ -0,0 +1,97 @@
+# Trim trace to the final glxDestroyContext, eliminating almost everything
+
+apitrace trim --auto --trim-spec=no-side-effects --calls=88 glxsimple.trace
+
+# Verify that we actually trimmed what we wanted to (just calls with no side effects)
+
+apitrace diff --diff=python glxsimple.trace glxsimple-trim.trace
+expect r"""  glXChooseVisual(37134976, 0, (GLX_RGBA, GLX_RED_SIZE, GLX_RED_SIZE, GLX_GREEN_SIZE, GLX_RED_SIZE, GLX_BLUE_SIZE, GLX_RED_SIZE, GLX_ALPHA_SIZE, GLX_RED_SIZE, GLX_DOUBLEBUFFER, GLX_DEPTH_SIZE, 24, GLX_STENCIL_SIZE, GLX_RED_SIZE, GLX_X_VISUAL_TYPE, GLX_DIRECT_COLOR, 0)) = ([37179128, 34, 0, 24, 5, 16711680, 65280, 255, 256, 8])
+  glXCreateContext(37134976, ([37179128, 34, 0, 24, 5, 16711680, 65280, 255, 256, 8]), 0, True) = 37241648
+  glXMakeCurrent(37134976, 41943041, 37241648) = True
+  glViewport(0, 0, 64, 64)
+  glMatrixMode(GL_PROJECTION)
+  glLoadIdentity()
+  glOrtho(0.0, 64.0, 64.0, 0.0, 0.0, 1.0)
+  glMatrixMode(GL_MODELVIEW)
+  glClearColor(0.0, 0.0, 1.0, 1.0)
+  glClear((GL_COLOR_BUFFER_BIT))
+- glXSwapBuffers(37134976, 41943041)
+  glCreateShader(GL_VERTEX_SHADER) = 7
+  glShaderSource(7, 1, ('void main()\n{\n        gl_Position = ftransform();\n}\n'), 0)
+  glCompileShader(7)
+  glCreateShader(GL_FRAGMENT_SHADER) = 8
+  glShaderSource(8, 1, ('#version 120\nuniform vec4 color;\nvoid main()\n{\n        gl_FragColor = color;\n}\n'), 0)
+  glCompileShader(8)
+  glCreateProgram() = 9
+  glAttachShader(9, 7)
+  glAttachShader(9, 8)
+  glLinkProgram(9)
+  glUseProgram(9)
+  glGetUniformLocation(9, color) = 0
+  glUniform4f(0, 0.0, 1.0, 0.0, 1.0)
+  glBegin(GL_QUADS)
+  glVertex2f(0.0, 0.0)
+  glVertex2f(64.0, 0.0)
+  glVertex2f(64.0, 64.0)
+  glVertex2f(0.0, 64.0)
+  glEnd()
+  glUseProgram(0)
+- glXSwapBuffers(37134976, 41943041)
+  glGenTextures(1, (1))
+  glBindTexture(GL_TEXTURE_2D, 1)
+  glTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, blob(3))
+  glEnable(GL_TEXTURE_2D)
+  glBegin(GL_QUADS)
+  glTexCoord2f(0.0, 0.0)
+  glVertex2f(0.0, 0.0)
+  glTexCoord2f(1.0, 0.0)
+  glVertex2f(64.0, 0.0)
+  glTexCoord2f(1.0, 1.0)
+  glVertex2f(64.0, 64.0)
+  glTexCoord2f(0.0, 1.0)
+  glVertex2f(0.0, 64.0)
+  glEnd()
+  glDisable(GL_TEXTURE_2D)
+- glXSwapBuffers(37134976, 41943041)
+  glClearColor(1.0, 0.0, 0.0, 1.0)
+  glClear((GL_COLOR_BUFFER_BIT))
+- glXSwapBuffers(37134976, 41943041)
+  glCreateShader(GL_VERTEX_SHADER) = 10
+  glShaderSource(10, 1, ('void main()\n{\n        gl_Position = ftransform();\n}\n'), 0)
+  glCompileShader(10)
+  glCreateShader(GL_FRAGMENT_SHADER) = 11
+  glShaderSource(11, 1, ('#version 120\nuniform vec4 color;\nvoid main()\n{\n        gl_FragColor = color;\n}\n'), 0)
+  glCompileShader(11)
+  glCreateProgram() = 12
+  glAttachShader(12, 10)
+  glAttachShader(12, 11)
+  glLinkProgram(12)
+  glUseProgram(12)
+  glGetUniformLocation(12, color) = 0
+  glUniform4f(0, 1.0, 0.0, 1.0, 1.0)
+  glBegin(GL_QUADS)
+  glVertex2f(0.0, 0.0)
+  glVertex2f(64.0, 0.0)
+  glVertex2f(64.0, 64.0)
+  glVertex2f(0.0, 64.0)
+  glEnd()
+  glUseProgram(0)
+- glXSwapBuffers(37134976, 41943041)
+  glGenTextures(1, (2))
+  glBindTexture(GL_TEXTURE_2D, 2)
+  glTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, blob(3))
+  glEnable(GL_TEXTURE_2D)
+  glBegin(GL_QUADS)
+  glTexCoord2f(0.0, 0.0)
+  glVertex2f(0.0, 0.0)
+  glTexCoord2f(1.0, 0.0)
+  glVertex2f(64.0, 0.0)
+  glTexCoord2f(1.0, 1.0)
+  glVertex2f(64.0, 64.0)
+  glTexCoord2f(0.0, 1.0)
+  glVertex2f(0.0, 64.0)
+  glEnd()
+  glDisable(GL_TEXTURE_2D)
+- glXSwapBuffers(37134976, 41943041)
+  glXDestroyContext(37134976, 37241648)
+"""
diff --git a/cli/cli-trim-spec-shaders.script b/cli/cli-trim-spec-shaders.script
new file mode 100644
index 0000000..e7d2e0e
--- /dev/null
+++ b/cli/cli-trim-spec-shaders.script
@@ -0,0 +1,97 @@
+# Trim trace to the final glxDestroyContext, eliminating almost everything
+
+apitrace trim --auto --trim-spec=shaders --calls=88 glxsimple.trace
+
+# Verify that we actually trimmed what we wanted to (just shader-generation calls)
+
+apitrace diff --diff=python glxsimple.trace glxsimple-trim.trace
+expect r"""  glXChooseVisual(37134976, 0, (GLX_RGBA, GLX_RED_SIZE, GLX_RED_SIZE, GLX_GREEN_SIZE, GLX_RED_SIZE, GLX_BLUE_SIZE, GLX_RED_SIZE, GLX_ALPHA_SIZE, GLX_RED_SIZE, GLX_DOUBLEBUFFER, GLX_DEPTH_SIZE, 24, GLX_STENCIL_SIZE, GLX_RED_SIZE, GLX_X_VISUAL_TYPE, GLX_DIRECT_COLOR, 0)) = ([37179128, 34, 0, 24, 5, 16711680, 65280, 255, 256, 8])
+  glXCreateContext(37134976, ([37179128, 34, 0, 24, 5, 16711680, 65280, 255, 256, 8]), 0, True) = 37241648
+  glXMakeCurrent(37134976, 41943041, 37241648) = True
+  glViewport(0, 0, 64, 64)
+  glMatrixMode(GL_PROJECTION)
+  glLoadIdentity()
+  glOrtho(0.0, 64.0, 64.0, 0.0, 0.0, 1.0)
+  glMatrixMode(GL_MODELVIEW)
+  glClearColor(0.0, 0.0, 1.0, 1.0)
+  glClear((GL_COLOR_BUFFER_BIT))
+  glXSwapBuffers(37134976, 41943041)
+- glCreateShader(GL_VERTEX_SHADER) = 7
+- glShaderSource(7, 1, ('void main()\n{\n        gl_Position = ftransform();\n}\n'), 0)
+- glCompileShader(7)
+- glCreateShader(GL_FRAGMENT_SHADER) = 8
+- glShaderSource(8, 1, ('#version 120\nuniform vec4 color;\nvoid main()\n{\n        gl_FragColor = color;\n}\n'), 0)
+- glCompileShader(8)
+- glCreateProgram() = 9
+- glAttachShader(9, 7)
+- glAttachShader(9, 8)
+- glLinkProgram(9)
+- glUseProgram(9)
+- glGetUniformLocation(9, color) = 0
+- glUniform4f(0, 0.0, 1.0, 0.0, 1.0)
+  glBegin(GL_QUADS)
+  glVertex2f(0.0, 0.0)
+  glVertex2f(64.0, 0.0)
+  glVertex2f(64.0, 64.0)
+  glVertex2f(0.0, 64.0)
+  glEnd()
+  glUseProgram(0)
+  glXSwapBuffers(37134976, 41943041)
+  glGenTextures(1, (1))
+  glBindTexture(GL_TEXTURE_2D, 1)
+  glTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, blob(3))
+  glEnable(GL_TEXTURE_2D)
+  glBegin(GL_QUADS)
+  glTexCoord2f(0.0, 0.0)
+  glVertex2f(0.0, 0.0)
+  glTexCoord2f(1.0, 0.0)
+  glVertex2f(64.0, 0.0)
+  glTexCoord2f(1.0, 1.0)
+  glVertex2f(64.0, 64.0)
+  glTexCoord2f(0.0, 1.0)
+  glVertex2f(0.0, 64.0)
+  glEnd()
+  glDisable(GL_TEXTURE_2D)
+  glXSwapBuffers(37134976, 41943041)
+  glClearColor(1.0, 0.0, 0.0, 1.0)
+  glClear((GL_COLOR_BUFFER_BIT))
+  glXSwapBuffers(37134976, 41943041)
+- glCreateShader(GL_VERTEX_SHADER) = 10
+- glShaderSource(10, 1, ('void main()\n{\n        gl_Position = ftransform();\n}\n'), 0)
+- glCompileShader(10)
+- glCreateShader(GL_FRAGMENT_SHADER) = 11
+- glShaderSource(11, 1, ('#version 120\nuniform vec4 color;\nvoid main()\n{\n        gl_FragColor = color;\n}\n'), 0)
+- glCompileShader(11)
+- glCreateProgram() = 12
+- glAttachShader(12, 10)
+- glAttachShader(12, 11)
+- glLinkProgram(12)
+- glUseProgram(12)
+- glGetUniformLocation(12, color) = 0
+- glUniform4f(0, 1.0, 0.0, 1.0, 1.0)
+  glBegin(GL_QUADS)
+  glVertex2f(0.0, 0.0)
+  glVertex2f(64.0, 0.0)
+  glVertex2f(64.0, 64.0)
+  glVertex2f(0.0, 64.0)
+  glEnd()
+  glUseProgram(0)
+  glXSwapBuffers(37134976, 41943041)
+  glGenTextures(1, (2))
+  glBindTexture(GL_TEXTURE_2D, 2)
+  glTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, blob(3))
+  glEnable(GL_TEXTURE_2D)
+  glBegin(GL_QUADS)
+  glTexCoord2f(0.0, 0.0)
+  glVertex2f(0.0, 0.0)
+  glTexCoord2f(1.0, 0.0)
+  glVertex2f(64.0, 0.0)
+  glTexCoord2f(1.0, 1.0)
+  glVertex2f(64.0, 64.0)
+  glTexCoord2f(0.0, 1.0)
+  glVertex2f(0.0, 64.0)
+  glEnd()
+  glDisable(GL_TEXTURE_2D)
+  glXSwapBuffers(37134976, 41943041)
+  glXDestroyContext(37134976, 37241648)
+"""
diff --git a/cli/cli-trim-spec-textures.script b/cli/cli-trim-spec-textures.script
new file mode 100644
index 0000000..1260837
--- /dev/null
+++ b/cli/cli-trim-spec-textures.script
@@ -0,0 +1,97 @@
+# Trim trace to the final glxDestroyContext, eliminating almost everything
+
+apitrace trim --auto --trim-spec=textures --calls=88 glxsimple.trace
+
+# Verify that we actually trimmed what we wanted to (just texture-generation calls)
+
+apitrace diff --diff=python glxsimple.trace glxsimple-trim.trace
+expect r"""  glXChooseVisual(37134976, 0, (GLX_RGBA, GLX_RED_SIZE, GLX_RED_SIZE, GLX_GREEN_SIZE, GLX_RED_SIZE, GLX_BLUE_SIZE, GLX_RED_SIZE, GLX_ALPHA_SIZE, GLX_RED_SIZE, GLX_DOUBLEBUFFER, GLX_DEPTH_SIZE, 24, GLX_STENCIL_SIZE, GLX_RED_SIZE, GLX_X_VISUAL_TYPE, GLX_DIRECT_COLOR, 0)) = ([37179128, 34, 0, 24, 5, 16711680, 65280, 255, 256, 8])
+  glXCreateContext(37134976, ([37179128, 34, 0, 24, 5, 16711680, 65280, 255, 256, 8]), 0, True) = 37241648
+  glXMakeCurrent(37134976, 41943041, 37241648) = True
+  glViewport(0, 0, 64, 64)
+  glMatrixMode(GL_PROJECTION)
+  glLoadIdentity()
+  glOrtho(0.0, 64.0, 64.0, 0.0, 0.0, 1.0)
+  glMatrixMode(GL_MODELVIEW)
+  glClearColor(0.0, 0.0, 1.0, 1.0)
+  glClear((GL_COLOR_BUFFER_BIT))
+  glXSwapBuffers(37134976, 41943041)
+  glCreateShader(GL_VERTEX_SHADER) = 7
+  glShaderSource(7, 1, ('void main()\n{\n        gl_Position = ftransform();\n}\n'), 0)
+  glCompileShader(7)
+  glCreateShader(GL_FRAGMENT_SHADER) = 8
+  glShaderSource(8, 1, ('#version 120\nuniform vec4 color;\nvoid main()\n{\n        gl_FragColor = color;\n}\n'), 0)
+  glCompileShader(8)
+  glCreateProgram() = 9
+  glAttachShader(9, 7)
+  glAttachShader(9, 8)
+  glLinkProgram(9)
+  glUseProgram(9)
+  glGetUniformLocation(9, color) = 0
+  glUniform4f(0, 0.0, 1.0, 0.0, 1.0)
+  glBegin(GL_QUADS)
+  glVertex2f(0.0, 0.0)
+  glVertex2f(64.0, 0.0)
+  glVertex2f(64.0, 64.0)
+  glVertex2f(0.0, 64.0)
+  glEnd()
+  glUseProgram(0)
+  glXSwapBuffers(37134976, 41943041)
+- glGenTextures(1, (1))
+  glBindTexture(GL_TEXTURE_2D, 1)
+- glTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, blob(3))
+  glEnable(GL_TEXTURE_2D)
+  glBegin(GL_QUADS)
+  glTexCoord2f(0.0, 0.0)
+  glVertex2f(0.0, 0.0)
+  glTexCoord2f(1.0, 0.0)
+  glVertex2f(64.0, 0.0)
+  glTexCoord2f(1.0, 1.0)
+  glVertex2f(64.0, 64.0)
+  glTexCoord2f(0.0, 1.0)
+  glVertex2f(0.0, 64.0)
+  glEnd()
+  glDisable(GL_TEXTURE_2D)
+  glXSwapBuffers(37134976, 41943041)
+  glClearColor(1.0, 0.0, 0.0, 1.0)
+  glClear((GL_COLOR_BUFFER_BIT))
+  glXSwapBuffers(37134976, 41943041)
+  glCreateShader(GL_VERTEX_SHADER) = 10
+  glShaderSource(10, 1, ('void main()\n{\n        gl_Position = ftransform();\n}\n'), 0)
+  glCompileShader(10)
+  glCreateShader(GL_FRAGMENT_SHADER) = 11
+  glShaderSource(11, 1, ('#version 120\nuniform vec4 color;\nvoid main()\n{\n        gl_FragColor = color;\n}\n'), 0)
+  glCompileShader(11)
+  glCreateProgram() = 12
+  glAttachShader(12, 10)
+  glAttachShader(12, 11)
+  glLinkProgram(12)
+  glUseProgram(12)
+  glGetUniformLocation(12, color) = 0
+  glUniform4f(0, 1.0, 0.0, 1.0, 1.0)
+  glBegin(GL_QUADS)
+  glVertex2f(0.0, 0.0)
+  glVertex2f(64.0, 0.0)
+  glVertex2f(64.0, 64.0)
+  glVertex2f(0.0, 64.0)
+  glEnd()
+  glUseProgram(0)
+  glXSwapBuffers(37134976, 41943041)
+- glGenTextures(1, (2))
+  glBindTexture(GL_TEXTURE_2D, 2)
+- glTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, blob(3))
+  glEnable(GL_TEXTURE_2D)
+  glBegin(GL_QUADS)
+  glTexCoord2f(0.0, 0.0)
+  glVertex2f(0.0, 0.0)
+  glTexCoord2f(1.0, 0.0)
+  glVertex2f(64.0, 0.0)
+  glTexCoord2f(1.0, 1.0)
+  glVertex2f(64.0, 64.0)
+  glTexCoord2f(0.0, 1.0)
+  glVertex2f(0.0, 64.0)
+  glEnd()
+  glDisable(GL_TEXTURE_2D)
+  glXSwapBuffers(37134976, 41943041)
+  glXDestroyContext(37134976, 37241648)
+"""
-- 
1.7.10.4



More information about the apitrace mailing list