I know this is a long patch and contains some features that have already been discussed earlier this year. However each feature serves an important task.
Feature 1: Signal Handler Signal handlers may not seem like a lot, but on some platforms they are a critical task to ensure piglit will function even remotely correctly. A primary example of this is the signal handler used for Windows. Without this running any remotely long series of tests would require interaction. This completely defeats the purpose of having automated testing since it would mean that all of the tests will not be ran automatically but instead the testing will grind to an halt. When an appropriate signal is detected, the Signal handler will on it's own will attempt to create a backtrace. This is useful since the output can easily be used by addr2line to find out where the crash happened in the source tree. Feature 2: Windows Signal Handler This is a signal handlered aimed for windows developers only. This feature will work on any system running Windows XP or up because of the fact that this also implements support for Vectored Exception Handling [1]. This signal handler will also generate backtraces on it's own using built in functionality that is included with windows. The features with this can safely be updated to a minimum of Windows Vista without any major changes. Feature 3: New framework - GLFW The GLFW[2] framework I implemented exposes OpenGL 3.x support on platforms where there is a lack of a c99 compliant compiler ( for example MSVC ) and should work the same as any other framework. The only limitation I can find with this is that the library only supports creating double buffered windows. I do not know if this is going to be a problem with tests that do not specify this flag. Note 1: This framework supports OpenGL ES, but I have not enabled nor verified that this works. Note 2: This framework supports internal GLFW builds by simply uncompressing the source file into the root piglit directory and renaming the folder glfw. This method should work automatically if the file glfw/CMakeLists.txt is found during the configuration phase. Feature 4: Use PythonInterp to detect python. This is an important change for some platforms ( like windows ) because many users may not have python added to the path variable NOTE: This feature required increasing the minimum cmake version to 2.8.6 because older versions did not properly honor the minimum version argument of find_package. This should make things easier overall because it is easy to change the python search to 3.x when the change is needed. Feature 5: Add a crash listing page to the html summary. I know this is not a large feature, but it should still be in place, since sometimes as a developer it's important to quickly determine what tests have crashed. TODO List: * Add OSX Signal handler - There is some serious overhead with using a posix compliant signal handler on OSX and it can lead to problems. This means that a mach compatible execution handler is a must. * Further test the Windows execution handler. I do not know if this automatic debug handler will suite windows developers well, but at least it is easily possible to identify exactly which line in the particular test is the source of the crash and to take this output and use it to possibly pinpoint where in the driver the actual crash happened. * Verify that the piglit run framework handles the new result output properly. I added a new report string ( crashed ) to assist with the signal handlers. [1] MSDN Magazine ( Sept 2001): Under the Hood: New Vectored Exception Handling in Windows XP http://msdn.microsoft.com/en-us/magazine/cc301714.aspx [2] GLFW - An OpenGL Library http://www.glfw.org/ Kenney Phillis (13): util: add PIGLIT_CRASH to the list of valid results. cmake: link OpenGL and OpenGL ES utility libs to piglitutil. util: Implement signal handler support. piglit-framework-gl: Add piglit signal handler. util: Implement signal handler on windows. cmake: make sure the hiz tests link against piglitutil. piglit-framework: Implement glfw support. piglit-framework: Add support for static glfw usage. tests/glx: Enable signal handler support. tests/egl: add support for signal handler. framework/summary.py: add crashed page. cmake: Relax waffle requirement. cmake: use PythonInterp package and update version. .gitignore | 3 + CMakeLists.txt | 127 ++++-- framework/summary.py | 9 +- tests/egl/egl-create-surface.c | 2 + tests/egl/egl-nok-swap-region.c | 2 + tests/egl/egl-nok-texture-from-pixmap.c | 2 + tests/egl/egl-query-surface.c | 2 + tests/fbo/CMakeLists.gl.txt | 4 +- tests/general/CMakeLists.gl.txt | 4 +- tests/glx/glx-close-display.c | 3 + tests/glx/glx-copy-sub-buffer.c | 2 + tests/glx/glx-destroycontext-1.c | 4 +- tests/glx/glx-destroycontext-2.c | 2 + tests/glx/glx-dont-care-mask.c | 2 + tests/glx/glx-fbconfig-compliance.c | 2 + tests/glx/glx-fbconfig-sanity.c | 2 + tests/glx/glx-fbo-binding.c | 2 + tests/glx/glx-make-current-bad-context.c | 2 + tests/glx/glx-make-current.c | 2 + tests/glx/glx-make-glxdrawable-current.c | 2 + tests/glx/glx-multi-context-ib-1.c | 2 + tests/glx/glx-multithread-makecurrent-1.c | 2 + tests/glx/glx-multithread-makecurrent-2.c | 2 + tests/glx/glx-multithread-makecurrent-3.c | 2 + tests/glx/glx-multithread-makecurrent-4.c | 2 + tests/glx/glx-multithread-shader-compile.c | 2 + tests/glx/glx-multithread-texture.c | 2 + tests/glx/glx-multithread.c | 2 + tests/glx/glx-pixmap-crosscheck.c | 2 + tests/glx/glx-pixmap-life.c | 2 + tests/glx/glx-pixmap-multi.c | 2 + tests/glx/glx-pixmap13-life.c | 2 + tests/glx/glx-query-drawable.c | 2 + tests/glx/glx-shader-sharing.c | 2 + tests/glx/glx-string-sanity.c | 2 + tests/glx/glx-swap-event.c | 4 +- tests/glx/glx-swap-exchange.c | 2 + tests/glx/glx-swap-pixmap-bad.c | 2 + tests/glx/glx-swap-pixmap.c | 2 + tests/glx/glx-swap-singlebuffer.c | 2 + tests/glx/glx-tfp.c | 2 + tests/glx/glx-visuals-depth.c | 2 + tests/glx/glx-visuals-stencil.c | 2 + tests/glx/glx-window-life.c | 2 + tests/hiz/CMakeLists.gl.txt | 1 + tests/util/CMakeLists.gl.txt | 6 + tests/util/CMakeLists.gles1.txt | 1 + tests/util/CMakeLists.gles2.txt | 1 + tests/util/CMakeLists.gles3.txt | 1 + tests/util/CMakeLists.no_api.txt | 4 + tests/util/CMakeLists.txt | 21 + tests/util/config.h.in | 5 + tests/util/piglit-framework-gl.h | 10 + .../util/piglit-framework-gl/piglit_gl_framework.c | 5 + .../piglit-framework-gl/piglit_glfw_framework.c | 407 ++++++++++++++++++++ .../piglit-framework-gl/piglit_glfw_framework.h | 29 ++ .../piglit-sighandler/piglit-sighandler-none.c | 37 ++ .../piglit-sighandler/piglit-sighandler-posix.c | 209 ++++++++++ .../piglit-sighandler/piglit-sighandler-win32.cpp | 339 ++++++++++++++++ tests/util/piglit-util.c | 5 + tests/util/piglit-util.h | 15 +- 61 files changed, 1282 insertions(+), 44 deletions(-) create mode 100644 tests/util/piglit-framework-gl/piglit_glfw_framework.c create mode 100644 tests/util/piglit-framework-gl/piglit_glfw_framework.h create mode 100644 tests/util/piglit-sighandler/piglit-sighandler-none.c create mode 100644 tests/util/piglit-sighandler/piglit-sighandler-posix.c create mode 100644 tests/util/piglit-sighandler/piglit-sighandler-win32.cpp -- 1.7.9.5 _______________________________________________ Piglit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/piglit
