Commit graph

8552 commits

Author SHA1 Message Date
Andrea Canciani
3cb882d01b test: make test font family a define
In order to make it easier to change the test font family, add it
as a define in the global header and always reference the macro in
the tests.
2010-06-12 16:30:56 +02:00
Chris Wilson
b1e4df928f test/coverage: Refine comments
Joonas didn't like me putting incorrect labels in my comments. Said they
were misleading and worse than useless. Harsh.
2010-06-12 15:28:28 +01:00
Chris Wilson
968374b633 test/coverage: Add a comment describing the column_triangle geometry() 2010-06-12 15:14:17 +01:00
Chris Wilson
299263f8c9 test: Disable tests that are too slow to run by default.
Introduce a slow mode [-s] to the runner, and add "slow" to the
requirements for the very long running tests like the coverage stress
tests.
2010-06-12 14:06:06 +01:00
Chris Wilson
53139261c7 test: Use exact matching on test names by default.
Specifying individual tests to run is more common than using a group
chosen from a keyword, so change the default matching mode and introduce
'-k' to select by keyword.
2010-06-12 14:06:06 +01:00
Chris Wilson
97288b0859 test: More minute geometry exercised by partial-coverage.
Moving beyond the capabilities of cairo...
2010-06-12 14:06:06 +01:00
Chris Wilson
4e3ef57bc8 test: More coverage coverage.
A couple of different shapes that aim to test the tessellation side of
the rasterisers more... And worryingly there does seem to be an
unexpected systematic error.
2010-06-12 13:30:24 +01:00
Chris Wilson
9b7cc7641b cairo: Create error objects for cairo_t
Perform an early check for error status and prevent creation of a full
object. This means that we do not pass down error objects to the
initialisation routines and so can survive without paranoia inside the
library. It also has brings consistency that like the other
constructors, no object is created in error and we can skip the
cairo_destroy() if we choose (and we don't waste one of the precious
zero-alloc context slots.

Fixes crash in test/a8-mask introduced by 1a544361e8.
2010-06-12 10:41:09 +01:00
Chris Wilson
9b6617a3b3 image: Apply component alpha to composite masks.
If we need to pattern requires component alpha, then we must take a
copy of the image and enable component alpha for pixman.

Fixes test/text-antialias-subpixel on xlib-fallback -- i.e. we will
finally render subpixel antialiased text on ancient XServers.
2010-06-11 22:04:14 +01:00
Chris Wilson
7440fc07f7 test: xlib ref image refresh 2010-06-11 21:29:38 +01:00
Chris Wilson
a049889c64 pattern: Remove incorrect optimisations from _cairo_pattern_aquire_surface()
Safe reduction of patterns is performed in gstate, so not only are the
extra checks in _cairo_pattern_acquire_surface redundant there are also
unsafe. Simply remove them.

Fixes test/radial-gradient-extend [xlib-fallback]
2010-06-11 21:26:26 +01:00
Chris Wilson
00bc1d1578 pattern: Remove extraordinary _cairo_pattern_fini_snapshot().
Miraculously the circular references from self-copy have disappeared and
the forced finish within _cairo_pattern_fini_snapshot() now quite
explosive. By replacing them with an ordinary _cairo_pattern_fini() the
crash from test/smask-image-mask disappear along and valgrind remains
happy.

Fixes test/smask-image-mask and similar.
2010-06-11 21:08:06 +01:00
Chris Wilson
1098e203dc test: pdf ref image refresh 2010-06-11 18:07:28 +01:00
Chris Wilson
1c91d019c5 test: ps ref image refresh.
Update to gs-8.71 and some additional reference images for the new tests.
2010-06-11 17:48:36 +01:00
Chris Wilson
1a544361e8 gstate: Update cached matrix state after device transform changes on the target
Commit 8d67186cb2 caches whether the device
transform is identity on context creation. However, the api is quite lax
and allows the user to modify the device transform *after* he has
started to use the surface in a context, as apparently WebKit does.
Since this is not the only instance where we may need to invalidate
caches if the user modifies state, introduce a simple mechanism for
hooking into notifications of property changes.

Fixes test/clip-device-offset.
2010-06-11 16:08:17 +01:00
Chris Wilson
f74b11415a test: Use a group to render PDF correctly using poppler.
In order to support blend modes, we need to use a clear background
whilst rendering the PDF, which inspired the use of DEST_OVER to avoid
having to render to an intermediate surface. However, the adjunct of
using subpixel text means that we cannot simply using the alpha channel
as the sole mask and so need to render to an intermediate and paint it
over an opaque background.
2010-06-11 14:12:23 +01:00
Chris Wilson
7f227ec8d3 Revert "test/pdf2png: Don't use DEST_OVER as poppler starts using subpixel text."
This reverts commit 506b2ebe71.

We have conflicting requirements here. In order to support extended
blend modes correctly we need to use DEST_OVER, at the expense of
supporting subpixel text. More thought required.
2010-06-11 12:54:15 +01:00
Chris Wilson
c761e0c5bb test: Restrict the coverage tests to raster targets.
Typo inside the requirements failed to prevent the tests running on the
vector backends.
2010-06-11 12:40:36 +01:00
Chris Wilson
b49c944fe4 test: Add a convenience script to disable the screensaver when testing
If the screensaver activates, it can cause failures when attempting to
render into an xlib window, so inhibit if we know how.
2010-06-11 12:38:17 +01:00
Chris Wilson
4e4724d48c gl: make check insists "cairoint.h" is first. 2010-06-11 12:19:56 +01:00
Chris Wilson
4edbcf1b1d color: Mark _cairo_color_get_content() as private. 2010-06-11 12:17:19 +01:00
Chris Wilson
506b2ebe71 test/pdf2png: Don't use DEST_OVER as poppler starts using subpixel text.
Using DEST_OVER in this form to paint the background white fails in the
presence of subpixel geometry (particular text), so remove the hack and
simply paint the background white prior to passing the surface to
poppler. KISS.
2010-06-11 12:07:21 +01:00
Chris Wilson
edb73b6dcf xlib: Adjust trapezoid precision based on antialias.
Render supports two modes of precision when rendering trapezoids.
Precise specifies points sampling on a 15x17 grid, ala pixman. Imprecise
allows the driver more freedom in the methods used, which may be more
amenable to acceleration. Choose to use the imprecise mode by default,
but still allow users to force the more rigidly specified precision by
changing the antialias mode.
2010-06-11 11:16:42 +01:00
Chris Wilson
290749bdb5 polygon: Reorder conditionals based on likelihood.
The vast majority of edges will be unclipped, so process those first.
2010-06-11 10:59:17 +01:00
Karl Tomlinson
55037bfb24 xlib: Find matching Visual for XRenderFormat
Not only is this useful for users to know which Visual matches any
particular Cairo surface, it should also close a few obscure bugs of not
converting images correctly on upload.

Fixes:

  Bug 28492 - cairo_xlib_surface_create_with_xrender_format does not
              create visual for resulting surface
  https://bugs.freedesktop.org/show_bug.cgi?id=28492

  Mozilla Bug 567065 - Try to create offscreen Xlib surface from existing
                       visual if possible
  https://bugzilla.mozilla.org/show_bug.cgi?id=567065

  Mozilla Bug 445250 - cairo_draw_with_xlib should provide a non-NULL visual
                       to callback
  https://bugzilla.mozilla.org/show_bug.cgi?id=445250

Reported-by: Oleg Romashin <romaxa@gmail.com>
2010-06-11 10:42:15 +01:00
Chris Wilson
cf426bce8e test: Add a simple coverage test.
This test case should be much clearer than half-coverage over what it
purports to actually test. In each pixel, it draws a single geometric
primitive that coverages a known percentage of the pixel and then we
measure how close the rasterisers are to that ideal.
2010-06-11 10:05:09 +01:00
Chris Wilson
bd3d9ef3d1 test: Distinguish tests that throw an error from a normal fail.
Hitting an error in a test case is almost as bad as crashing, and the
severity may be lost amidst "normal" failures. So introduce a new class
of ERROR so that we can immediately spot these during a test run, and
appropriately log them afterwards.
2010-06-11 09:14:16 +01:00
Chris Wilson
eeafeebd2e path: Exponentially grow buffer based on populated points and ops.
Instead of simply doubling the buffer size every time we overflow a point
or an op, enlarge the buffer to fit twice the number of used points and
ops.  We expect paths to be fairly consistent in the mix of operations,
and this allows the buffer size to tune itself to actual usage and reduce
wastage.
2010-06-11 09:06:20 +01:00
Chris Wilson
b0056a86b4 test: Exercise partial coverage some more.
Add some overlapping triangles (coarse enough for them to be resolved
using Cairo's 24.8 fixed point without loss of precision) to exercise
handling of overlapping subpixel geometry.
2010-06-10 18:30:26 +01:00
Andrea Canciani
836f616659 gl: support single stop gradients 2010-06-10 16:07:42 +02:00
Andrea Canciani
d17e2c5e23 ps: support single stop gradients 2010-06-10 16:07:42 +02:00
Andrea Canciani
eb7fc35115 pdf: support single stop gradients 2010-06-10 16:07:42 +02:00
Andrea Canciani
e2660a0eac pattern: improve single stop gradients handling
None-extended single stop gradients are now explicitly made clear.
2010-06-10 16:07:42 +02:00
Andrea Canciani
7a024bc206 test: exercise ps crash with single stop gradients
PS crashes only when using the source operator, as it will otherwise
fallback to rasterization of the gradients.
2010-06-10 16:07:42 +02:00
Andrea Canciani
a0f8cfe646 pattern: improve degenerate gradients handling
Degenerate radial gradients are now considered clear.
2010-06-10 16:07:42 +02:00
Andrea Canciani
bccd89b417 gstate: correct optimizations
Gradient were previously hand-optimized (without properly checking
for extend modes). By properly using _cairo_pattern functions we
avoid code duplication and bugs.

Fixes linear-gradient-extend, radial-gradient-extend.
2010-06-10 16:07:42 +02:00
Andrea Canciani
06c6207ad4 pattern: add gradient_is_solid function
It contains in a single place the logic needed to check if a gradient
pattern is solid (within a specified region).
2010-06-10 16:07:42 +02:00
Andrea Canciani
561625ee3b pattern: improve clear/opaque check functions
_cairo_pattern_is_opaque was missing some checks about the extend type.
Conversely _cairo_pattern_is_clear was being too strict about gradients.
2010-06-10 16:07:42 +02:00
Andrea Canciani
baaf312e04 pattern: remove content field from solid patterns
The content field in solid patterns had ill-defined semantic (or no
semantic at all), thus it can be removed.
2010-06-10 16:07:41 +02:00
Andrea Canciani
7461947eb1 surface: remove content argument from is_similar
The content argument was basically unuses.

Xlib change extracted from ickle's wip/compositor branch.
2010-06-10 16:07:41 +02:00
Chris Wilson
ef5f9b5c61 test: Update partial coverage.
Gah, no wonder the output looked wrong for the triangles, they only
covered half the pixel. So separate triangles into two cases.
2010-06-10 14:18:11 +01:00
Chris Wilson
8d67186cb2 gstate: Track whether the combination of ctm * device is identity.
In the fairly common condition that both the ctm and the device
transforms are identity, the function overhead of calling the matrix
multiplication on the point overwhelmingly dominates.
2010-06-10 13:13:12 +01:00
Chris Wilson
1349728d1e test: Add partial coverage.
Another experiment in measuring consistency of rasterisation stratagems
across the backends.
2010-06-10 13:13:12 +01:00
Chris Wilson
486118361a test: Fix half-coverage colouration.
Hmm, red over red makes the test pointless. The test still remains of
highly dubious quality, as it primarily serves as a rendercheck more
than a test of Cairo. The best hope for this test is that it inspires a
better one.

And incorporate the notes made by Joonas.
2010-06-10 12:05:41 +01:00
Dmitri Vorobiev
5cb764850f scaled-font: optimize cairo_scaled_font_text_to_glyphs()
This patch serves two purposes. First, it factors out the heavy part
of the cairo_scaled_font_text_to_glyphs() routine thus allowing GCC
to better optimize the cache cleanup loop. Keeping the look-up table
indices in a separate array speeds up array initialization even further.

Second, this patch introduces a shortcut for the case when the string
to be rendered consists of a single character. In this case, caching is
not necessary at all.

We have a benchmark that uses Cairo to render a large amount of random
strings of consisting of printable ASCII characters. Below are Oprofile
results collected while running this benchmark. It is easy to see that
the heavy part becomes noticeably lighter.

Before:

Profiling through timer interrupt
samples  %        app name                 symbol name
198755   13.5580  libcairo.so.2.10907.0    cairo_scaled_font_text_to_glyphs
88580     6.0424  libcairo.so.2.10907.0    _cairo_scaled_glyph_lookup
81127     5.5340  libcairo.so.2.10907.0    _cairo_hash_table_lookup
68186     4.6513  libcairo.so.2.10907.0    cairo_scaled_font_glyph_extents
47145     3.2160  libcairo.so.2.10907.0    _composite_glyphs_via_mask
46327     3.1602  libcairo.so.2.10907.0    _cairo_scaled_font_glyph_device_extents
44817     3.0572  libcairo.so.2.10907.0    _composite_glyphs
40431     2.7580  libcairo.so.2.10907.0    .plt

After (note that cairo_scaled_font_text_to_glyphs_internal_single() was inlined):

Profiling through timer interrupt
samples  %        app name                 symbol name
107264    7.6406  libcairo.so.2.10907.0    cairo_scaled_font_text_to_glyphs_internal_multiple
87888     6.2604  libcairo.so.2.10907.0    _cairo_scaled_glyph_lookup
79011     5.6281  libcairo.so.2.10907.0    _cairo_hash_table_lookup
71723     5.1090  libcairo.so.2.10907.0    cairo_scaled_font_glyph_extents
48084     3.4251  libcairo.so.2.10907.0    _composite_glyphs_via_mask
46636     3.3220  libcairo.so.2.10907.0    _cairo_scaled_font_glyph_device_extents
44740     3.1869  libcairo.so.2.10907.0    _composite_glyphs
42472     3.0254  libc-2.8.so              _int_malloc
39194     2.7919  libcairo.so.2.10907.0    _cairo_gstate_transform_glyphs_to_backend
38614     2.7506  libcairo.so.2.10907.0    .plt
37063     2.6401  libcairo.so.2.10907.0    _cairo_ft_ucs4_to_index
36856     2.6253  libc-2.8.so              random
36376     2.5911  libcairo.so.2.10907.0    _cairo_scaled_glyphs_equal
34545     2.4607  libcairo.so.2.10907.0    cairo_matrix_transform_point
31690     2.2573  libc-2.8.so              malloc
29395     2.0939  libcairo.so.2.10907.0    _cairo_matrix_is_identity
26142     1.8621  libcairo.so.2.10907.0    _cairo_utf8_to_ucs4
24406     1.7385  libc-2.8.so              free
24059     1.7138  libcairo.so.2.10907.0    cairo_scaled_font_text_to_glyphs

[ickle: slightly amended for stylistic consistency.]
2010-06-10 12:05:41 +01:00
Andrea Canciani
c43399fa68 gl: fix compilation on MacOS X
MacOS X uses different defines to avoid multiple inclusion of GL
header files. Adding them to glew.h fixes the compilation when GL is
enabled.
2010-06-09 17:53:09 +02:00
Chris Wilson
6eb5f859f1 bo: And disable DEBUG_TRAPS again.
Meh. I'm going back to bed. Thanks Joonas for catching this.
2010-06-09 10:40:32 +01:00
Chris Wilson
85af0ec374 test: Add half-coverage to exercise the rasteriser with subpixel geometry. 2010-06-09 10:34:06 +01:00
Chris Wilson
56c081bdc6 bo: Fix debugging for changes in internal traps api. 2010-06-09 10:33:01 +01:00
Benjamin Otte
a946d39555 gl: Add support for clip regions to the span renderer
Clip surface support is still missing, but i suppose that'd need a tiny
bit more code...
2010-06-08 22:23:12 +02:00