SlideShare a Scribd company logo
A Detailed Look at Cairo's
OpenGL Spans Compositor
Performance

Bryce Harrington – Senior Open Source Developer
Samsung Research America (Silicon Valley)
b.harrington@samsung.com

Open Source Group – Silicon Valley

1

© 2013 SAMSUNG Electronics Co.
What is Cairo?

2D pen-based drawing model
For both display and print
Includes backends for acceleration
and for vector output formats

Open Source Group – Silicon Valley

2

© 2013 SAMSUNG Electronics Co.
http://www.tortall.net/mu/wiki/CairoTutorial
http://www.tortall.net/mu/wiki/CairoTutorial
Open Source Group – Silicon Valley

3

© 2013 SAMSUNG Electronics Co.
Where is Cairo Used on the Linux Desktop?

GTK+/Pango
GNOME, XFCE4
Gnuplot
Gnucash
Mozilla
Evince (xpdf)
Scribus
Inkscape
:
:
:

Open Source Group – Silicon Valley

$ apt-cache rdepends libcairo2 | |wc -l
$ apt-cache rdepends libcairo2 wc -l
712
712

4

© 2013 SAMSUNG Electronics Co.
Cairo Backends

Platform backends

image

xlib

xcb

cairo-gl

quartz

win32

beos

Format backends

ps

pdf

svg

Open Source Group – Silicon Valley

5

© 2013 SAMSUNG Electronics Co.
Cairo-gl on the Linux Desktop

Cairo-gl is not enabled for some distros (e.g. Ubuntu):

--enable-gl links cairo to libgl

NVIDIA's libgl gets linked to every client app

Enormous RAM increase per app running (300%)

See Launchpad #725434
Several GL backends supported

cairo-gl (OpenGL) - EGL, GLX, WGL

glesv2 (OpenGL ES 2.0) - EGL

glesv3 (OpenGL ES 3.0) - EGL

vg (OpenVG) - EGL, GLX

cogl - experimental

Open Source Group – Silicon Valley

6

© 2013 SAMSUNG Electronics Co.
Cairo-gl Compositors

Compositing combines visual elements into a single scene
The cairo-gl backend has multiple compositors:

MSAA

Spans

Mask

Traps
cairo-gl heuristically selects best compositor for operation.
Or:
   export CAIRO_GL_COMPOSITOR=spans

Open Source Group – Silicon Valley

7

© 2013 SAMSUNG Electronics Co.
Cairo-gl compositing fallbacks

MSAA - Multisample anti-aliasing


Composites OpenGL primitives directly to the GPU

Spans


Scanline compositing – rows of identical pixels inside regular polygonal shapes

Mask


Renders the mask using spans on CPU rather than geometry

Traps



Traps is the original Cairo 1.0 compositor, based on Xrender
Only used for glyph rendering fallback now

Image backend


Software rendering

Open Source Group – Silicon Valley

8

© 2013 SAMSUNG Electronics Co.
Spans Compositor

Identifies horizontal lengths that
will render as identical pixels.

Spans are drawn as GL_LINES
or as GL_QUADS where possible.

Open Source Group – Silicon Valley

9

© 2013 SAMSUNG Electronics Co.
Cairo Testing

Open Source Group – Silicon Valley

10

© 2013 SAMSUNG Electronics Co.
Cairo testing



Functional tests



Micro-benchmarks



Macro-benchmarks



Other (manually run) benchmarks

Open Source Group – Silicon Valley

11

© 2013 SAMSUNG Electronics Co.
Functional Tests

Open Source Group – Silicon Valley

12

© 2013 SAMSUNG Electronics Co.
Cairo functional test suite

$ export CAIRO_TESTS="gradient-alpha"
$ make test TARGETS=image,test-traps,test-mask,test-spans,gl

Open Source Group – Silicon Valley

13

© 2013 SAMSUNG Electronics Co.
Cairo functional test suite

Open Source Group – Silicon Valley

14

© 2013 SAMSUNG Electronics Co.
Micro Benchmarks

Open Source Group – Silicon Valley

15

© 2013 SAMSUNG Electronics Co.
Cairo micro benchmarks

$ make perf

crashes
crashes
$ sudo taskset -cp 0 $(pidof X)
$ taskset -cp 1 $$
$ export CAIRO_TEST_TARGET=image,test-traps,test-mask,testspans,gl
$ perf/cairo-perf-micro -i 1 wave

Open Source Group – Silicon Valley

16

© 2013 SAMSUNG Electronics Co.
Traps vs. Spans with Intel Driver

Open Source Group – Silicon Valley

17

© 2013 SAMSUNG Electronics Co.
Traps vs. Spans with Fglrx

Open Source Group – Silicon Valley

18

© 2013 SAMSUNG Electronics Co.
Spans Performance Regressions
Intel

Fglrx

Test Case

-49%

-49%

fill-annuli_image-rgb_source

-92%

-92%

fill-annuli_image-rgba-mag_over

-38%

-37%

fill-annuli_image-rgba-mag_source

-49%

-49%

fill-annuli_similar-rgb_source

-93%

-92%

fill-annuli_similar-rgba-mag_over

-38%

-37%

fill-annuli_similar-rgba-mag_source

-47%

-45%

fill_image-rgba-mag_over

-47%

-46%

fill_similar-rgba-mag_over

-31%

-31%

line-nhh

-45%

-45%

many-fills-horizontal

-43%

-43%

many-strokes-horizontal

-28%

-27%

mask-solid_image-rgba_source

-27%

-27%

mask-solid_similar-rgba_source

-32%

-32%

mask-solid_solid-rgb_source

-32%

-32%

mask-solid_solid-rgba_source

-28%

-28%

paint-with-alpha_image-rgba_source

-28%

-28%

paint-with-alpha_similar-rgba_source

-32%

-32%

paint-with-alpha_solid-rgb_source

-32%

-32%

paint-with-alpha_solid-rgba_source

-418%

-417%

spiral-diag-nonalign-nonzero-fill

-208%

-209%

spiral-diag-pixalign-nonzero-fill

-55%

-55%

stroke_image-rgba-mag_over

-55%

-56%

stroke_similar-rgba-mag_over

Open Source Group – Silicon Valley

19

© 2013 SAMSUNG Electronics Co.
Macro Benchmarks

Open Source Group – Silicon Valley

20

© 2013 SAMSUNG Electronics Co.
Analyzing performance using linux-perf

$ git clone git://anongit.freedesktop.org/cairo-traces
$ cairo-traces && make && cd ../cairo
$ export CAIRO_TRACE_DIR="../cairo-traces"
$ export CAIRO_TEST_TARGET_EXCLUDE=""
$ export CAIRO_TEST_TARGET="gl image xlib xcb"
$ export CAIRO_GL_COMPOSITOR="msaa"
$ benchmark=firefox-fishbowl
$ iterations=20
$ perf record -g -- ./perf/cairo-perf-trace -i ${iterations} ${benchmark}

Open Source Group – Silicon Valley

21

© 2013 SAMSUNG Electronics Co.
$ perf script | gprof2dot.py -f perf | dot -Tpng -o output.png

Open Source Group – Silicon Valley

22

© 2013 SAMSUNG Electronics Co.
Analyzing performance using linux-perf

$ perf report
+ 11.56% lt-cairo-perf-t libcairo.so.2.11200.15

[.] _cairo_tor_scan_converter_generate

+ 11.27% lt-cairo-perf-t libc-2.15.so

[.] 0x80f31

+ 9.32% lt-cairo-perf-t libcairo.so.2.11200.15

[.] _cairo_gl_composite_emit_solid_span

+ 6.78% lt-cairo-perf-t libcairo.so.2.11200.15

[.] cell_list_render_edge

+ 5.68% lt-cairo-perf-t libcairo-script-interpreter.so.2.11200.15

[.] _csi_hash_table_lookup

+ 5.06% lt-cairo-perf-t libcairo-script-interpreter.so.2.11200.15

[.] _scan_file.5939

+ 3.60% lt-cairo-perf-t libcairo.so.2.11200.15

[.] _cairo_gl_bounded_spans

+ 3.24% lt-cairo-perf-t [kernel.kallsyms]

[k] 0xffffffff8103e0aa

+ 2.35% lt-cairo-perf-t libcairo-script-interpreter.so.2.11200.15

[.] _csi_parse_number

+ 2.25% lt-cairo-perf-t libcairo-script-interpreter.so.2.11200.15

[.] csi_file_getc

+ 1.32% lt-cairo-perf-t libcairo.so.2.11200.15

[.] _cairo_gl_composite_prepare_buffer

Open Source Group – Silicon Valley

23

© 2013 SAMSUNG Electronics Co.
Optimizing VBO size to improve performance
Vertex Buffer Objects (VBOs) store vertex data (position, vector,
color, etc.) in video device memory for rendering






Small VBO means
more flushes
Large VBO can
cause trouble for
embedded
devices
Currently is 16k

WIP: http://cgit.freedesktop.org/~bryce/cairo/?h=vbo-size
Open Source Group – Silicon Valley

24

© 2013 SAMSUNG Electronics Co.
Analysis of other benchmarks - intel
swfdec-giant-steps

firefox-canvas

18.26%

_cairo_tor_scan_converter_generate

11.49%

_cairo_tor_scan_converter_generate

 4.35%

cell_list_render_edge

 3.50%

_cairo_bentley_ottmann_tessellate_polygon

 3.70%

_fill_xrgb32_lerp_opaque_spans

 1.86%

cell_list_render_edge

 2.41%

_cairo_bentley_ottmann_tessellate_polygon

 1.75%

_cairo_polygon_intersect

ocitysmap

firefox-scrolling

 8.69%

_cairo_tor_scan_converter_generate

 1.85%

_cairo_hash_table_lookup

 2.86%

_cairo_bentley_ottmann_tessellate_polygon

 1.11%

_cairo_scaled_font_glyph_device_extents

 2.79%

_fill_xrgb32_lerp_opaque_spans

 0.78%

_cairo_tor_scan_converter_add_polygon

 0.67%

cell_list_render_edge

evolution

firefox-talos-svg

 1.06%

_fill_xrgb32_lerp_opaque_spans

 5.88%

_cairo_tor_scan_converter_generate

 0.97%

_cairo_tor_scan_converter_generate

 2.94%

_cairo_bentley_ottmann_tessellate_polygon

 0.88%

_cairo_hash_table_lookup

 0.71%

_cairo_scaled_font_glyph_device_extents

Open Source Group – Silicon Valley

25

© 2013 SAMSUNG Electronics Co.
Analysis of other benchmarks - fglrx
swfdec-giant-steps

firefox-canvas

13.25%

_cairo_tor_scan_converter_generate

10.45%

_cairo_tor_scan_converter_generate

 3.14%

cell_list_render_edge

 3.57%

_cairo_bentley_ottmann_tessellate_polygon

 2.76%

_fill_xrgb32_lerp_opaque_spans

 1.73%

cell_list_render_edge

 1.89%

_cairo_bentley_ottmann_tessellate_polygon

 1.63%

_cairo_polygon_intersect

ocitysmap

firefox-scrolling

 8.23%

_cairo_tor_scan_converter_generate

 0.82%

_cairo_hash_table_lookup

 2.78%

_cairo_bentley_ottmann_tessellate_polygon

 0.52%

_cairo_scaled_font_glyph_device_extents

 1.88%

_fill_xrgb32_lerp_opaque_spans

 0.81%

_cairo_tor_scan_converter_add_polygon

 0.79%

cell_list_render_edge

evolution

firefox-talos-svg

 0.70%

_cairo_tor_scan_converter_generate

 5.59%

_cairo_tor_scan_converter_generate

 0.65%

_cairo_hash_table_lookup

 2.82%

_cairo_bentley_ottmann_tessellate_polygon

 0.50%

_cairo_scaled_font_glyph_device_extents

Open Source Group – Silicon Valley

26

© 2013 SAMSUNG Electronics Co.
Generating new traces

To record a trace:
$ cairo-trace --profile inkscape <args>
Generates an inkscape.1234.trace file.
Please document exact steps to re-generate the trace, for future reference!

Open Source Group – Silicon Valley

27

© 2013 SAMSUNG Electronics Co.
Thank you.
Bryce Harrington – Senior Open Source Developer
Samsung Research America (Silicon Valley)
B.Harrington@Samsung.com

Open Source Group – Silicon Valley

28

© 2013 SAMSUNG Electronics Co.
Further Reading

http://cworth.org/tag/cairo/
http://www.mattfischer.com/blog/?p=375
http://ssvb.github.io/2012/05/04/xorg-drivers-and-software-rendering.html
http://mgdm.net/talks/dpc10/cairo.pdf

Open Source Group – Silicon Valley

29

© 2013 SAMSUNG Electronics Co.

More Related Content

What's hot

What's ahead for film and animation with Unity 2020 - Unite Copenhagen 2019
What's ahead for film and animation with Unity 2020 - Unite Copenhagen 2019What's ahead for film and animation with Unity 2020 - Unite Copenhagen 2019
What's ahead for film and animation with Unity 2020 - Unite Copenhagen 2019
Unity Technologies
 
How to Improve Visual Rendering Quality in VR - Unite Copenhagen 2019
How to Improve Visual Rendering Quality in VR - Unite Copenhagen 2019How to Improve Visual Rendering Quality in VR - Unite Copenhagen 2019
How to Improve Visual Rendering Quality in VR - Unite Copenhagen 2019
Unity Technologies
 
OpenGL ES Presentation
OpenGL ES PresentationOpenGL ES Presentation
OpenGL ES Presentation
Eric Cheng
 
OpenXR – State of the Union - Khronos GDC 2019
OpenXR – State of the Union - Khronos GDC 2019OpenXR – State of the Union - Khronos GDC 2019
OpenXR – State of the Union - Khronos GDC 2019
Intel® Software
 
vkFX: Effect(ive) approach for Vulkan API
vkFX: Effect(ive) approach for Vulkan APIvkFX: Effect(ive) approach for Vulkan API
vkFX: Effect(ive) approach for Vulkan API
Tristan Lorach
 
Graphics programming in open gl
Graphics programming in open glGraphics programming in open gl
Graphics programming in open gl
Arvind Devaraj
 
CS 354 Introduction
CS 354 IntroductionCS 354 Introduction
CS 354 Introduction
Mark Kilgard
 
NvFX GTC 2013
NvFX GTC 2013NvFX GTC 2013
NvFX GTC 2013
Tristan Lorach
 
CS 354 Viewing Stuff
CS 354 Viewing StuffCS 354 Viewing Stuff
CS 354 Viewing Stuff
Mark Kilgard
 
Foveated Ray Tracing for VR on Multiple GPUs
Foveated Ray Tracing for VR on Multiple GPUsFoveated Ray Tracing for VR on Multiple GPUs
Foveated Ray Tracing for VR on Multiple GPUs
Takahiro Harada
 
NVIDIA Graphics, Cg, and Transparency
NVIDIA Graphics, Cg, and TransparencyNVIDIA Graphics, Cg, and Transparency
NVIDIA Graphics, Cg, and Transparency
Mark Kilgard
 
Migrating from OpenGL to Vulkan
Migrating from OpenGL to VulkanMigrating from OpenGL to Vulkan
Migrating from OpenGL to Vulkan
Mark Kilgard
 
PG-4034, Using OpenGL and DirectX for Heterogeneous Compute, by Karl Hillesland
PG-4034, Using OpenGL and DirectX for Heterogeneous Compute, by Karl HilleslandPG-4034, Using OpenGL and DirectX for Heterogeneous Compute, by Karl Hillesland
PG-4034, Using OpenGL and DirectX for Heterogeneous Compute, by Karl Hillesland
AMD Developer Central
 
GPU accelerated path rendering fastforward
GPU accelerated path rendering fastforwardGPU accelerated path rendering fastforward
GPU accelerated path rendering fastforward
Mark Kilgard
 
OpenGL Shading Language
OpenGL Shading LanguageOpenGL Shading Language
OpenGL Shading Language
Jungsoo Nam
 
Quartz 2D with Swift 3
Quartz 2D with Swift 3Quartz 2D with Swift 3
Quartz 2D with Swift 3
Bob McCune
 
SIGGRAPH Asia 2012 Exhibitor Talk: OpenGL 4.3 and Beyond
SIGGRAPH Asia 2012 Exhibitor Talk: OpenGL 4.3 and BeyondSIGGRAPH Asia 2012 Exhibitor Talk: OpenGL 4.3 and Beyond
SIGGRAPH Asia 2012 Exhibitor Talk: OpenGL 4.3 and Beyond
Mark Kilgard
 
“Introduction to the TVM Open Source Deep Learning Compiler Stack,” a Present...
“Introduction to the TVM Open Source Deep Learning Compiler Stack,” a Present...“Introduction to the TVM Open Source Deep Learning Compiler Stack,” a Present...
“Introduction to the TVM Open Source Deep Learning Compiler Stack,” a Present...
Edge AI and Vision Alliance
 
SIGGRAPH 2012: GPU-Accelerated 2D and Web Rendering
SIGGRAPH 2012: GPU-Accelerated 2D and Web RenderingSIGGRAPH 2012: GPU-Accelerated 2D and Web Rendering
SIGGRAPH 2012: GPU-Accelerated 2D and Web Rendering
Mark Kilgard
 
5 Major Challenges in Interactive Rendering
5 Major Challenges in Interactive Rendering5 Major Challenges in Interactive Rendering
5 Major Challenges in Interactive Rendering
Electronic Arts / DICE
 

What's hot (20)

What's ahead for film and animation with Unity 2020 - Unite Copenhagen 2019
What's ahead for film and animation with Unity 2020 - Unite Copenhagen 2019What's ahead for film and animation with Unity 2020 - Unite Copenhagen 2019
What's ahead for film and animation with Unity 2020 - Unite Copenhagen 2019
 
How to Improve Visual Rendering Quality in VR - Unite Copenhagen 2019
How to Improve Visual Rendering Quality in VR - Unite Copenhagen 2019How to Improve Visual Rendering Quality in VR - Unite Copenhagen 2019
How to Improve Visual Rendering Quality in VR - Unite Copenhagen 2019
 
OpenGL ES Presentation
OpenGL ES PresentationOpenGL ES Presentation
OpenGL ES Presentation
 
OpenXR – State of the Union - Khronos GDC 2019
OpenXR – State of the Union - Khronos GDC 2019OpenXR – State of the Union - Khronos GDC 2019
OpenXR – State of the Union - Khronos GDC 2019
 
vkFX: Effect(ive) approach for Vulkan API
vkFX: Effect(ive) approach for Vulkan APIvkFX: Effect(ive) approach for Vulkan API
vkFX: Effect(ive) approach for Vulkan API
 
Graphics programming in open gl
Graphics programming in open glGraphics programming in open gl
Graphics programming in open gl
 
CS 354 Introduction
CS 354 IntroductionCS 354 Introduction
CS 354 Introduction
 
NvFX GTC 2013
NvFX GTC 2013NvFX GTC 2013
NvFX GTC 2013
 
CS 354 Viewing Stuff
CS 354 Viewing StuffCS 354 Viewing Stuff
CS 354 Viewing Stuff
 
Foveated Ray Tracing for VR on Multiple GPUs
Foveated Ray Tracing for VR on Multiple GPUsFoveated Ray Tracing for VR on Multiple GPUs
Foveated Ray Tracing for VR on Multiple GPUs
 
NVIDIA Graphics, Cg, and Transparency
NVIDIA Graphics, Cg, and TransparencyNVIDIA Graphics, Cg, and Transparency
NVIDIA Graphics, Cg, and Transparency
 
Migrating from OpenGL to Vulkan
Migrating from OpenGL to VulkanMigrating from OpenGL to Vulkan
Migrating from OpenGL to Vulkan
 
PG-4034, Using OpenGL and DirectX for Heterogeneous Compute, by Karl Hillesland
PG-4034, Using OpenGL and DirectX for Heterogeneous Compute, by Karl HilleslandPG-4034, Using OpenGL and DirectX for Heterogeneous Compute, by Karl Hillesland
PG-4034, Using OpenGL and DirectX for Heterogeneous Compute, by Karl Hillesland
 
GPU accelerated path rendering fastforward
GPU accelerated path rendering fastforwardGPU accelerated path rendering fastforward
GPU accelerated path rendering fastforward
 
OpenGL Shading Language
OpenGL Shading LanguageOpenGL Shading Language
OpenGL Shading Language
 
Quartz 2D with Swift 3
Quartz 2D with Swift 3Quartz 2D with Swift 3
Quartz 2D with Swift 3
 
SIGGRAPH Asia 2012 Exhibitor Talk: OpenGL 4.3 and Beyond
SIGGRAPH Asia 2012 Exhibitor Talk: OpenGL 4.3 and BeyondSIGGRAPH Asia 2012 Exhibitor Talk: OpenGL 4.3 and Beyond
SIGGRAPH Asia 2012 Exhibitor Talk: OpenGL 4.3 and Beyond
 
“Introduction to the TVM Open Source Deep Learning Compiler Stack,” a Present...
“Introduction to the TVM Open Source Deep Learning Compiler Stack,” a Present...“Introduction to the TVM Open Source Deep Learning Compiler Stack,” a Present...
“Introduction to the TVM Open Source Deep Learning Compiler Stack,” a Present...
 
SIGGRAPH 2012: GPU-Accelerated 2D and Web Rendering
SIGGRAPH 2012: GPU-Accelerated 2D and Web RenderingSIGGRAPH 2012: GPU-Accelerated 2D and Web Rendering
SIGGRAPH 2012: GPU-Accelerated 2D and Web Rendering
 
5 Major Challenges in Interactive Rendering
5 Major Challenges in Interactive Rendering5 Major Challenges in Interactive Rendering
5 Major Challenges in Interactive Rendering
 

Viewers also liked

On Beyond OWL: challenges for ontologies on the Web
On Beyond OWL: challenges for ontologies on the WebOn Beyond OWL: challenges for ontologies on the Web
On Beyond OWL: challenges for ontologies on the Web
James Hendler
 
Introduction to Skia by Ryan Chou @20141008
Introduction to Skia by Ryan Chou @20141008Introduction to Skia by Ryan Chou @20141008
Introduction to Skia by Ryan Chou @20141008
Ryan Chou
 
The Android graphics path, in depth
The Android graphics path, in depthThe Android graphics path, in depth
The Android graphics path, in depth
Chris Simmonds
 
Android graphic system (SurfaceFlinger) : Design Pattern's perspective
Android graphic system (SurfaceFlinger) : Design Pattern's perspectiveAndroid graphic system (SurfaceFlinger) : Design Pattern's perspective
Android graphic system (SurfaceFlinger) : Design Pattern's perspective
Bin Chen
 
Android internals 07 - Android graphics (rev_1.1)
Android internals 07 - Android graphics (rev_1.1)Android internals 07 - Android graphics (rev_1.1)
Android internals 07 - Android graphics (rev_1.1)
Egor Elizarov
 
Enlightenment Foundation Libraries (Overview)
Enlightenment Foundation Libraries (Overview)Enlightenment Foundation Libraries (Overview)
Enlightenment Foundation Libraries (Overview)
Samsung Open Source Group
 
EFL: Scaling From the Embedded World to the Desktop
EFL: Scaling From the Embedded World to the DesktopEFL: Scaling From the Embedded World to the Desktop
EFL: Scaling From the Embedded World to the Desktop
Samsung Open Source Group
 
Eo fosdem 15
Eo fosdem 15Eo fosdem 15
Enlightenment as Standalone Wayland Compositor
Enlightenment as Standalone Wayland CompositorEnlightenment as Standalone Wayland Compositor
Enlightenment as Standalone Wayland Compositor
Samsung Open Source Group
 
Application GUI Design
Application GUI DesignApplication GUI Design
Application GUI Design
Samsung Open Source Group
 
Gui application development guidelines
Gui application development guidelinesGui application development guidelines
Gui application development guidelines
LOUIS WAYNE
 
[1D6]RE-view of Android L developer PRE-view
[1D6]RE-view of Android L developer PRE-view[1D6]RE-view of Android L developer PRE-view
[1D6]RE-view of Android L developer PRE-view
NAVER D2
 
Clang: More than just a C/C++ Compiler
Clang: More than just a C/C++ CompilerClang: More than just a C/C++ Compiler
Clang: More than just a C/C++ Compiler
Samsung Open Source Group
 
Precise Android Text Drawing
Precise Android Text DrawingPrecise Android Text Drawing
Precise Android Text Drawing
Richard Creamer
 
LCE13: Android Graphics Upstreaming
LCE13: Android Graphics UpstreamingLCE13: Android Graphics Upstreaming
LCE13: Android Graphics Upstreaming
Linaro
 
IoTivity for Automotive IoT Interoperability
IoTivity for Automotive IoT InteroperabilityIoTivity for Automotive IoT Interoperability
IoTivity for Automotive IoT Interoperability
Samsung Open Source Group
 
Design and Concepts of Android Graphics
Design and Concepts of Android GraphicsDesign and Concepts of Android Graphics
Design and Concepts of Android Graphics
National Cheng Kung University
 
Mobile Browser Internal (Blink Rendering Engine)
Mobile Browser Internal (Blink Rendering Engine)Mobile Browser Internal (Blink Rendering Engine)
Mobile Browser Internal (Blink Rendering Engine)
Hyungwook Lee
 
Making Linux do Hard Real-time
Making Linux do Hard Real-timeMaking Linux do Hard Real-time
Making Linux do Hard Real-time
National Cheng Kung University
 

Viewers also liked (19)

On Beyond OWL: challenges for ontologies on the Web
On Beyond OWL: challenges for ontologies on the WebOn Beyond OWL: challenges for ontologies on the Web
On Beyond OWL: challenges for ontologies on the Web
 
Introduction to Skia by Ryan Chou @20141008
Introduction to Skia by Ryan Chou @20141008Introduction to Skia by Ryan Chou @20141008
Introduction to Skia by Ryan Chou @20141008
 
The Android graphics path, in depth
The Android graphics path, in depthThe Android graphics path, in depth
The Android graphics path, in depth
 
Android graphic system (SurfaceFlinger) : Design Pattern's perspective
Android graphic system (SurfaceFlinger) : Design Pattern's perspectiveAndroid graphic system (SurfaceFlinger) : Design Pattern's perspective
Android graphic system (SurfaceFlinger) : Design Pattern's perspective
 
Android internals 07 - Android graphics (rev_1.1)
Android internals 07 - Android graphics (rev_1.1)Android internals 07 - Android graphics (rev_1.1)
Android internals 07 - Android graphics (rev_1.1)
 
Enlightenment Foundation Libraries (Overview)
Enlightenment Foundation Libraries (Overview)Enlightenment Foundation Libraries (Overview)
Enlightenment Foundation Libraries (Overview)
 
EFL: Scaling From the Embedded World to the Desktop
EFL: Scaling From the Embedded World to the DesktopEFL: Scaling From the Embedded World to the Desktop
EFL: Scaling From the Embedded World to the Desktop
 
Eo fosdem 15
Eo fosdem 15Eo fosdem 15
Eo fosdem 15
 
Enlightenment as Standalone Wayland Compositor
Enlightenment as Standalone Wayland CompositorEnlightenment as Standalone Wayland Compositor
Enlightenment as Standalone Wayland Compositor
 
Application GUI Design
Application GUI DesignApplication GUI Design
Application GUI Design
 
Gui application development guidelines
Gui application development guidelinesGui application development guidelines
Gui application development guidelines
 
[1D6]RE-view of Android L developer PRE-view
[1D6]RE-view of Android L developer PRE-view[1D6]RE-view of Android L developer PRE-view
[1D6]RE-view of Android L developer PRE-view
 
Clang: More than just a C/C++ Compiler
Clang: More than just a C/C++ CompilerClang: More than just a C/C++ Compiler
Clang: More than just a C/C++ Compiler
 
Precise Android Text Drawing
Precise Android Text DrawingPrecise Android Text Drawing
Precise Android Text Drawing
 
LCE13: Android Graphics Upstreaming
LCE13: Android Graphics UpstreamingLCE13: Android Graphics Upstreaming
LCE13: Android Graphics Upstreaming
 
IoTivity for Automotive IoT Interoperability
IoTivity for Automotive IoT InteroperabilityIoTivity for Automotive IoT Interoperability
IoTivity for Automotive IoT Interoperability
 
Design and Concepts of Android Graphics
Design and Concepts of Android GraphicsDesign and Concepts of Android Graphics
Design and Concepts of Android Graphics
 
Mobile Browser Internal (Blink Rendering Engine)
Mobile Browser Internal (Blink Rendering Engine)Mobile Browser Internal (Blink Rendering Engine)
Mobile Browser Internal (Blink Rendering Engine)
 
Making Linux do Hard Real-time
Making Linux do Hard Real-timeMaking Linux do Hard Real-time
Making Linux do Hard Real-time
 

Similar to A Detailed Look at Cairo's OpenGL Spans Compositor Performance

Cloud-native Java EE-volution
Cloud-native Java EE-volutionCloud-native Java EE-volution
Cloud-native Java EE-volution
QAware GmbH
 
Kong Mesh入門編
Kong Mesh入門編Kong Mesh入門編
Kong Mesh入門編
WenhanShi1
 
pmux
pmuxpmux
pmux
maebashi
 
Kong Academyを日本語でお届け!#4 ”はじめてのKong”オンラインミートアップKong Developer Portal編
Kong Academyを日本語でお届け!#4 ”はじめてのKong”オンラインミートアップKong Developer Portal編Kong Academyを日本語でお届け!#4 ”はじめてのKong”オンラインミートアップKong Developer Portal編
Kong Academyを日本語でお届け!#4 ”はじめてのKong”オンラインミートアップKong Developer Portal編
Junji Nishihara
 
Tempest scenariotests 20140512
Tempest scenariotests 20140512Tempest scenariotests 20140512
Tempest scenariotests 20140512
Masayuki Igawa
 
Practical Groovy Domain-Specific Languages
Practical Groovy Domain-Specific LanguagesPractical Groovy Domain-Specific Languages
Practical Groovy Domain-Specific Languages
Guillaume Laforge
 
MongoDB.local DC 2018: MongoDB Ops Manager + Kubernetes
MongoDB.local DC 2018: MongoDB Ops Manager + KubernetesMongoDB.local DC 2018: MongoDB Ops Manager + Kubernetes
MongoDB.local DC 2018: MongoDB Ops Manager + Kubernetes
MongoDB
 
IMAGE CAPTURE, PROCESSING AND TRANSFER VIA ETHERNET UNDER CONTROL OF MATLAB G...
IMAGE CAPTURE, PROCESSING AND TRANSFER VIA ETHERNET UNDER CONTROL OF MATLAB G...IMAGE CAPTURE, PROCESSING AND TRANSFER VIA ETHERNET UNDER CONTROL OF MATLAB G...
IMAGE CAPTURE, PROCESSING AND TRANSFER VIA ETHERNET UNDER CONTROL OF MATLAB G...
Christopher Diamantopoulos
 
Kubernetes deployment strategies - CNCF Webinar
Kubernetes deployment strategies - CNCF WebinarKubernetes deployment strategies - CNCF Webinar
Kubernetes deployment strategies - CNCF Webinar
Etienne Tremel
 
[JOI] TOTVS Developers Joinville - Java #1
[JOI] TOTVS Developers Joinville - Java #1[JOI] TOTVS Developers Joinville - Java #1
[JOI] TOTVS Developers Joinville - Java #1
Rubens Dos Santos Filho
 
Continuous (Non)-Functional Testing of Microservices on k8s
Continuous (Non)-Functional Testing of Microservices on k8s Continuous (Non)-Functional Testing of Microservices on k8s
Continuous (Non)-Functional Testing of Microservices on k8s
QAware GmbH
 
Alexey Kupriyanenko "Release Early, Often, Stable"
Alexey Kupriyanenko "Release Early, Often, Stable"Alexey Kupriyanenko "Release Early, Often, Stable"
Alexey Kupriyanenko "Release Early, Often, Stable"
Fwdays
 
XebiCon'18 - Passage à l'échelle de mes applications Kafka-Streams
XebiCon'18 - Passage à l'échelle de mes applications Kafka-StreamsXebiCon'18 - Passage à l'échelle de mes applications Kafka-Streams
XebiCon'18 - Passage à l'échelle de mes applications Kafka-Streams
Publicis Sapient Engineering
 
Using Docker For Development
Using Docker For DevelopmentUsing Docker For Development
Using Docker For Development
Laura Frank Tacho
 
OpenMP-OpenACC-Offload-Cauldron2022-1.pdf
OpenMP-OpenACC-Offload-Cauldron2022-1.pdfOpenMP-OpenACC-Offload-Cauldron2022-1.pdf
OpenMP-OpenACC-Offload-Cauldron2022-1.pdf
ssuser866937
 
Developer Experience at Zalando - CNCF End User SIG-DX
Developer Experience at Zalando - CNCF End User SIG-DXDeveloper Experience at Zalando - CNCF End User SIG-DX
Developer Experience at Zalando - CNCF End User SIG-DX
Henning Jacobs
 
Scaling Prometheus Metrics in Kubernetes with Telegraf | Chris Goller | Influ...
Scaling Prometheus Metrics in Kubernetes with Telegraf | Chris Goller | Influ...Scaling Prometheus Metrics in Kubernetes with Telegraf | Chris Goller | Influ...
Scaling Prometheus Metrics in Kubernetes with Telegraf | Chris Goller | Influ...
InfluxData
 
“Open Standards: Powering the Future of Embedded Vision,” a Presentation from...
“Open Standards: Powering the Future of Embedded Vision,” a Presentation from...“Open Standards: Powering the Future of Embedded Vision,” a Presentation from...
“Open Standards: Powering the Future of Embedded Vision,” a Presentation from...
Edge AI and Vision Alliance
 
Chicago Docker Meetup Presentation - Mediafly
Chicago Docker Meetup Presentation - MediaflyChicago Docker Meetup Presentation - Mediafly
Chicago Docker Meetup Presentation - Mediafly
Mediafly
 
MongoDB.local Austin 2018: MongoDB Ops Manager + Kubernetes
MongoDB.local Austin 2018: MongoDB Ops Manager + KubernetesMongoDB.local Austin 2018: MongoDB Ops Manager + Kubernetes
MongoDB.local Austin 2018: MongoDB Ops Manager + Kubernetes
MongoDB
 

Similar to A Detailed Look at Cairo's OpenGL Spans Compositor Performance (20)

Cloud-native Java EE-volution
Cloud-native Java EE-volutionCloud-native Java EE-volution
Cloud-native Java EE-volution
 
Kong Mesh入門編
Kong Mesh入門編Kong Mesh入門編
Kong Mesh入門編
 
pmux
pmuxpmux
pmux
 
Kong Academyを日本語でお届け!#4 ”はじめてのKong”オンラインミートアップKong Developer Portal編
Kong Academyを日本語でお届け!#4 ”はじめてのKong”オンラインミートアップKong Developer Portal編Kong Academyを日本語でお届け!#4 ”はじめてのKong”オンラインミートアップKong Developer Portal編
Kong Academyを日本語でお届け!#4 ”はじめてのKong”オンラインミートアップKong Developer Portal編
 
Tempest scenariotests 20140512
Tempest scenariotests 20140512Tempest scenariotests 20140512
Tempest scenariotests 20140512
 
Practical Groovy Domain-Specific Languages
Practical Groovy Domain-Specific LanguagesPractical Groovy Domain-Specific Languages
Practical Groovy Domain-Specific Languages
 
MongoDB.local DC 2018: MongoDB Ops Manager + Kubernetes
MongoDB.local DC 2018: MongoDB Ops Manager + KubernetesMongoDB.local DC 2018: MongoDB Ops Manager + Kubernetes
MongoDB.local DC 2018: MongoDB Ops Manager + Kubernetes
 
IMAGE CAPTURE, PROCESSING AND TRANSFER VIA ETHERNET UNDER CONTROL OF MATLAB G...
IMAGE CAPTURE, PROCESSING AND TRANSFER VIA ETHERNET UNDER CONTROL OF MATLAB G...IMAGE CAPTURE, PROCESSING AND TRANSFER VIA ETHERNET UNDER CONTROL OF MATLAB G...
IMAGE CAPTURE, PROCESSING AND TRANSFER VIA ETHERNET UNDER CONTROL OF MATLAB G...
 
Kubernetes deployment strategies - CNCF Webinar
Kubernetes deployment strategies - CNCF WebinarKubernetes deployment strategies - CNCF Webinar
Kubernetes deployment strategies - CNCF Webinar
 
[JOI] TOTVS Developers Joinville - Java #1
[JOI] TOTVS Developers Joinville - Java #1[JOI] TOTVS Developers Joinville - Java #1
[JOI] TOTVS Developers Joinville - Java #1
 
Continuous (Non)-Functional Testing of Microservices on k8s
Continuous (Non)-Functional Testing of Microservices on k8s Continuous (Non)-Functional Testing of Microservices on k8s
Continuous (Non)-Functional Testing of Microservices on k8s
 
Alexey Kupriyanenko "Release Early, Often, Stable"
Alexey Kupriyanenko "Release Early, Often, Stable"Alexey Kupriyanenko "Release Early, Often, Stable"
Alexey Kupriyanenko "Release Early, Often, Stable"
 
XebiCon'18 - Passage à l'échelle de mes applications Kafka-Streams
XebiCon'18 - Passage à l'échelle de mes applications Kafka-StreamsXebiCon'18 - Passage à l'échelle de mes applications Kafka-Streams
XebiCon'18 - Passage à l'échelle de mes applications Kafka-Streams
 
Using Docker For Development
Using Docker For DevelopmentUsing Docker For Development
Using Docker For Development
 
OpenMP-OpenACC-Offload-Cauldron2022-1.pdf
OpenMP-OpenACC-Offload-Cauldron2022-1.pdfOpenMP-OpenACC-Offload-Cauldron2022-1.pdf
OpenMP-OpenACC-Offload-Cauldron2022-1.pdf
 
Developer Experience at Zalando - CNCF End User SIG-DX
Developer Experience at Zalando - CNCF End User SIG-DXDeveloper Experience at Zalando - CNCF End User SIG-DX
Developer Experience at Zalando - CNCF End User SIG-DX
 
Scaling Prometheus Metrics in Kubernetes with Telegraf | Chris Goller | Influ...
Scaling Prometheus Metrics in Kubernetes with Telegraf | Chris Goller | Influ...Scaling Prometheus Metrics in Kubernetes with Telegraf | Chris Goller | Influ...
Scaling Prometheus Metrics in Kubernetes with Telegraf | Chris Goller | Influ...
 
“Open Standards: Powering the Future of Embedded Vision,” a Presentation from...
“Open Standards: Powering the Future of Embedded Vision,” a Presentation from...“Open Standards: Powering the Future of Embedded Vision,” a Presentation from...
“Open Standards: Powering the Future of Embedded Vision,” a Presentation from...
 
Chicago Docker Meetup Presentation - Mediafly
Chicago Docker Meetup Presentation - MediaflyChicago Docker Meetup Presentation - Mediafly
Chicago Docker Meetup Presentation - Mediafly
 
MongoDB.local Austin 2018: MongoDB Ops Manager + Kubernetes
MongoDB.local Austin 2018: MongoDB Ops Manager + KubernetesMongoDB.local Austin 2018: MongoDB Ops Manager + Kubernetes
MongoDB.local Austin 2018: MongoDB Ops Manager + Kubernetes
 

More from Samsung Open Source Group

The Complex IoT Equation (and FLOSS solutions)
The Complex IoT Equation (and FLOSS solutions)The Complex IoT Equation (and FLOSS solutions)
The Complex IoT Equation (and FLOSS solutions)
Samsung Open Source Group
 
Easy IoT with JavaScript
Easy IoT with JavaScriptEasy IoT with JavaScript
Easy IoT with JavaScript
Samsung Open Source Group
 
Spawny: A New Approach to Logins
Spawny: A New Approach to LoginsSpawny: A New Approach to Logins
Spawny: A New Approach to Logins
Samsung Open Source Group
 
Rapid SPi Device Driver Development over USB
Rapid SPi Device Driver Development over USBRapid SPi Device Driver Development over USB
Rapid SPi Device Driver Development over USB
Samsung Open Source Group
 
Tizen RT: A Lightweight RTOS Platform for Low-End IoT Devices
Tizen RT: A Lightweight RTOS Platform for Low-End IoT DevicesTizen RT: A Lightweight RTOS Platform for Low-End IoT Devices
Tizen RT: A Lightweight RTOS Platform for Low-End IoT Devices
Samsung Open Source Group
 
IoTivity: Smart Home to Automotive and Beyond
IoTivity: Smart Home to Automotive and BeyondIoTivity: Smart Home to Automotive and Beyond
IoTivity: Smart Home to Automotive and Beyond
Samsung Open Source Group
 
IoTivity for Automotive: meta-ocf-automotive tutorial
IoTivity for Automotive: meta-ocf-automotive tutorialIoTivity for Automotive: meta-ocf-automotive tutorial
IoTivity for Automotive: meta-ocf-automotive tutorial
Samsung Open Source Group
 
GENIVI + OCF Cooperation
GENIVI + OCF CooperationGENIVI + OCF Cooperation
GENIVI + OCF Cooperation
Samsung Open Source Group
 
Framework for IoT Interoperability
Framework for IoT InteroperabilityFramework for IoT Interoperability
Framework for IoT Interoperability
Samsung Open Source Group
 
Open Source Metrics to Inform Corporate Strategy
Open Source Metrics to Inform Corporate StrategyOpen Source Metrics to Inform Corporate Strategy
Open Source Metrics to Inform Corporate Strategy
Samsung Open Source Group
 
JerryScript: An ultra-lighteweight JavaScript Engine for the Internet of Thin...
JerryScript: An ultra-lighteweight JavaScript Engine for the Internet of Thin...JerryScript: An ultra-lighteweight JavaScript Engine for the Internet of Thin...
JerryScript: An ultra-lighteweight JavaScript Engine for the Internet of Thin...
Samsung Open Source Group
 
Adding IEEE 802.15.4 and 6LoWPAN to an Embedded Linux Device
Adding IEEE 802.15.4 and 6LoWPAN to an Embedded Linux DeviceAdding IEEE 802.15.4 and 6LoWPAN to an Embedded Linux Device
Adding IEEE 802.15.4 and 6LoWPAN to an Embedded Linux Device
Samsung Open Source Group
 
IoTivity: From Devices to the Cloud
IoTivity: From Devices to the CloudIoTivity: From Devices to the Cloud
IoTivity: From Devices to the Cloud
Samsung Open Source Group
 
SOSCON 2016 JerryScript
SOSCON 2016 JerryScriptSOSCON 2016 JerryScript
SOSCON 2016 JerryScript
Samsung Open Source Group
 
IoT: From Arduino Microcontrollers to Tizen Products using IoTivity
IoT: From Arduino Microcontrollers to Tizen Products using IoTivityIoT: From Arduino Microcontrollers to Tizen Products using IoTivity
IoT: From Arduino Microcontrollers to Tizen Products using IoTivity
Samsung Open Source Group
 
Run Your Own 6LoWPAN Based IoT Network
Run Your Own 6LoWPAN Based IoT NetworkRun Your Own 6LoWPAN Based IoT Network
Run Your Own 6LoWPAN Based IoT Network
Samsung Open Source Group
 
Practical Guide to Run an IEEE 802.15.4 Network with 6LoWPAN Under Linux
Practical Guide to Run an IEEE 802.15.4 Network with 6LoWPAN Under LinuxPractical Guide to Run an IEEE 802.15.4 Network with 6LoWPAN Under Linux
Practical Guide to Run an IEEE 802.15.4 Network with 6LoWPAN Under Linux
Samsung Open Source Group
 
IoTivity Tutorial: Prototyping IoT Devices on GNU/Linux
IoTivity Tutorial: Prototyping IoT Devices on GNU/LinuxIoTivity Tutorial: Prototyping IoT Devices on GNU/Linux
IoTivity Tutorial: Prototyping IoT Devices on GNU/Linux
Samsung Open Source Group
 
JerryScript: An ultra-lighteweight JavaScript Engine for the Internet of Things
JerryScript: An ultra-lighteweight JavaScript Engine for the Internet of ThingsJerryScript: An ultra-lighteweight JavaScript Engine for the Internet of Things
JerryScript: An ultra-lighteweight JavaScript Engine for the Internet of Things
Samsung Open Source Group
 
Introduction to Linux-wpan and Potential Collaboration
Introduction to Linux-wpan and Potential CollaborationIntroduction to Linux-wpan and Potential Collaboration
Introduction to Linux-wpan and Potential Collaboration
Samsung Open Source Group
 

More from Samsung Open Source Group (20)

The Complex IoT Equation (and FLOSS solutions)
The Complex IoT Equation (and FLOSS solutions)The Complex IoT Equation (and FLOSS solutions)
The Complex IoT Equation (and FLOSS solutions)
 
Easy IoT with JavaScript
Easy IoT with JavaScriptEasy IoT with JavaScript
Easy IoT with JavaScript
 
Spawny: A New Approach to Logins
Spawny: A New Approach to LoginsSpawny: A New Approach to Logins
Spawny: A New Approach to Logins
 
Rapid SPi Device Driver Development over USB
Rapid SPi Device Driver Development over USBRapid SPi Device Driver Development over USB
Rapid SPi Device Driver Development over USB
 
Tizen RT: A Lightweight RTOS Platform for Low-End IoT Devices
Tizen RT: A Lightweight RTOS Platform for Low-End IoT DevicesTizen RT: A Lightweight RTOS Platform for Low-End IoT Devices
Tizen RT: A Lightweight RTOS Platform for Low-End IoT Devices
 
IoTivity: Smart Home to Automotive and Beyond
IoTivity: Smart Home to Automotive and BeyondIoTivity: Smart Home to Automotive and Beyond
IoTivity: Smart Home to Automotive and Beyond
 
IoTivity for Automotive: meta-ocf-automotive tutorial
IoTivity for Automotive: meta-ocf-automotive tutorialIoTivity for Automotive: meta-ocf-automotive tutorial
IoTivity for Automotive: meta-ocf-automotive tutorial
 
GENIVI + OCF Cooperation
GENIVI + OCF CooperationGENIVI + OCF Cooperation
GENIVI + OCF Cooperation
 
Framework for IoT Interoperability
Framework for IoT InteroperabilityFramework for IoT Interoperability
Framework for IoT Interoperability
 
Open Source Metrics to Inform Corporate Strategy
Open Source Metrics to Inform Corporate StrategyOpen Source Metrics to Inform Corporate Strategy
Open Source Metrics to Inform Corporate Strategy
 
JerryScript: An ultra-lighteweight JavaScript Engine for the Internet of Thin...
JerryScript: An ultra-lighteweight JavaScript Engine for the Internet of Thin...JerryScript: An ultra-lighteweight JavaScript Engine for the Internet of Thin...
JerryScript: An ultra-lighteweight JavaScript Engine for the Internet of Thin...
 
Adding IEEE 802.15.4 and 6LoWPAN to an Embedded Linux Device
Adding IEEE 802.15.4 and 6LoWPAN to an Embedded Linux DeviceAdding IEEE 802.15.4 and 6LoWPAN to an Embedded Linux Device
Adding IEEE 802.15.4 and 6LoWPAN to an Embedded Linux Device
 
IoTivity: From Devices to the Cloud
IoTivity: From Devices to the CloudIoTivity: From Devices to the Cloud
IoTivity: From Devices to the Cloud
 
SOSCON 2016 JerryScript
SOSCON 2016 JerryScriptSOSCON 2016 JerryScript
SOSCON 2016 JerryScript
 
IoT: From Arduino Microcontrollers to Tizen Products using IoTivity
IoT: From Arduino Microcontrollers to Tizen Products using IoTivityIoT: From Arduino Microcontrollers to Tizen Products using IoTivity
IoT: From Arduino Microcontrollers to Tizen Products using IoTivity
 
Run Your Own 6LoWPAN Based IoT Network
Run Your Own 6LoWPAN Based IoT NetworkRun Your Own 6LoWPAN Based IoT Network
Run Your Own 6LoWPAN Based IoT Network
 
Practical Guide to Run an IEEE 802.15.4 Network with 6LoWPAN Under Linux
Practical Guide to Run an IEEE 802.15.4 Network with 6LoWPAN Under LinuxPractical Guide to Run an IEEE 802.15.4 Network with 6LoWPAN Under Linux
Practical Guide to Run an IEEE 802.15.4 Network with 6LoWPAN Under Linux
 
IoTivity Tutorial: Prototyping IoT Devices on GNU/Linux
IoTivity Tutorial: Prototyping IoT Devices on GNU/LinuxIoTivity Tutorial: Prototyping IoT Devices on GNU/Linux
IoTivity Tutorial: Prototyping IoT Devices on GNU/Linux
 
JerryScript: An ultra-lighteweight JavaScript Engine for the Internet of Things
JerryScript: An ultra-lighteweight JavaScript Engine for the Internet of ThingsJerryScript: An ultra-lighteweight JavaScript Engine for the Internet of Things
JerryScript: An ultra-lighteweight JavaScript Engine for the Internet of Things
 
Introduction to Linux-wpan and Potential Collaboration
Introduction to Linux-wpan and Potential CollaborationIntroduction to Linux-wpan and Potential Collaboration
Introduction to Linux-wpan and Potential Collaboration
 

Recently uploaded

Uncharted Together- Navigating AI's New Frontiers in Libraries
Uncharted Together- Navigating AI's New Frontiers in LibrariesUncharted Together- Navigating AI's New Frontiers in Libraries
Uncharted Together- Navigating AI's New Frontiers in Libraries
Brian Pichman
 
Camunda Chapter NY Meetup July 2024.pptx
Camunda Chapter NY Meetup July 2024.pptxCamunda Chapter NY Meetup July 2024.pptx
Camunda Chapter NY Meetup July 2024.pptx
ZachWylie3
 
Acumatica vs. Sage Intacct _Construction_July (1).pptx
Acumatica vs. Sage Intacct _Construction_July (1).pptxAcumatica vs. Sage Intacct _Construction_July (1).pptx
Acumatica vs. Sage Intacct _Construction_July (1).pptx
BrainSell Technologies
 
The Path to General-Purpose Robots - Coatue
The Path to General-Purpose Robots - CoatueThe Path to General-Purpose Robots - Coatue
The Path to General-Purpose Robots - Coatue
Razin Mustafiz
 
Communications Mining Series - Zero to Hero - Session 3
Communications Mining Series - Zero to Hero - Session 3Communications Mining Series - Zero to Hero - Session 3
Communications Mining Series - Zero to Hero - Session 3
DianaGray10
 
Vertex AI Agent Builder - GDG Alicante - Julio 2024
Vertex AI Agent Builder - GDG Alicante - Julio 2024Vertex AI Agent Builder - GDG Alicante - Julio 2024
Vertex AI Agent Builder - GDG Alicante - Julio 2024
Nicolás Lopéz
 
The Impact of the Internet of Things (IoT) on Smart Homes and Cities
The Impact of the Internet of Things (IoT) on Smart Homes and CitiesThe Impact of the Internet of Things (IoT) on Smart Homes and Cities
The Impact of the Internet of Things (IoT) on Smart Homes and Cities
Arpan Buwa
 
Gen AI: Privacy Risks of Large Language Models (LLMs)
Gen AI: Privacy Risks of Large Language Models (LLMs)Gen AI: Privacy Risks of Large Language Models (LLMs)
Gen AI: Privacy Risks of Large Language Models (LLMs)
Debmalya Biswas
 
Computer HARDWARE presenattion by CWD students class 10
Computer HARDWARE presenattion by CWD students class 10Computer HARDWARE presenattion by CWD students class 10
Computer HARDWARE presenattion by CWD students class 10
ankush9927
 
LeadMagnet IQ Review: Unlock the Secret to Effortless Traffic and Leads.pdf
LeadMagnet IQ Review:  Unlock the Secret to Effortless Traffic and Leads.pdfLeadMagnet IQ Review:  Unlock the Secret to Effortless Traffic and Leads.pdf
LeadMagnet IQ Review: Unlock the Secret to Effortless Traffic and Leads.pdf
SelfMade bd
 
leewayhertz.com-AI agents for healthcare Applications benefits and implementa...
leewayhertz.com-AI agents for healthcare Applications benefits and implementa...leewayhertz.com-AI agents for healthcare Applications benefits and implementa...
leewayhertz.com-AI agents for healthcare Applications benefits and implementa...
alexjohnson7307
 
Sonkoloniya documentation - ONEprojukti.pdf
Sonkoloniya documentation - ONEprojukti.pdfSonkoloniya documentation - ONEprojukti.pdf
Sonkoloniya documentation - ONEprojukti.pdf
SubhamMandal40
 
UX Webinar Series: Essentials for Adopting Passkeys as the Foundation of your...
UX Webinar Series: Essentials for Adopting Passkeys as the Foundation of your...UX Webinar Series: Essentials for Adopting Passkeys as the Foundation of your...
UX Webinar Series: Essentials for Adopting Passkeys as the Foundation of your...
FIDO Alliance
 
kk vathada _digital transformation frameworks_2024.pdf
kk vathada _digital transformation frameworks_2024.pdfkk vathada _digital transformation frameworks_2024.pdf
kk vathada _digital transformation frameworks_2024.pdf
KIRAN KV
 
EuroPython 2024 - Streamlining Testing in a Large Python Codebase
EuroPython 2024 - Streamlining Testing in a Large Python CodebaseEuroPython 2024 - Streamlining Testing in a Large Python Codebase
EuroPython 2024 - Streamlining Testing in a Large Python Codebase
Jimmy Lai
 
UX Webinar Series: Drive Revenue and Decrease Costs with Passkeys for Consume...
UX Webinar Series: Drive Revenue and Decrease Costs with Passkeys for Consume...UX Webinar Series: Drive Revenue and Decrease Costs with Passkeys for Consume...
UX Webinar Series: Drive Revenue and Decrease Costs with Passkeys for Consume...
FIDO Alliance
 
Types of Weaving loom machine & it's technology
Types of Weaving loom machine & it's technologyTypes of Weaving loom machine & it's technology
Types of Weaving loom machine & it's technology
ldtexsolbl
 
Finetuning GenAI For Hacking and Defending
Finetuning GenAI For Hacking and DefendingFinetuning GenAI For Hacking and Defending
Finetuning GenAI For Hacking and Defending
Priyanka Aash
 
Girls Call Churchgate 9910780858 Provide Best And Top Girl Service And No1 in...
Girls Call Churchgate 9910780858 Provide Best And Top Girl Service And No1 in...Girls Call Churchgate 9910780858 Provide Best And Top Girl Service And No1 in...
Girls Call Churchgate 9910780858 Provide Best And Top Girl Service And No1 in...
maigasapphire
 
How UiPath Discovery Suite supports identification of Agentic Process Automat...
How UiPath Discovery Suite supports identification of Agentic Process Automat...How UiPath Discovery Suite supports identification of Agentic Process Automat...
How UiPath Discovery Suite supports identification of Agentic Process Automat...
DianaGray10
 

Recently uploaded (20)

Uncharted Together- Navigating AI's New Frontiers in Libraries
Uncharted Together- Navigating AI's New Frontiers in LibrariesUncharted Together- Navigating AI's New Frontiers in Libraries
Uncharted Together- Navigating AI's New Frontiers in Libraries
 
Camunda Chapter NY Meetup July 2024.pptx
Camunda Chapter NY Meetup July 2024.pptxCamunda Chapter NY Meetup July 2024.pptx
Camunda Chapter NY Meetup July 2024.pptx
 
Acumatica vs. Sage Intacct _Construction_July (1).pptx
Acumatica vs. Sage Intacct _Construction_July (1).pptxAcumatica vs. Sage Intacct _Construction_July (1).pptx
Acumatica vs. Sage Intacct _Construction_July (1).pptx
 
The Path to General-Purpose Robots - Coatue
The Path to General-Purpose Robots - CoatueThe Path to General-Purpose Robots - Coatue
The Path to General-Purpose Robots - Coatue
 
Communications Mining Series - Zero to Hero - Session 3
Communications Mining Series - Zero to Hero - Session 3Communications Mining Series - Zero to Hero - Session 3
Communications Mining Series - Zero to Hero - Session 3
 
Vertex AI Agent Builder - GDG Alicante - Julio 2024
Vertex AI Agent Builder - GDG Alicante - Julio 2024Vertex AI Agent Builder - GDG Alicante - Julio 2024
Vertex AI Agent Builder - GDG Alicante - Julio 2024
 
The Impact of the Internet of Things (IoT) on Smart Homes and Cities
The Impact of the Internet of Things (IoT) on Smart Homes and CitiesThe Impact of the Internet of Things (IoT) on Smart Homes and Cities
The Impact of the Internet of Things (IoT) on Smart Homes and Cities
 
Gen AI: Privacy Risks of Large Language Models (LLMs)
Gen AI: Privacy Risks of Large Language Models (LLMs)Gen AI: Privacy Risks of Large Language Models (LLMs)
Gen AI: Privacy Risks of Large Language Models (LLMs)
 
Computer HARDWARE presenattion by CWD students class 10
Computer HARDWARE presenattion by CWD students class 10Computer HARDWARE presenattion by CWD students class 10
Computer HARDWARE presenattion by CWD students class 10
 
LeadMagnet IQ Review: Unlock the Secret to Effortless Traffic and Leads.pdf
LeadMagnet IQ Review:  Unlock the Secret to Effortless Traffic and Leads.pdfLeadMagnet IQ Review:  Unlock the Secret to Effortless Traffic and Leads.pdf
LeadMagnet IQ Review: Unlock the Secret to Effortless Traffic and Leads.pdf
 
leewayhertz.com-AI agents for healthcare Applications benefits and implementa...
leewayhertz.com-AI agents for healthcare Applications benefits and implementa...leewayhertz.com-AI agents for healthcare Applications benefits and implementa...
leewayhertz.com-AI agents for healthcare Applications benefits and implementa...
 
Sonkoloniya documentation - ONEprojukti.pdf
Sonkoloniya documentation - ONEprojukti.pdfSonkoloniya documentation - ONEprojukti.pdf
Sonkoloniya documentation - ONEprojukti.pdf
 
UX Webinar Series: Essentials for Adopting Passkeys as the Foundation of your...
UX Webinar Series: Essentials for Adopting Passkeys as the Foundation of your...UX Webinar Series: Essentials for Adopting Passkeys as the Foundation of your...
UX Webinar Series: Essentials for Adopting Passkeys as the Foundation of your...
 
kk vathada _digital transformation frameworks_2024.pdf
kk vathada _digital transformation frameworks_2024.pdfkk vathada _digital transformation frameworks_2024.pdf
kk vathada _digital transformation frameworks_2024.pdf
 
EuroPython 2024 - Streamlining Testing in a Large Python Codebase
EuroPython 2024 - Streamlining Testing in a Large Python CodebaseEuroPython 2024 - Streamlining Testing in a Large Python Codebase
EuroPython 2024 - Streamlining Testing in a Large Python Codebase
 
UX Webinar Series: Drive Revenue and Decrease Costs with Passkeys for Consume...
UX Webinar Series: Drive Revenue and Decrease Costs with Passkeys for Consume...UX Webinar Series: Drive Revenue and Decrease Costs with Passkeys for Consume...
UX Webinar Series: Drive Revenue and Decrease Costs with Passkeys for Consume...
 
Types of Weaving loom machine & it's technology
Types of Weaving loom machine & it's technologyTypes of Weaving loom machine & it's technology
Types of Weaving loom machine & it's technology
 
Finetuning GenAI For Hacking and Defending
Finetuning GenAI For Hacking and DefendingFinetuning GenAI For Hacking and Defending
Finetuning GenAI For Hacking and Defending
 
Girls Call Churchgate 9910780858 Provide Best And Top Girl Service And No1 in...
Girls Call Churchgate 9910780858 Provide Best And Top Girl Service And No1 in...Girls Call Churchgate 9910780858 Provide Best And Top Girl Service And No1 in...
Girls Call Churchgate 9910780858 Provide Best And Top Girl Service And No1 in...
 
How UiPath Discovery Suite supports identification of Agentic Process Automat...
How UiPath Discovery Suite supports identification of Agentic Process Automat...How UiPath Discovery Suite supports identification of Agentic Process Automat...
How UiPath Discovery Suite supports identification of Agentic Process Automat...
 

A Detailed Look at Cairo's OpenGL Spans Compositor Performance

  • 1. A Detailed Look at Cairo's OpenGL Spans Compositor Performance Bryce Harrington – Senior Open Source Developer Samsung Research America (Silicon Valley) b.harrington@samsung.com Open Source Group – Silicon Valley 1 © 2013 SAMSUNG Electronics Co.
  • 2. What is Cairo? 2D pen-based drawing model For both display and print Includes backends for acceleration and for vector output formats Open Source Group – Silicon Valley 2 © 2013 SAMSUNG Electronics Co.
  • 4. Where is Cairo Used on the Linux Desktop? GTK+/Pango GNOME, XFCE4 Gnuplot Gnucash Mozilla Evince (xpdf) Scribus Inkscape : : : Open Source Group – Silicon Valley $ apt-cache rdepends libcairo2 | |wc -l $ apt-cache rdepends libcairo2 wc -l 712 712 4 © 2013 SAMSUNG Electronics Co.
  • 5. Cairo Backends Platform backends  image  xlib  xcb  cairo-gl  quartz  win32  beos Format backends  ps  pdf  svg Open Source Group – Silicon Valley 5 © 2013 SAMSUNG Electronics Co.
  • 6. Cairo-gl on the Linux Desktop Cairo-gl is not enabled for some distros (e.g. Ubuntu):  --enable-gl links cairo to libgl  NVIDIA's libgl gets linked to every client app  Enormous RAM increase per app running (300%)  See Launchpad #725434 Several GL backends supported  cairo-gl (OpenGL) - EGL, GLX, WGL  glesv2 (OpenGL ES 2.0) - EGL  glesv3 (OpenGL ES 3.0) - EGL  vg (OpenVG) - EGL, GLX  cogl - experimental Open Source Group – Silicon Valley 6 © 2013 SAMSUNG Electronics Co.
  • 7. Cairo-gl Compositors Compositing combines visual elements into a single scene The cairo-gl backend has multiple compositors:  MSAA  Spans  Mask  Traps cairo-gl heuristically selects best compositor for operation. Or:    export CAIRO_GL_COMPOSITOR=spans Open Source Group – Silicon Valley 7 © 2013 SAMSUNG Electronics Co.
  • 8. Cairo-gl compositing fallbacks MSAA - Multisample anti-aliasing  Composites OpenGL primitives directly to the GPU Spans  Scanline compositing – rows of identical pixels inside regular polygonal shapes Mask  Renders the mask using spans on CPU rather than geometry Traps   Traps is the original Cairo 1.0 compositor, based on Xrender Only used for glyph rendering fallback now Image backend  Software rendering Open Source Group – Silicon Valley 8 © 2013 SAMSUNG Electronics Co.
  • 9. Spans Compositor Identifies horizontal lengths that will render as identical pixels. Spans are drawn as GL_LINES or as GL_QUADS where possible. Open Source Group – Silicon Valley 9 © 2013 SAMSUNG Electronics Co.
  • 10. Cairo Testing Open Source Group – Silicon Valley 10 © 2013 SAMSUNG Electronics Co.
  • 11. Cairo testing  Functional tests  Micro-benchmarks  Macro-benchmarks  Other (manually run) benchmarks Open Source Group – Silicon Valley 11 © 2013 SAMSUNG Electronics Co.
  • 12. Functional Tests Open Source Group – Silicon Valley 12 © 2013 SAMSUNG Electronics Co.
  • 13. Cairo functional test suite $ export CAIRO_TESTS="gradient-alpha" $ make test TARGETS=image,test-traps,test-mask,test-spans,gl Open Source Group – Silicon Valley 13 © 2013 SAMSUNG Electronics Co.
  • 14. Cairo functional test suite Open Source Group – Silicon Valley 14 © 2013 SAMSUNG Electronics Co.
  • 15. Micro Benchmarks Open Source Group – Silicon Valley 15 © 2013 SAMSUNG Electronics Co.
  • 16. Cairo micro benchmarks $ make perf crashes crashes $ sudo taskset -cp 0 $(pidof X) $ taskset -cp 1 $$ $ export CAIRO_TEST_TARGET=image,test-traps,test-mask,testspans,gl $ perf/cairo-perf-micro -i 1 wave Open Source Group – Silicon Valley 16 © 2013 SAMSUNG Electronics Co.
  • 17. Traps vs. Spans with Intel Driver Open Source Group – Silicon Valley 17 © 2013 SAMSUNG Electronics Co.
  • 18. Traps vs. Spans with Fglrx Open Source Group – Silicon Valley 18 © 2013 SAMSUNG Electronics Co.
  • 19. Spans Performance Regressions Intel Fglrx Test Case -49% -49% fill-annuli_image-rgb_source -92% -92% fill-annuli_image-rgba-mag_over -38% -37% fill-annuli_image-rgba-mag_source -49% -49% fill-annuli_similar-rgb_source -93% -92% fill-annuli_similar-rgba-mag_over -38% -37% fill-annuli_similar-rgba-mag_source -47% -45% fill_image-rgba-mag_over -47% -46% fill_similar-rgba-mag_over -31% -31% line-nhh -45% -45% many-fills-horizontal -43% -43% many-strokes-horizontal -28% -27% mask-solid_image-rgba_source -27% -27% mask-solid_similar-rgba_source -32% -32% mask-solid_solid-rgb_source -32% -32% mask-solid_solid-rgba_source -28% -28% paint-with-alpha_image-rgba_source -28% -28% paint-with-alpha_similar-rgba_source -32% -32% paint-with-alpha_solid-rgb_source -32% -32% paint-with-alpha_solid-rgba_source -418% -417% spiral-diag-nonalign-nonzero-fill -208% -209% spiral-diag-pixalign-nonzero-fill -55% -55% stroke_image-rgba-mag_over -55% -56% stroke_similar-rgba-mag_over Open Source Group – Silicon Valley 19 © 2013 SAMSUNG Electronics Co.
  • 20. Macro Benchmarks Open Source Group – Silicon Valley 20 © 2013 SAMSUNG Electronics Co.
  • 21. Analyzing performance using linux-perf $ git clone git://anongit.freedesktop.org/cairo-traces $ cairo-traces && make && cd ../cairo $ export CAIRO_TRACE_DIR="../cairo-traces" $ export CAIRO_TEST_TARGET_EXCLUDE="" $ export CAIRO_TEST_TARGET="gl image xlib xcb" $ export CAIRO_GL_COMPOSITOR="msaa" $ benchmark=firefox-fishbowl $ iterations=20 $ perf record -g -- ./perf/cairo-perf-trace -i ${iterations} ${benchmark} Open Source Group – Silicon Valley 21 © 2013 SAMSUNG Electronics Co.
  • 22. $ perf script | gprof2dot.py -f perf | dot -Tpng -o output.png Open Source Group – Silicon Valley 22 © 2013 SAMSUNG Electronics Co.
  • 23. Analyzing performance using linux-perf $ perf report + 11.56% lt-cairo-perf-t libcairo.so.2.11200.15 [.] _cairo_tor_scan_converter_generate + 11.27% lt-cairo-perf-t libc-2.15.so [.] 0x80f31 + 9.32% lt-cairo-perf-t libcairo.so.2.11200.15 [.] _cairo_gl_composite_emit_solid_span + 6.78% lt-cairo-perf-t libcairo.so.2.11200.15 [.] cell_list_render_edge + 5.68% lt-cairo-perf-t libcairo-script-interpreter.so.2.11200.15 [.] _csi_hash_table_lookup + 5.06% lt-cairo-perf-t libcairo-script-interpreter.so.2.11200.15 [.] _scan_file.5939 + 3.60% lt-cairo-perf-t libcairo.so.2.11200.15 [.] _cairo_gl_bounded_spans + 3.24% lt-cairo-perf-t [kernel.kallsyms] [k] 0xffffffff8103e0aa + 2.35% lt-cairo-perf-t libcairo-script-interpreter.so.2.11200.15 [.] _csi_parse_number + 2.25% lt-cairo-perf-t libcairo-script-interpreter.so.2.11200.15 [.] csi_file_getc + 1.32% lt-cairo-perf-t libcairo.so.2.11200.15 [.] _cairo_gl_composite_prepare_buffer Open Source Group – Silicon Valley 23 © 2013 SAMSUNG Electronics Co.
  • 24. Optimizing VBO size to improve performance Vertex Buffer Objects (VBOs) store vertex data (position, vector, color, etc.) in video device memory for rendering    Small VBO means more flushes Large VBO can cause trouble for embedded devices Currently is 16k WIP: http://cgit.freedesktop.org/~bryce/cairo/?h=vbo-size Open Source Group – Silicon Valley 24 © 2013 SAMSUNG Electronics Co.
  • 25. Analysis of other benchmarks - intel swfdec-giant-steps firefox-canvas 18.26% _cairo_tor_scan_converter_generate 11.49% _cairo_tor_scan_converter_generate  4.35% cell_list_render_edge  3.50% _cairo_bentley_ottmann_tessellate_polygon  3.70% _fill_xrgb32_lerp_opaque_spans  1.86% cell_list_render_edge  2.41% _cairo_bentley_ottmann_tessellate_polygon  1.75% _cairo_polygon_intersect ocitysmap firefox-scrolling  8.69% _cairo_tor_scan_converter_generate  1.85% _cairo_hash_table_lookup  2.86% _cairo_bentley_ottmann_tessellate_polygon  1.11% _cairo_scaled_font_glyph_device_extents  2.79% _fill_xrgb32_lerp_opaque_spans  0.78% _cairo_tor_scan_converter_add_polygon  0.67% cell_list_render_edge evolution firefox-talos-svg  1.06% _fill_xrgb32_lerp_opaque_spans  5.88% _cairo_tor_scan_converter_generate  0.97% _cairo_tor_scan_converter_generate  2.94% _cairo_bentley_ottmann_tessellate_polygon  0.88% _cairo_hash_table_lookup  0.71% _cairo_scaled_font_glyph_device_extents Open Source Group – Silicon Valley 25 © 2013 SAMSUNG Electronics Co.
  • 26. Analysis of other benchmarks - fglrx swfdec-giant-steps firefox-canvas 13.25% _cairo_tor_scan_converter_generate 10.45% _cairo_tor_scan_converter_generate  3.14% cell_list_render_edge  3.57% _cairo_bentley_ottmann_tessellate_polygon  2.76% _fill_xrgb32_lerp_opaque_spans  1.73% cell_list_render_edge  1.89% _cairo_bentley_ottmann_tessellate_polygon  1.63% _cairo_polygon_intersect ocitysmap firefox-scrolling  8.23% _cairo_tor_scan_converter_generate  0.82% _cairo_hash_table_lookup  2.78% _cairo_bentley_ottmann_tessellate_polygon  0.52% _cairo_scaled_font_glyph_device_extents  1.88% _fill_xrgb32_lerp_opaque_spans  0.81% _cairo_tor_scan_converter_add_polygon  0.79% cell_list_render_edge evolution firefox-talos-svg  0.70% _cairo_tor_scan_converter_generate  5.59% _cairo_tor_scan_converter_generate  0.65% _cairo_hash_table_lookup  2.82% _cairo_bentley_ottmann_tessellate_polygon  0.50% _cairo_scaled_font_glyph_device_extents Open Source Group – Silicon Valley 26 © 2013 SAMSUNG Electronics Co.
  • 27. Generating new traces To record a trace: $ cairo-trace --profile inkscape <args> Generates an inkscape.1234.trace file. Please document exact steps to re-generate the trace, for future reference! Open Source Group – Silicon Valley 27 © 2013 SAMSUNG Electronics Co.
  • 28. Thank you. Bryce Harrington – Senior Open Source Developer Samsung Research America (Silicon Valley) B.Harrington@Samsung.com Open Source Group – Silicon Valley 28 © 2013 SAMSUNG Electronics Co.