mutter/tests
Emmanuele Bassi 2f445682b1 cairo-texture: Use signal-based drawing
The current "create context/draw/destroy context" pattern presents
various problems. The first issue is that it defers memory management to
the caller of the create() or create_region() methods, which makes
bookkeeping of the cairo_t* harder for language bindings and third party
libraries. The second issue is that, while it's easier for
draw-and-forget texturs, this API is needlessly complicated for contents
that have to change programmatically - and it introduces constraints
like calling the drawing code explicitly after a surface resize (e.g.
inside an allocate() implementation).

By using a signal-based approach we can make the CairoTexture actor
behave like other actors, and like other libraries using Cairo as their
2D drawing API.

The semantics of the newly-introduced ::draw signal are the same as the
one used by GTK+:

  - the signal is emitted on invalidation;
  - the cairo_t* context is owned by the actor;
  - it is safe to have multiple callbacks attached to the same
    signal, to allow composition;
  - the cairo_t* is already clipped to the invalidated area, so
    that Cairo can discard geometry immediately before we upload
    the texture data.

There are possible future improvements, like coalescing multiple
invalidations inside regions, and performing clipped draws during
the paint cycle; we could even perform clipped redraws if we know the
extent of the invalidated area.
2011-07-26 12:40:52 +01:00
..
accessibility a11y: cally-text get_offset_at_point implementation 2011-07-06 17:05:49 +02:00
conform conform/cogl-materials: Fix a compiler warning 2011-07-25 11:09:20 +01:00
data script: Rename "state" → "states" 2011-06-13 13:47:08 +01:00
interactive cairo-texture: Use signal-based drawing 2011-07-26 12:40:52 +01:00
micro-bench tests: Check return value of clutter_init_with_args instead of error 2011-02-28 14:10:06 +00:00
performance tests: Add performance tracking framework 2011-07-04 17:27:48 +01:00
Makefile.am tests: Add performance tracking framework 2011-07-04 17:27:48 +01:00
README tests: Add performance tracking framework 2011-07-04 17:27:48 +01:00

Outline of test categories:

The conform/ tests should be non-interactive unit-tests that verify a single
feature is behaving as documented. See conform/ADDING_NEW_TESTS for more
details.

The performance/ tests are performance tests, both focused tests testing single
metrics and larger tests. These tests are used to report one or more
performance markers for the build of Clutter. Each performance marker is picked
up from the standard output of running the tests from strings having the form
"\n@ marker-name: 42.23" where 'marker-name' and '42.23' are the key/value pairs
of a single metric. Each test can provide multiple key/value pairs. Note that
if framerate is the feedback metric the test should forcibly enable FPS
debugging itself. The file test-common.h contains utility function helping to
do fps reporting.

The interactive/ tests are any tests whose status can not be determined without
a user looking at some visual output, or providing some manual input etc. This
covers most of the original Clutter tests. Ideally some of these tests will be
migrated into the conformance/ directory so they can be used in automated
nightly tests.

The accessibility/ tests are tests created to test the accessibility support of
clutter, testing some of the atk interfaces.

The data/ directory contains optional data (like images and ClutterScript
definitions) that can be referenced by a test.

Other notes:

• All tests should ideally include a detailed description in the source
explaining exactly what the test is for, how the test was designed to work,
and possibly a rationale for the approach taken for testing.

• When running tests under Valgrind, you should follow the instructions
available here:

        http://live.gnome.org/Valgrind

and also use the suppression file available inside the data/ directory.