Commit graph

6979 commits

Author SHA1 Message Date
Chris Wilson
eec5476484 [perf] s/git/anongit/
Third time lucky?
2009-06-03 08:57:15 +01:00
Chris Wilson
ce7e633942 [perf] Warn if no traces were found 2009-06-02 21:59:07 +01:00
Chris Wilson
f0366f0f32 [perf] Update to point to new toplevel cairo-traces repo 2009-06-02 21:48:26 +01:00
Chris Wilson
c9cd2f9ca1 [cairo] PLT symbols for cairo_set_source_rgb
Added a private use in user-font, but forgot to add a hidden symbol.
2009-06-02 18:47:07 +01:00
Chris Wilson
21550a7530 [user-font] Set the initial colour to white
An issue occured when using subpixel antialiasing with user-fonts and
XRender - the glyphs were transparent, as demonstrated by the font-view
example.

The problem lies in that enabling subpixel antialiasing triggers use of an
ARGB32 image surface for rendering the glyph, but the default colour is
black (so the only information is in the alpha-channel). Given an ARGB32
glyph XRender treats it as a per-channel mask, but since the R,G,B
channels were uniformly zero, the glyph is rendered as transparent.

Fix this by setting the initial colour to white before rendering the image
surface for a user-font glyph, which generates the appropiate gray-level
mask by default.
2009-06-02 18:16:52 +01:00
Chris Wilson
b5799e073e [xlib] Use bswap_32
Byteswap the ARGB32 glyphs using bswap_32 instead of open-coding.
2009-06-02 18:16:52 +01:00
Chris Wilson
56e9765f82 [util] Add font-view
A C variant of Behdad's python example font viewer.
2009-06-02 18:16:48 +01:00
Chris Wilson
d331dda480 [perf] Missing ')' in output 2009-06-02 15:41:19 +01:00
Adrian Johnson
c9ddaf8e7f PDF: Don't embed the same pattern more than once
The PDF surface now keeps track of all the patterns it is embedding in
a hash table keyed by the unique_id returned by the
_cairo_surface_get_unique_id().
2009-06-02 15:13:48 +01:00
Paolo Bonzini
f7613eeece Add more surface snapshots providers
This patch adds more implementation of the snapshot method.  For
surface types where acquire_source_image is already making a copy
of the bits, doing another one as is the case for the fallback
implementation is a waste.
2009-06-02 15:13:48 +01:00
Chris Wilson
cffb398f5a Add a generic cow-snapshotting framework
Provide a mechanism for backends to attach and remove snapshots. This can
be used by backends to provide a cache for _cairo_surface_clone_similar(),
or by the meta-surfaces to only emit a single pattern for each unique
snapshot.

In order to prevent stale data being returned upon a snapshot operation,
if the surface is modified (via the 5 high level operations, and on
notification of external modification) we break the association with any
current snapshot of the surface and thus preserve the current data for
their use.
2009-06-02 15:13:47 +01:00
Chris Wilson
7ed050fd43 [perf] Benchmark traces
Add a variant of cairo-perf that measures the time to replay traces.
2009-06-02 15:13:47 +01:00
Chris Wilson
403f780b29 [perf] Add a verbose flag for summary output with raw
Use 'cairo-perf -v -r' to have both the summary output along with the raw
values. This gives a progress report whilst benchmarking, very reassuring
with long running tests.
2009-06-02 15:13:47 +01:00
Chris Wilson
70fd2bbce3 [perf] Exclude similar testing by default
There are synchronisation issues with similar surfaces (as only the
original target surface is synced) which interferes with making
performance comparisons. (There still maybe some value should you be aware
of the limitations...)
2009-06-02 15:13:47 +01:00
Chris Wilson
bc49cb377c [perf] Benchmark mixing different masks and sources 2009-06-02 15:13:47 +01:00
Chris Wilson
4aca84ddb2 [perf] Add a pure glyphs performance metric
Use the new API Behdad exposed in 1.8 to precompute a glyph string using
Cairo and then benchmark cairo_show_glyphs(). This is then equivalent to
the text benchmark but without the extra step of converting to glyphs on
every call to cairo_show_text() i.e. it shows the underlying glyph
rendering performance.
2009-06-02 15:13:46 +01:00
Chris Wilson
55f4e0e4e8 [perf] Change seperators from '-' to '.'
This allows the perf tests to use '-' in the name which is easier to read
and differentiates with using '_' to separate source and operators.
2009-06-02 15:13:46 +01:00
Chris Wilson
b7c03d4e40 [ps] Trivial warning fix. 2009-06-02 15:13:46 +01:00
Chris Wilson
99482b17a5 [script] Improve caching of glyph advance
The glyph advance cache was only enabled for glyph indices < 256,
causing a large number of misses for non-ASCII text. Improve this by
simply applying the modulus of the index to select the cache slot - which
may cause some glyph advances to be overwritten and re-queried, but
improves the hit rate.
2009-06-02 15:13:46 +01:00
Chris Wilson
51193f1610 [pattern] Pass flags to _cairo_pattern_acquire_surface()
Allow the caller to choose whether or not various conversions take place.
The first flag is used to disable the expansion of reflected patterns into a
repeating surface.
2009-06-02 15:13:45 +01:00
Chris Wilson
4ec451a2fa [scaled-font] Cache repeated glyphs during probing device_extents
Maintain a local on-stack cache of recently queried glyphs to avoid
relatively expensive hash table queries.
2009-06-02 15:13:45 +01:00
Chris Wilson
ec22ae5b1d [scaled-font] Compare most recently used font directly
Avoid the relatively expensive _cairo_scaled_font_init_key() operation
when checking against the most recently used font.
2009-06-02 15:13:45 +01:00
Chris Wilson
16d128c15e [scaled-font] Lazily acquire the font_map_lock on font destruction.
We can defer taking the cairo_scaled_font_map_lock until we drop the
last reference to the scaled font so long as we double check the reference
count after waiting for the lock and not making assumptions about
unreferenced fonts during construction. This is significant as even
acquiring the uncontended cairo_scaled_font_map_lock during
cairo_scaled_font_destroy() was showing up as a couple of percent on text
heavy profiles (e.g. gnome-terminal).
2009-06-02 15:13:44 +01:00
Chris Wilson
dc083ab30a [cairo] Track the MRU scaled font
When observing applications two patterns emerge. The first is due to
Pango, which wraps each glyph run within a context save/restore. This
causes the scaled font to be evicted after every run and reloaded on the
next. This is caught by the MRU slot on the cairo_scaled_font_map and
prevents a relatively costly traversal of the hash table and holdovers.

The second pattern is by applications that directly manage the rendering
of their own glyphs. The prime example of this is gnome-terminal/vte. Here
the application frequently alternates between a few scaled fonts - which
requires a hash table retrieval every time.

By introducing a MRU slot on the gstate we are able to directly recover
the scaled font around 90% of the time.

Of 110,000 set-scaled-fonts:
  4,000 were setting the current font
 96,000 were setting to the previous font
  2,500 were recovered from the MRU on the cairo_scaled_font_map
  7,500 needed a hash retrieval
which compares to ~106,000 hash lookups without the additional MRU slot on
the gstate.

This translates to an elapsed time saving of ~5% when replaying a
gnome-terminal trace using the drm backend.
2009-06-02 15:13:44 +01:00
Chris Wilson
fda89c56ff Markup a few more functions as const/pure 2009-06-02 15:13:44 +01:00
Chris Wilson
e05097c604 [surface] Assign a unique id to the surface.
Allocate an ever-increasing, non-zero, unique identifier to each surface.
True for the first 4-billion...
2009-06-01 18:04:14 +01:00
Chris Wilson
45835f623f [cache] Expose init/fini methods so that caches can be embedded.
The structure is already exposed, so just expose the
constructors/destructors in order to enable caches to be embedded and
remove a superfluous malloc.
2009-06-01 18:04:14 +01:00
Chris Wilson
c3aac9cf49 [image] Eliminate trapezoid array allocation
By simply iterating over the array cairo_trapezoid_t, converting each one
separately to a pixman_trapezoid_t and rasterizing each one individually
we can avoid the common heap allocation. pixman performs exactly the same
iteration internally so there is no efficiency loss.
2009-06-01 18:04:13 +01:00
Chris Wilson
7b2bc44138 [surface-fallback] Tidy pattern handling.
Make the treatment of replacing the NULL source pattern with WHITE
consistent. As it is a solid pattern, we can skip _cairo_pattern_fini()
and so make the code more readable, and consistent along the error paths.
2009-06-01 18:04:13 +01:00
Chris Wilson
e83e113eae [surface] Speed up cairo_surface_get_mime_data().
The number of mime-types attached to a surface is usually small,
typically zero. Therefore it is quicker to do a strcmp() against
each key in the private mime-data array than it is to intern the
string (i.e. compute a hash, search the hash table, and do a final
strcmp).
2009-06-01 18:04:13 +01:00
Chris Wilson
247e76b923 [script] Speed up floating-point scanner
Hard-code frequent exponents to reduce number of calls to pow().
2009-06-01 18:04:13 +01:00
Chris Wilson
c5e85835b2 [debug] Relax ASSERT_NOT_REACHED
Need to actually handle random pixman image formats...
For the time being, ignore them.
2009-06-01 18:04:12 +01:00
Behdad Esfahbod
4232719af9 [ft] Fix vertical advance metrics of bitmap fonts (#21985) 2009-05-30 23:03:55 -04:00
Adrian Johnson
4314cae874 Fix typo in comment 2009-05-27 17:56:05 +09:30
Chris Wilson
7dbc2fe80a [script] Simplify _dictionary_name_equal
Just a simple return TRUE since all necessary checking is performed by
_csi_hash_table_lookup().
2009-05-25 22:14:57 +01:00
Chris Wilson
0b5e92e66b [script] Check hash value between comparing keys 2009-05-25 22:14:57 +01:00
Chris Wilson
a364f71194 [trace] Set output location using pwd
Record the current working directory and pass that along to cairo-trace so
that the trace output is local to the user and not the application. This
is vital if the application is called via a script that changes directory.
2009-05-25 22:14:56 +01:00
Chris Wilson
a76e09ea65 [trace] Missing newlines in error messages. 2009-05-25 22:14:56 +01:00
Chris Wilson
b7f199fde2 [pattern] Trim REPEAT source size when applicable.
Some backends are quite constrained with surface sizes and so trigger
fallbacks when asked to clone large images. To avoid this we attempt
to trim ROIs (as these are often limited to the destination image, and
so can be accommodated by the hardware). This patch allows trimming
REPEAT sources both horizontally and vertically independently.
2009-05-25 22:14:56 +01:00
Chris Wilson
e4efc80b8e [build] Make valgrind support user-configurable
As the number of places where we add valgrind client requests grows, it
becomes imperative that we should be able to disable them with a simple
configure time option.
2009-05-25 22:14:56 +01:00
Chris Wilson
d840deb57b [in-fill] Fix typo in on-vertex test.
Eeek! Comparing point->y against in_fill->x is a bad idea.
2009-05-25 22:14:56 +01:00
Chris Wilson
cfd484cd01 [test] Change test semantics to match new in-fill definition
The in-fill definition has changed to include queries on the edges and
vertices, so update the test case to match.
2009-05-25 22:14:41 +01:00
Chris Wilson
b71b019fe5 [in-fill] Treat on-edge queries as inside.
Jeff Muizelaar noted that the treatment of edges differed with firefox's
canvas definition, which considers a point on any edge as inside. The
current implementation has a similar definition to that of flash, for
which the top and right edges are outside. Arguably, firefox has the more
intuitive definition here...
2009-05-22 16:55:30 +01:00
Chris Wilson
efd0f0b292 [xlib] Handle too-large images gracefully.
Trigger a fallback to an image surface for massive patterns.
2009-05-22 16:41:58 +01:00
Chris Wilson
3c6838532a [surface] Early return if the backend cannot clone an image
If the backend cannot create a similar surface to hold the image, then
report back the failure before embarking upon an infinite recursion.
The UNSUPPORTED return should percolate up through the call stack and
trigger a fallback.
2009-05-22 16:41:57 +01:00
Chris Wilson
bf2c7356d4 [surface] Provide nil-surface for INVALID_SIZE
So that we can faithfully report back failure if the user tries to create
a surface larger than the backend can support.
2009-05-22 16:41:57 +01:00
Chris Wilson
6717f0d748 [win32] Wrap win32-font usage with CAIRO_HAS_WIN32_FONT
Bug 19251: --enable-win32=yes and --enable-win32-font=no causes
compilation failure
[https://bugs.freedesktop.org/show_bug.cgi?id=19251]

Wrap use of the win32 font backend within win32-printing-surface within
CAIRO_HAS_WIN32_FONT ifdefs to prevent compilation failure if the user
explicitly disables the win32 font backend.
2009-05-22 16:41:57 +01:00
Chris Wilson
c7d2b0de83 [win32] Typo
Correct function name in error string.
2009-05-22 16:41:57 +01:00
Adrian Johnson
6e87e354e4 Correct the comment for the index_to_ucs4 font backend function 2009-05-17 18:14:28 +09:30
Adrian Johnson
2a34992ccc Ensure win32 font index_to_ucs4() sets ucs4 to -1 if lookup fails 2009-05-17 18:12:39 +09:30