SlideShare une entreprise Scribd logo
1  sur  29
Télécharger pour lire hors ligne
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.

Contenu connexe

Tendances

“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
 

Tendances (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
 

En vedette

Enlightenment Foundation Libraries (Overview)
Enlightenment Foundation Libraries (Overview)Enlightenment Foundation Libraries (Overview)
Enlightenment Foundation Libraries (Overview)
Samsung Open Source Group
 
Gui application development guidelines
Gui application development guidelinesGui application development guidelines
Gui application development guidelines
LOUIS WAYNE
 

En vedette (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
 

Similaire à A Detailed Look at Cairo's OpenGL Spans Compositor Performance

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
 
OpenMP-OpenACC-Offload-Cauldron2022-1.pdf
OpenMP-OpenACC-Offload-Cauldron2022-1.pdfOpenMP-OpenACC-Offload-Cauldron2022-1.pdf
OpenMP-OpenACC-Offload-Cauldron2022-1.pdf
ssuser866937
 

Similaire à 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
 

Plus de Samsung Open Source Group

Plus de 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
 

Dernier

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 

Dernier (20)

Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 

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.