Carl Worth [Sat, 16 Feb 2013 01:15:53 +0000 (17:15 -0800)]
trim: Don't consider a SwapBuffers call has having no side effects
I can't justify why I ever added this code. I can only guess that I was
trying to get qapitrace to not show frame markers for frames that had
largely been trimmed.
Anyway, the code is wrong. SwapBuffers call obviously have significant
side effects. And the effect I was trying to achieve is already well
satisified by the change in 2f0d1a3244c8953a4468759ac466b80c4965d38f
that will trim a SwapBuffers call when --trim-spec=drawing is in
force.
Carl Worth [Sat, 16 Feb 2013 00:31:11 +0000 (16:31 -0800)]
trim --prune: Look at FLAG_NO_SIDE_EFFECTS rather than FLAG_VERBOSE
The --prune option is documented precisely to prune calls with no side
effects, so that's the flag it should examine.
Previously, the trim --prune code was keying off of the VERBOSE
flag. This hasn't made a substantial difference in the past, (the
NO_SIDE_EFFECTS calls have historically all been VERBOSE as well). But
NO_SIDE_EFFECTS has the advantage that it can objectively determined,
so the set of calls that should have this flag should be
unambiguous. (Meanwhile, whether any particular call should be
classified as VERBOSE is inherently subjective.)
Carl Worth [Thu, 21 Mar 2013 22:52:19 +0000 (15:52 -0700)]
glretrace: Flush outstanding requests when waiting for user input.
This helps make "apitrace replay -sb" work in cases where the driver
really only exposes double-buffered rendering, (so a flush is required
to make anything appear if the trace doesn't include a final
SwapBuffers).
Rob Clark [Mon, 11 Mar 2013 17:21:25 +0000 (13:21 -0400)]
gui: Link against pthread.
/usr/bin/ld: CMakeFiles/qapitrace.dir/apitracecall.cpp.o: undefined
reference to symbol '__pthread_key_create@@GLIBC_2.2.5'
/usr/bin/ld: note: '__pthread_key_create@@GLIBC_2.2.5' is defined in DSO
/lib64/libpthread.so.0 so try adding it to the linker command line
/lib64/libpthread.so.0: could not read symbols: Invalid operation
Carl Worth [Mon, 11 Feb 2013 21:49:02 +0000 (13:49 -0800)]
cli: Rename "apitrace retrace" to "apitrace replay".
After some debate on the mailing list, the consensus favors the name
"replay" for this operation. Update the documentation in
README.markdown to match.
Carl Worth [Tue, 28 Aug 2012 18:45:52 +0000 (11:45 -0700)]
replay: Support applications mixing glCreateProgramObjectARB and glUseProgram
As is known to happen with OpenGL, there are many more than one ways
to do the same thing. In this case, one can create a program
(glCreateProgram) or a program object (glCreateProgramObjectARB) along
with many similar pairs of functions.
In fact, a single application might even mix these two approaches,
(for example, calling glCreateProgramObjectARB and then calling
glUseProgram rather than glUseProgramObjectARB).
Historically, glretrace could fail with such mixed usage. The calls
into the ObjectARB function would go through _handleARB_map while the
other calls would go through _program_map, so after mixed calls the
desired object would not be found in the referenced map.
Making mixed usage work requires merging both _program_map and
_shader_map together with _handleARB map. This is correct for any
OpenGL implementation which supports the GL_ARB_shader_objects
extension, since there is no way to implement this extension correctly
without having shaders and programs in the same namespace.
However, we carefully maintain separate _shader_map and _program_map
for an OpenGL implementation not supporting GL_ARB_shader_objects. In
this case, it's not possible for an application to mix usage (since
none of the ObjectARB functions are guaranteed to exist). And it's
also possible for the implementation to provide separate namespaces
for shaders and programs, so they each need their own map.
Carl Worth [Fri, 16 Nov 2012 20:41:52 +0000 (12:41 -0800)]
trim: Trim swapbuffers calls when --trim-spec=drawing
Previously, the SwapBuffers calls were only getting trimmed if
--trim-spec included "no-side-effects". It was counter-intuitive that
a trim-spec of "drawing" alone would leave all the SwapBuffers calls
in place. So catch them under this trim-spec as well.
Carl Worth [Thu, 15 Nov 2012 04:55:31 +0000 (20:55 -0800)]
trim: Add a new --trim-spec option for fine-grained trimming
This has two benefits:
1. In cases where the dependency analysis goes wrong, using the --trim-spec
option can help identify which portion of the code is misbehaving, (and
allows the user to still get some trim benefit by avoiding the broken
code).
2. The implementation of this change breaks the analysis code up into several
more fine-grained functions, so it should be easier to review and maintain.
gui: Fix crash on trigger actions without loaded trace-file.
gui/apitrace: findFrameStart(), findFrameEnd(): Do nothing, when passed frame is null-pointer.
Add accelerator (F) to Edit->Find.
Add accelerator (N) and shortcut (Ctrl+N) to File->New.
Rename "File->New" to "File->New..." to indicate, that dialog will be showed.
Carl Worth [Thu, 15 Nov 2012 18:51:01 +0000 (10:51 -0800)]
glretrace: Use GL_TIMESTAMP (if available) for CPU profiling.
The prior scheme of trying to continuously re-synchronize separate CPU
and GPU counters is doomed to always be unreliable. Instead, simply prefer
to use the GL_TIMESTAMP values for both GPU and for CPU profiling.