Re: PATCH: GL: Create glyph mask surface only once per context, enlarge on demand

Martin Robinson <[email protected]>
Newsgroups gmane.comp.lib.cairo
Message-ID <[email protected]>
On 02/16/2013 02:12 AM, Chris Wilson wrote:
> Because I want to promote better drivers. Working around issues that can
> be easily fixed in the driver for the betterment of all, just leads to
> stagnation as nobody feels the impetus to do anything.

It's always good to have numbers in discussions like these. I wrote a
tiny HTML5 canvas micro test [1] that just renders text (with
overlapping glyphs which trigger the mask path) as fast as possible over
a period of 3 seconds. The test measures number of renders per second
and takes 10 samples. I repeated this test on two systems, one with
Intel hardware and one with an NVidia hardware [2]. I'm willing to
collect more data (AMD and perhaps a Mali device) if it's interesting.

(units are text paints per millisecond)

image-nvidia: 55.1969049523432 (stddev: 0.878697193173796)
image-intel: 64.1527714098772 (stddev: 0.234850204049565)
gl-nvidia (before patch) 0.233834194694391 (stddev: 0.002959739753409)
gl-nvidia (after patch): 17.2066024223006 (stddev: 0.424291496997496)
gl-intel (before patch): 13.9265171859729 (stddev: 0.175320467059827)
gl-intel (after patch): 17.1163946835002 (stddev: 0.157778076619366)

So while on Intel hardware it is nowhere near as dramatic as on NVidia,
there still seems to be some improvement.

Perhaps a more abstract framebuffer caching mechanism would be less
ugly? cairo-traces show a lot of calls to cairo_push_group and/or
cairo_create_similar (and then a quick destruction). This essentially
makes the GL backend of Cairo unsuitable for toolkit rendering, as the
overhead for creating and binding a new framebuffer runs the gamut from
slightly expensive to outlandish.

As an aside, no matter what, avoiding the mask path is always much, much
faster (~30 r/ms for Intel and ~40 r/ms for NVidia), so we should
probably be trying harder to avoid it. I don't think the pixels of Times
New Roman in this string actually overlap.

1.
https://github.com/mrobinson/cairo-perf-monitor/blob/master/canvas-micro-tests/overlapping-text.js

2. GPU/driver details:

model name	: Intel(R) Core(TM) i7-2620M CPU @ 2.70GHz
OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) Sandybridge Mobile
OpenGL version string: 3.0 Mesa 9.0
OpenGL shading language version string: 1.30

model name:     : AMD Phenom(tm) II X6 1090T Processor
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: GeForce GTS 250/PCIe/SSE2
OpenGL version string: 3.3.0 NVIDIA 310.14
OpenGL shading language version string: 3.30 NVIDIA via Cg compiler

Thanks!

--Martin

-- 
cairo mailing list
[email protected]
http://lists.cairographics.org/mailman/listinfo/cairo
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.