cairo snapshot 1.3.2 now available
Posted on: 11/16/2006 12:17 PM

A new cairo snapshot 1.3.2 is now available from:

which can be verified with:
2d380e89dc4d1c5be1460884e953b01f42fd5c1a cairo-1.3.2.tar.gz
(signed by Carl Worth)

Additionally, a git clone of the source tree:

git clone git://

will include a signed 1.3.2 tag which points to a commit named:

which can be verified with:
git verify-tag 1.3.2

and can be checked out with a command such as:
git checkout -b build 1.3.2

This snapshot is a chance to play with some of the recent performance
improvements that have been made to cairo (see below). But we're
really just getting started and there should be a lot more performance
improvements coming soon.

I hope that this snapshot is just the beginning of a steady stream of
ever-improving cairo snapshots. Ideally, we would see a new cairo
snapshot every week or two, and each faster than the one
before. Please help us make that happen!

We do have several performance problems identified and patches in
progress for several issues that still aren't in this snapshot, so
there's definitely some more exciting stuff to come, (more about that
in my follow ups to the cairo list). But please test this snapshot out
and let us know if it helps performance for your applications or not.

Have fun with cairo, everybody!


Snapshot 1.3.2 (2006-11-14 Carl Worth lt;cworth@cworth.orggt;)
This is the first development snapshot since the 1.2 stable series
branched off shortly after the 1.2.4 release in August 2006.

This snapshot includes all the bug fixes from the 1.2.6 release,
(since they originated here on the 1.3 branch first and were
cherry-picked over to 1.2). But more importantly, it contains some new
API in preparation for a future 1.4 release, and most importantly, it
contains several performance improvements.

The bug fixes will not be reviewed here, as most of them are already
described in the 1.2.6 release notes. But details for the new API and
some performance improvements are included here.

As with all snapshots, this is experimental code, and the new API
added here is still experimental and is not guaranteed to appear
unchanged in any future release of cairo.

API additions
Several new API additions are available in this release. There is a
common theme among all the additions in that they allow cairo to
advertise information about its state that it was refusing to
volunteer earlier. So this isn't groundbreaking new functionality, but
it is essential for easily achieving several tasks.

The new functions can be divided into three categories:

Getting information about the current clip region

Getting information about the current dash setting

Getting information from a pattern

In each of these areas, we have new API for providing a list of
uniform values from cairo. The closest thing we had to this before was
cairo_copy_path, (which is rather unique in providing a list of
non-uniform data).

The copy_clip_rectangles/rectangle_list_destroy functions follow a
style similar to that of cairo_copy_path. Meanwhile, the dash and
pattern color stop functions introduce a new style in which there is a
single call to return the number of elements available (get_dash_count
and get_color_stop_count) and then a function to be called once to get
each element (get_dash and get_color_stop_rgba).

I'm interested in hearing feedback from users of these new API
functions, particularly from people writing language bindings. One
open question is whether the clip "getter" functionality should adopt
a style similar to that of the new dash and color_stop interfaces.

API deprecation
The CAIRO_FORMAT_RGB16_565 enum value has been deprecated. It never
worked as a format value for cairo_image_surface_create, and it wasn't
necessary for supporting 16-bit 565 X server visuals.

XCB backend changes
The XCB backend has been updated to track the latest XCB API (which
recently had a 1.0 release).

New quartz backend
Vladimir Vukicevic has written a new "native quartz" backend which
will eventually replace the current "image-surface wrapping" quartz
backend. For now, both backends are available, (the old one is
"quartz" and the new one is "nquartz"). But it is anticipated that the
new backend will replace the old one and take on the "quartz" name
before this backend is marked as supported in a release of cairo.

New OS/2 backend
Doodle and Peter Weilbacher have contributed a new, experimental
backend for using cairo on OS/2 systems.

Performance improvements
Here are some highlights from cairo's performance suite showing
improvements from cairo 1.2.6 to cairo 1.3.2. The command used to
generate this data is:

./cairo-perf-diff 1.2.6 HEAD

available in the perf/ directory of a recent checkout of cairo's
source, (the cairo-perf-diff script does require a git checkout and
will not work from a tar file---though ./cairo-perf can still be used
to generate a single report there and ./cairo-perf-diff-files can be
used to compare two reports).

Results are described below both for an x86 laptop (with an old Radeon
video card, recent build, XAA, free software drivers), as well
as for a Nokia 770. First the x86 results with comments on each, (all
times are reported in milliseconds).

Copying subsets of an image surface to an xlib surface (much faster)
xlib-rgba subimage_copy-512 10.50 -gt; : 53.97x speedup

Thanks to Christopher (Monty) Montgomery for this big performance
improvement. Any application which has a large image surface and is
copying small pieces of it at a time to an xlib surface, (imagine an
application that loads a single image containing all the "sprites" for
that application), will benefit from this fix. The larger the ratio of
the image surface to the portion being copied, the larger the benefit.

Floating-point conversion (3x faster)
xlib-rgba pattern_create_radial-16 27.75 -gt; 3.93 : 2.94x speedup
image-rgb pattern_create_radial-16 26.06 -gt; 3.74 : 2.90x speedup

Thanks to Daniel Amelang, (and others who had contributed the idea
earlier), for this nice improvement in the speed of converting
floating-point values to fixed-point.

Text rendering (1.3 - 2x faster)
xlib-rgba text_image_rgba_source-256 319.73 -gt; 62.40 : 2.13x speedup
image-rgb text_solid_rgba_over-64 2.85 -gt; 0.88 : 1.35x speedup

I don't think we've ever set out to improve text performance
specifically, but we did it a bit anyway. I believe the extra
improvement in the xlib backend is due to Monty's image copying fix
above, and the rest is due to the floating-point conversion speedup.

Thin stroke improvements (1.5x faster)
image-rgb world_map-800 1641.09 -gt; 414.77 : 1.65x speedup
xlib-rgba world_map-800 1939.66 -gt; 529.94 : 1.52x speedup

The most modest stuff to announce in this release is the 50%
improvement I made in the world_map case. This is in improvement that
should help basically anything that is doing strokes with many
straight line segments, (and the thinner the better, since that makes
tessellation dominate rasterization). The fixes here are to use a
custom quadrilateral tessellator rather than the generic tessellator
for straight line segments and the miter joins.

Performance results from the Nokia 770
xlib-rgba subimage_copy-512 55.88 -gt; 2.04 : 27.34x speedup
xlib-rgb text_image_rgb_over-256 1487.58 -gt; 294.43 : 5.05x speedup
image-rgb pattern_create_radial-16 187.13 -gt; 91.86 : 2.04x speedup
xlib-rgba world_map-800 21261.41 -gt; 15628.02 : 1.36x speedup

Here we see that the subimage_copy improvement was only about half as
large as the corresponding improvement on my laptop, (27x faster
compared to 54x) and the floating-point conversion fix also was quite
as significant, (2x compared to 3x). Oddly the improvement to text
rendering performance was more than twice as good (5x compared to
2x). I don't know what the reason for that is, but I don't think it's
anything anybody should complain about.

Shortlog of changes since 1.2.4
Adrian Johnson (14):
Get correct unhinted outlines on win32.
Fix Type 1 embedding in PDF
Correct the value of /LastChar in the PDF Type 1 font dictionary.
Improve error checking in TrueType subsetting
Generate Type 1 fonts from glyph outlines
cairo-type1-fallback.c: return correct error status
Correct an unsigned to signed conversion problem in truetype subsetti
ng bbox
Type 1 fallback fonts - use binary encoding in PDF files
Type1 subsetting: Don't put .notdef in Encoding when there are 256 gl
PS: Add cairo version to PS header
PDF: Add cairo version to document info dictionary
type1 fallback: ensure all functions perform correct status checking
PS: Use xshow/yshow/xyshow for strings of glyphs
Add OpenType/CFF Subsetting

Alfred Peng (2):
Add Sun Pro C definition of pixman_private
Use pixman_private consistently as prefix not suffix

Behdad Esfahbod (47):
[] Remove unnecessary parantheses that were causing troubl
e with old bash
[ROADMAP] Add glyph cache inspection to 1.4 roadmap
[TODO] Add cairo_get_scaled_font
[ROADMAP] Remove 1.2.4 stuff out of the way
[test] bufferdiff: take abs of the pixel diffs. Oops!
[image] Print out cairo version in the unsupported-format message
Bug #7593: Avoid unsigned loop control variable to eliminate infinite
, memory-scribbling loop.
[xlib] Bug 7593: rewrite loop to be more readable, and fix warnings
[PNG] Mark status volatile to fix gcc warning
[test] Add 128 to any diff component such that differences are visible
[test] Use $(srcdir) to find valgrind supressions
[test] Use FcFreeTypeQuery
[configure] Invalidate cached warning flags if list of flags changes
[Makefile] Fix typo
[Makefile] Add perf to DIST_SUBDIRS
[perf/Makefile] Unset DIST_SUBDIRS
[test/Makefile] Unset DIST_SUBDIRS
Add scripts to sanity check the shared object for exported and PLT sy
[x86-64] match on JU?MP_SLO as on x86-64 "SLOT" is trun
cated Require automake version 1.9 here too
cairo_show_glphs: Mark glyphs argument as const.
[ROADMAP] Check RGB16_565 deprecated
[ROADMAP] Add polling API Add a test for cairo_public decorators in public h
cairo-pdf.h: Add missing cairo_public decorators
cairo-directfb.h: Add missing cairo_public decorators
cairo-nquartz.h: Add missing cairo_public decorators. Only allow _cairo_.*_test_.* symbols, not all _cairo.*
[configure] Print out whether SVG and PDF surfaces can be tested
[] Don't use '\\gt;' regexp syntax
[] Pass srcdir down to the tests
[slim] hide cairo_pattern_status() #8551
[slim] hide cairo_glitz_surface_create() (#8551)
[] Require pkg-config 0.19. (#8686)
[test] Make sure tests are not relinked unnecessarily
[perf] Remove SUBDIRS=../boilerplate and add explicit dependencies
Make extract required versions from
Require automake 1.7 again
[PDF] Set CTM before path construction
[] Make sed script portable
[] Minor fixes in release-publish output
[] Pass tag message to git-tag in release-publish
[configure] Err if a suitable pkg-config is not found
Fix typo.
Add notes for the 1.2.6 release.

Benjamin Otte (3):
boilerplate: Fix compilation for glitz.
perf: Add yield and fix double comparison
perf: Make cairo_perf_timer structure private. Make timer functions v

Carl Worth (166):
Increment version to 1.2.5 after making the 1.2.4 release
Add -Wextra (as well as -Wno-missing-field-initializers -Wno-unused-p
Put static first to avoid compiler warning.
Eliminate conditions checking for unsigned or enum values less than 0.
Split libcairotest files out from test/ and into boilerplate/
test: Add link to test log file in HTML output
Add boilerplate/README explaining its purpose
Separate the sharable stuff out of cairo-test.c into cairo-boilerplat
boilerplate: Remove custom read/write-png code in favor of using cair
o surfaces
Move test-specific stuff out of boilerplate/ and back into test/
test: Ignore single-bit errors for SVG backend.
perf: Add initial skeleton of performance monitoring suite
Require librsvg gt;= 2.14.0 to test SVG backend
boilerplate: Fix missing include of config.h which was preventing man
y backends from being tested
perf: Don't measure meta-surface-backed surface types.
Initial hookup of Vlad's timer/alarm code
perf: Remove unused util.c
perf: Collapse timing.[ch] down into cairo-perf.[ch]
perf: Don't require a separate counter from the timer for perf loops.
perf: More simplification of PERF_LOOP macros.
perf: Rename timer-alarm files to cairo-perf-timer
perf: More consistency improvements for names.
perf: Drop separate setup function from each test case.
Make perf interface return a rate. Start print target and test names.
perf: Fix typo in backend blackballing so that image tests now run
perf: Add indication of content to output
perf: Run for multiple iterations and print std. deviation
perf: Switch from alarm to setitimer for more fine-grained control of
Two big improvements to bring the std. deviation down to where we wan
t it.
perf: Add README file explaining how to add a new test
perf/README: Fix typo
bug 8104: Eliminate unused variables. Replicate assert statement to i
dentify branch of interest.
pixman: Add pixman_private decorations to hide pixman symbols from pu
blic interface
Add many missing slim_hidden calls to bypass PLT entries for local us
e of public functions
slim_hidden_proto: Move smeicolon from definition to use for consiste
ncy and legibility
RELEASING: Add note on checking for local symbol PLT entries.
Move target tolerance to cairo_test_target structure (should let sing
le-pixel SVG errors pass)
perf: Remove unused alarm functions
perf: Fold cairo-perf-timer.h into cairo-perf.h
perf: Rename functions in line with cairo's naming guidelines
perf: Report times not rates. Interface in integers not doubles.
perf: Move sorting and discarding outside of compute_stats. Adjust di
scard to slowest 15% only.
perf-paint: Spend more iterations on smaller sizes to balance testing.
perf/README: Update due to cairo_perf_timer API changes
Prefer CPU performance counters (if available) over gettimeofday.
perf: Fix cairo_perf_ticks_per_second to avoid wraparound
perf: Handle 32-bit wraparound of performance counter
perf: Allow CAIRO_TEST_TARGET to limit targets tested.
perf: Add tessellate test case (in -16, -64, and -256 varieties) Require automake version 1.9
test: Report details errors when image output files cannot be found.
Make _cairo_output_stream_destroy return the stream's status as a las
t gasp.
Use new return value from _cairo_output_stream_destroy
Check status value of output_stream object at time of destroy
Remove font-gt;status from cairo_type1_font_t
cairo_type1_font_create: Fix missing NO_MEMORY check and cleanup styl
cairo-type1-fallback.c: Regularize some whitespace.
Add _cairo_array_size to allow querying the allocated size
type1: Enforce pre-allocation usage and fail-proof behavior of charst
ring_encode functions
Fix bitmap-font test failure by not generating a type1 font for a bit
map font.
boilerplate: Rename cairo_test_target_t to cairo_boilerplate_target_t
Use unsigned consistently to avoid compiler warning.
test/bitmap-font: Fix arguments to FcFreeTypeQuery to avoid warnings.
boilerplate: Allow targets to distinguish between test and perf.
boilerplate-xlib: New perf-specific surface creation for xlib backend.
perf: Don't skip COLOR tests
perf: Make xlib testing wait for the X server to finish rendering.
Deprecated CAIRO_FORMAT_RGB16_565. Add cairo-deprecated.h .
Move the REPLACED/DEPRECATED_BY macros from cairo.h to cairo-deprecat
Fix typo in error message (enhacement -gt; enhancement)
Add missing pixman_private to _FbOnes when a function.
Add test case from bug #8379 demonstrating infinite loop during round
Add assert statement so the infinite-join test simply exits rather th
an looping infinitely.
ROADMAP: Add infinite-join bug (#8379) to the list for 1.4
ROADMAP: Add a couple of URLs for user-font API discussion
Fix cairo_copy_path and cairo_copy_path_flat to propagate errors.
Rename test from stale path-data name to copy-path
perf: Rework the suite to allow multiple performance tests to be defi
ned in one file.
Fix typo in documentation of cairo_in_fill (thanks to Jonathan Watt)
and clarify a bit.
tmpl: obnoxious churn
Use consistent wording to document cairo_in_fill, cairo_in_stroke, ca
iro_fill_extents, and cairo_stroke_extents.
Fix Makefile bug preventing 'make doc' from succeeding
Rename docs-publish target to doc-publish in order to be consistent w
ith the doc target.
Fix dependency of 'make doc' so that necessary header files are built
Add documentation for cairo_rectangle_list_destroy
Add missing 'Since: 1.4' tags to documentation of 'clip getter' funct
perf/paint: Make all sizes use a consistent number of iterations
perf: Move the per-size loop from cairo_perf_run to main
perf: Make cairo_t* available to perf functions
perf/paint: Dramatically simplify now that we don't need one callback
per run.
perf/paint: Use loops for sources and operators rather than open codi
perf/paint: Test image surface as well as similar surface sources
Fix cairo_image_surface_create to report INVALID_FORMAT errors.
Cast to squelch warning message
Add new _cairo_pattern_create_for_status so that patterns properly pr
opagate errors.
Rename the create_for_status pattern to create_in_error.
Remove unused variable
perf: Move iteration over sources and operators from paint to new cai
perf: Add stroke and fill tests
Shorten test names in output (drop unneeded _source and _surface)
perf: Add linear and radial gradients to the coverage
perf: Bail if cairo_status returns non-success at the end of a test.
Fix typo that was resulting in device glyph_extents of INT16_MAX in s
ome cases.
perf: Add text test
perf: Add subimage_copy test to demonstrate performance bug found by
perf: Do backend synchronization in cairo_perf_timer_start as well as
perf: Rename finalize to synchronize as it is used in both start() an
d stop() now
Fix typo of , instead of || which was causing a test to be ignored
perf: Make iterations adaptive (bailing as soon as std. deviation is
lt;= 3% for 5 consecutive iterations
Rename wait_for_rendering to syncrhonize
Bug #7497: Change _cairo_color_compute_shorts to not rely on any part
icular floating-point epsilon value.
perf: Change minimum size of paint test to 256
cairo-perf: Remove wasted whitespace in output. Squelch wanring.
perf: Print ticks as well as ms in output.
Add cairo-perf-diff program for comparing two cairo-perf reports.
test/infinite-join: Modify to draw something visible, and make the ou
tput a more reasonable size.
Fix infinite-join test case (bug #8379)
Merge branch '8379' into cairo
Add neglected reference images for infinite-join test
Use zero-size change bar for a speedup/slowdown of 1.0
test: Add clip-push-group to demonstrate crash in cairo_push_group
clip-push-group: Adjust test slightly to ensure mask-based clip is no
t anchored at the origin
Fix bug in _cairo_clip_init_deep_copy (fixes clip-push-group crash)
test: Update reference images due to previous change to _cairo_color_
8711: Fix transformed source surface patterns with xlib backend.
Fix repeating source surface patterns with xlib backend.
Add new paint-repeat test
test/paint-repeat: Use offset larger than source surface for better s
tress testing
Fix offset/extent bug in ps output for repeating source surface patte
Fix typo
Add new cairo-perf-diff for finding the performance difference betwee
n any 2 revisions.
Make xlib and xcb backends tolerant of single-bit errors in the test
suite output.
cairo-perf-diff: Simplify git usage and just run cairo-perf that gets
built with cairo revision
cairo-perf: Change outlier elimination and report minimum times.
Remove typo (mean vs median)
Increment CAIRO_VERSION to 1.3.1 now that a 1.2.6 release exists
cairo-perf-diff: Fix to still function if run from the top-level dire
ctory containing .git
cairo-perf-diff: Build and run latest cairo-perf program rather than
whatever was in the old checkout
Don't rely on NQUARTZ or OS2 surface types unless they exist.
cairo-perf-diff: Use two-part hash to avoid stale data when perf suit
e changes.
Add zrusin-another test cases (tessellate and fill).
cairo-perf: Add command line options for test cases to run, listing t
ests, and new raw mode.
test/ Fix typo in EXTRA_DIST that was breaking distcheck
Rewrite _cairo_matrix_transform_bounding_box to actually accept a box
not a rectangle
boilerplate: Add xrealloc function
perf: Move statistics code into new cairo-stats.h for sharing
cairo-perf: Print ticks_per_ms value in raw mode so raw analysis tool
s can report times
cairo-perf-diff-files: Add support for diffing "raw" files from "cair
o-perf -r"
perf/ Add missing zrusin-another.h file to list
perf: Add world-map performance test case.
Fix broken size calculation for xrealloc
cairo-perf-diff: Allow incremental refinement of performance results
cairo-perf-diff: Separate old and new build directories
cairo-perf-diff: Use rsync instead of cp to avoid some unnecessary re
cairo-perf-diff: rsync only git-managed files from boilerplate/perf
Add a status field to cairo_traps_t to enable less error checking
Rewrite tessellate_rectangle as tessellate_convex_quad to make it mor
e useful
Make _cairo_stroker_add_sub_edge use tessellate_convex_quad rather th
an tessellate_polygon
Make miter join code use tessellate_convex_quad rather than tessellat
cairo-perf-diff: Run git-ls-tree from the correct directory
Remove non-existent reference images from Makefile to avoid breaking
distcheck target
Fix get-clip test for surfaces not implementing set_clip_region
Add missing pattern-getters-ref.png to Makefile to avoid breaking dis
tcheck target
NEWS: Add notes for 1.3.2 snapshot
Update cairo version and libtool version for 1.3.2 snapshot

Christian Biesinger (11):
fix comment: pixman_private needs to be before the type of a variable
[win32] Add missing void
Fix win32 build when pthreads are available
Add missing ) in comment
Actually return a value from _cairo_type1_fallback_init_*
Fix prototype warning by including cairo-test-directfb.h
Don't return an uninitialized value if _cairo_output_stream_create fa
[beos] Fix build error
[win32] Add parentheses around operator
[beos] make tests compile again
[beos] Allow a pixel error of 1 for BeOS tests

Christopher (Monty) Montgomery (1):
Add extents to clone_similar (fixing subimage_copy performance bug)

Dan Amelang (3):
Add new perf test "pattern_create_radial"
Change _cairo_fixed_from_double to use the "magic number" technique

Ian Osgood (12):
Update XCB names for XCB 1.0 RC2 release.
Replace static fn with xcb-renderutil library fn.
XCB: Remove unnecessary differences with the Xlib surface.
Move XCB sections next to XLIB sections.
XCB: glyph rendering support
XCB: find_standard_format using wrong enumeration.
Merge branch 'master' of git+ssh://
XCB: implement subimage_copy fix
XCB: bring composite, trapezoids up-to-date with Xlib
XCB: make create_internal match Xlib
bug: wrong xcb_copy_area param order
don't squish tiny images in test/index.html

Jamey Sharp (9):
XCB: add slim_hidden_proto and slim_hidden_def for cairo_xcb_surface_
XCB: update cairo-boilerplate to test for an error connection rather
than NULL.
Update .gitignore in boilerplate and test.
[slim] hide cairo_version_string()
XCB: Add the have_clip_rects field to cairo_xcb_surface, to match the
Xlib surface.
XCB: Move slim_hidden_def to cairo-xcb-surface.c, not cairo-xcb-xrend
Add clip-push-group to .gitignore.
perf: cairo-perf-diff-files.c should generate cairo-perf-diff-files
XCB/perf: implement boilerplate_xcb_synchronize for fair performance

Jinghua Luo (7):
glitz: fix a crash in _cairo_glitz_surface_get_image.
glitz: fix for clone similar.
glitz: fix test case glyph-cache-pressure.
glitz: don't go fackback path for bitmap glyphs.
glitz: my previous changes in _cairo_glitz_surface_create_similar is
glitz: further fix for clone_similar.
glitz: fix a memory leak in _cairo_glitz_surface_composite_trapezoids.

Kristian H=C3=B8gsberg (1):
Compute right index when looking up left side bearing.

Michael Emmel (4):
Fixed directfb test code
Fixed test to compile
Fixed test to compile
Merge branch 'master' of ssh+git://

Nicholas Miell (2):
Make the SLIM macros robust in the face of macro-renamed symbols
Fix the AMD64 final link by removing SLIM from pixman

Peter Weilbacher (2):
OS/2 backend files
OS/2 build changes

Robert O'Callahan (4):
Fix _cairo_matrix_transform_bounding_box to return tightness info
Fix stroke/fill extents bounding boxes
Add clip getters API + tests
Remove redundant call to _cairo_surface_get_extents

Stuart Parmenter (1):
[win32] correct win32 show_glyphs for non-y-aligned text

Vladimir Vukicevic (24):
Add useful pieces from Vladimir's cairo-bench
[win32] Make cairo as a win32 static library possible
[win32] Misc win32 compilation fixes
[win32] win32-specific Makefiles for building with MSVC
Merge branch 'master' of git+ssh:// in
to cairo-master
Improve, add self-contained output format
[win32] Fix boilerplate for win32 surfaces to use new _with_dib funct
Merge branch 'master' of git+ssh:// in
to cairo-master
Correctly acquire/release mutex in _cairo_scaled_font_map_destroy
[win32] Makefile.win32: fix test and add html targets
[win32] Makefile.win32: use correct (/MD) runtime library flag everyw
[win32] Set win32 assertion failure handlers for tests to stderr
Check for valid path status value before calling _cairo_set_error
[win32] Support for DDBs, AlphaBlend fix
[nquartz] Initial commit of native quartz surface
[win32,perf] Fix cairo-perf-win32
[perf] Change perf output format, report times in ms, add a few paint
Add win32 output files to gitignore
dash and pattern getter functions
[nquartz] Return correct values from operation setup function
[test] Fix composite-integer-translate-over test
[win32] Update pixman MMX code to work with MSVC
[win32] clean up win32_surface_composite
[win32] implement EXTEND_REPEAT in composite when possible

Yevgen Muntyan (1):
Define WINVER if it's not defined. (bug 6456)

Printed from Linux Compatible (