[Piglit] [PATCH 00/13] Signal Handler and GLFW framework

Kenney Phillis kphillisjr at gmail.com
Thu Oct 31 15:47:56 CET 2013


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



More information about the Piglit mailing list