The performance tools build system for Win32 hasn't been maintained
for some time. The makefiles are now structured as in other
directories (Makefile.sources used by both Makefile.am and
Makefile.win32) and some additional code hides os-specific parts.
Restructure the Makefiles in .sources, .am and .win32 to enable
building cairo-script-interpreter on Win32.
Some minor changes are needed to compile on MSVC:
- include stdint.h to define INT_MAX-like macros
- redefine "inline"
- avoid deprecated functions (snprintf, replaced by _snprintf)
- define _USE_MATH_DEFINES so that math.h defines M_PI, M_SQRT2 and
M_LN2
cairo-perf-trace uses cairo-hash.c, which calls _cairo_error.
Instead of redefining it in cairo-perf-trace.c it can be abstracted in
a separate source which is directly included in the build of
cairo-perf-trace.
This avoids visibility issues when compiling cairo-perf-trace with a
statically linked cairo library on architectures which do not support
hidden visibility (example: win32).
The window description flag macros are prefixed with DWDESC_.
The issue was not noticed because DWDESC_CAPS and DSDESC_CAPS have the
same value.
Fixes https://bugs.freedesktop.org/show_bug.cgi?id=37049
Test targets now explicitly depend on the cairo library and build it
appropriately.
Phony targets depend on inform, so that they print a warning if the
environment is not set up appropriately.
All of the build depends on cairo-features.h. By having a target to
generate it that can be run from anywhere, it is possible to delegate
the dependency handling to 'make'.
The hashtable is guaranteed to only contain font faces which are
currently referenced, hence there is no need to remove any font face
when it is reset (just like for toy-font).
This makes the function simpler and fixes the assertion
Assertion failed: predicate != NULL, file cairo-hash.c, line 373
hit by multiple tests (the first one being "clear").
See https://bugs.freedesktop.org/show_bug.cgi?id=38049
If the hashtable cointains a font matching the font being created,
only reuse it if it is not in an error status. Otherwise, remove it
from teh hashtable and create a new one.
On Win32 INT_MIN/MAX macros are defined in stdint.h, which makes MSVC
complain about the following redefinitions:
...\stdint.h(73) : warning C4005: 'INT16_MIN' : macro redefinition
...\boilerplate\cairo-boilerplate.h(64) : see previous definition of 'INT16_MIN'
...\stdint.h(77) : warning C4005: 'INT16_MAX' : macro redefinition
...\cairo-boilerplate.h(67) : see previous definition of 'INT16_MAX'
...\stdint.h(80) : warning C4005: 'UINT16_MAX' : macro redefinition
...\boilerplate\cairo-boilerplate.h(70) : see previous definition of 'UINT16_MAX'
Since 03be41151d, it is safe to use
cairo_font_face_reference () to increment the reference count of a
font taken from the hashtable, because no mutex is being locked twice.
Since 92d7b1eee9 the flush vfunction
should return a cairo_status_t.
Silences the warning:
cairo-script-surface.c: At top level:
cairo-script-surface.c:3528:5: warning: initialization from
incompatible pointer type [enabled by default]
cairo-script-surface.c:3528:5: warning: (near initialization for
'_cairo_script_device_backend.flush') [enabled by default]
63bdae27a8 introduced a new public API
cairo_xlib_device_debug_set_precision(), exported by cairo-xlib.
cairo-xlib-xcb must implement it as well, because it must provide the
same public API.
Fixes the compilation of cairo-sphinx with --enable-tee
--enable-xlib-xcb --enable-script.
Reported-by: James Cloos <cloos@jhcloos.com>
45665c0d48 breaks the build of
cairo-xlib-xcb because it does not disable the compilation of
cairo-xlib implementation files when cairo-xlib-xcb is enable. This
results in collisions when linking.
Reported-by: James Cloos <cloos@jhcloos.com>
The assumption that no font face will hash to 0 is not correct.
Moreover, no special value is needed to mark fonts in error status, as
they can simply be detected upon lookup and destruction.
Silence the warning:
cairo-path-stroke.c: In function '_cairo_stroker_add_caps':
cairo-path-stroke.c:861:29: warning: comparison between
'cairo_line_cap_t' and 'enum _cairo_line_join' [-Wenum-compare]
CAIRO_LINE_JOIN_ROUND and CAIRO_LINE_CAP_ROUND have the same value,
hence this defect went unnoticed so far.
Winding of a box is toggled by swapping x1, x2 coordinates. So
we have to swap those coordinate rather than just copying.
Many routines assume that boxes are left-top to right-bottom
convention. So tessellator should produce such output boxes.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
On Win32, the POSIX-compatible unlink function is named "_unlink".
A function named "unlink" exists, but does not have the same behavior
as the POSIX-specified one. This function makes the cairo test suite
behave incorrectly and immediately terminate with the message:
Error: Cannot remove cairo-test-suite.log: No error
The Microsoft C Compiler does not accept empty-initialized arrays:
cairo-boilerplate-win32-printing.c(373) : error C2059: syntax error : '}'
cairo-boilerplate-win32-printing.c(374) : warning C4034: sizeof returns 0
51bd27afa1 removed
make-cairo-test-constructors.c but did not update the win32 Makefiles
accordingly.
cairo-test-constructors.c is now generated by a make target which runs
make-cairo-test-constructors.sh.
cairo-boilerplate-constructors.c is one of the sources required to
build the boilerplate.
This file is generated by a script, invoked by the appropriate make
target during the build.
make on win32 complains that:
make[1]: Entering directory `/home/ranma42/Code/fdo/cairo/src'
../src/Makefile.sources:220: *** missing separator. Stop.
Makefile.sources should not contain if's, which are aoutomake-only
conditionals. The correct way to conditionally include files is to
enable/disable them using C preprocessor macros.
We can't use an X11 surface in create_similar if the specified coordinates are
too small/large. However, we can still use SHM-backed memory for the image
surface which will be used instead.
Thanks to Chris Wilson for the hint.
Signed-off-by: Uli Schlachter <psychon@znc.in>
The PDF blend operators, as offered by cairo, where added in RENDER 0.11. This
commit makes the XCB backend use them, if they are available.
Signed-off-by: Uli Schlachter <psychon@znc.in>
This reverts commit f6e6891b59.
Returning NULL in these cases is actually the right thing to do, because the
caller expects and handles this case.
cairo_surface_create_similar() won't return NULL due to this, because
_cairo_surface_create_similar_solid() will fall back to an image surface.
I think I missed that part when I wrote the bad commit.
This was found via the test suite's "zero-mask" test.
Signed-off-by: Uli Schlachter <psychon@znc.in>
_pixel_to_solid() used to assert that it got a known cairo_format_t.
However, this might not be the case when backends decide to use a pixman
format that is not representable by a cairo format (X and DirectFB are
examples for backends that do that).
This patch makes _pixel_to_solid() return NULL in that case and fixes
the callers to deal with it.
https://bugs.freedesktop.org/show_bug.cgi?id=37916
We cannot assume that parameter 'out' is empty. So we should make it
empty before returning CAIRO_STATUS_SUCCESS when 'in' contains no boxes.
When 'in' contains a single box, we should copy 'in' to 'out' rather
than just returning CAIRO_STATUS_SUCCESS.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
A deficiency of cairo-perf-trace is that it currently always uses similar
surfaces for new surface which are kindly cleared by Cairo. This does
not accurately reflect the captured trace and introduces large bandwidth
overheads that distort the profiles.
So we introduce a new boilerplate hook so that the targets can create a
surface without incurring additional overheads.
[Fixes the broken partial commit of bf1b08d066e.]
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
As we write, use and then immediately discard the vertex buffers, our
usage pattern more closely matches DYNAMIC (as opposed to STREAM). This
improve performance by about 10% on intel.
firefox-talos-gfx(snb) 20.226 -> 18.402
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Benjamin just demonstrated this funky trick for generating pixel
outlines, and as no good deed should go unpunished, I've added his code
to the perf suite.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Introduce cairo_xlib_device_debug_set_precision() to override the
automatic selection of rendering precision and force the Xorg/DDX to
strictly adhere to the precise rendering mode of the Render
specification. This allows us to test drivers without worrying, too
much, about minor discrepancies in antialiasing.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>