SlideShare a Scribd company logo
A Duel of Two Libraries 
Cairo vs. Skia 
Bryce Harrington – Senior Open Source Developer 
Samsung Research America (Silicon Valley) 
bryce@osg.samsung.com 
1 © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
2 
What is Vector Graphics? 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
3 
Vector Graphics 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
4 
Vector Graphics 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. 
Basic Tutorial 
From 
Inkscape 
inkscape.org
5 
Vector Graphics 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. 
Basic Tutorial 
From 
Inkscape 
inkscape.org
6 
Vector Graphics 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. 
Shapes 
Tutorial 
From 
Inkscape 
inkscape.org
7 
Vector Graphics 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. 
Shapes 
Tutorial 
From 
Inkscape 
inkscape.org
8 
Vector Graphics 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. 
Fibonacci 
Little Owl 
By ark4n 
deviantart.com
9 
Vector Graphics 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. 
openclipart.org 
public domain vector 
graphics
10 
Vector Graphics 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. 
Shapes 
Tutorial 
From 
Inkscape 
inkscape.org
11 
Vector Graphics 
Snooker 
By Maddrum 
deviantart.co 
m 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
12 
Vector Graphics 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. 
Iron Man 
by mrmanders 
deviantart.com
13 
Vector Graphics 
Audi TT 
by JumpOrDie 
deviantart.co 
m 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
14 
What is Cairo? 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
15 
What is Cairo? 
2D pen-based drawing model 
For both display and print 
Includes backends for acceleration 
and for vector output formats 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
16 
Overview 
Cairoglyphics vers 2.0 
This diagram works from left to right. It shows the drawing of two shapes which each go to the 
page one after the other. All the commands to do this come from a toolbox called the Context. 
On the next page (Summary) I list many of the commands that you can use. 
Transforms 
Clip 
The star will be drawn 
on top of the rectangle. 1 2 
Create Path 
Create Path 
Source 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. 
Source 
The Page 
Diagram (c) 2007 Donn Ingle ­donn. 
ingle@gmail.com. Kubuntu 7.10 & Inkscape 
Create Mask 
Create Mask 
This rectangle will be drawn 
first, shaped by the clip. 
The clip only lasts for this 
one operation. 
Before you start drawing, you 
can set up a rotation and scale 
just like in a vector program like 
Inkscape. 
The Source is like a picture you 
slip under the Path. It is revealed 
by the masking commands just like 
scratching away the surface to see 
what's underneath. 
See Sources, Surfaces & Patterns diagram for details. 
hhtttptp:/://w/wwwww.t.otortratalll.ln.neet/tm/muu/w/wikiki/iC/CaairioroTTuutotoriraial l
17 
Cairo Backends 
Format backends 
 ps 
 pdf 
 svg 
Platform backends 
 image 
 xlib 
 xcb 
 ccaaiirroo--ggll 
 quartz 
 win32 
 beos 
 skia (‽) 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
18 
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 
 gglleessvv33 ((OOppeennGGLL EESS 33..00)) -- EEGGLL 
 vg (OpenVG) - EGL, GLX 
 cogl - experimental 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
19 
Installing Cairo 
Distro-supplied Cairo usually doesn't include GL support 
Cairo Trees: 
Upstream: http://cgit.freedesk.top.org/cairo 
CairoGles fork: https://github.com/SRA-SiliconValley/cairogles 
PPAs 
Coming Soon! 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
20 
What is Skia? 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
21 
What is Skia? 
Skia Graphics Engine 
Greek for “sshhaaddooww” 
Written in C++ 
Nov 1, 2005 - Google buys Skia Inc. 
Based in Chapel Hill, North Carolina 
5 people 
Releases Skia Graphics Engine as Open Source 
Originally used for Android's WebKit, later added to Chrome web 
browser, Chrome OS, Chromium OS, and Android OS 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
22 
Skia features 
Skia is a 2D graphic library for drawing Text, Geometries, and Images. 
3x3 matrices w/ perspective 
antialiasing, transparency, filters, subpixel text 
shaders, transfer modes, maskfilters, patheffects 
reads SVG, PS, PDF, Flash and translates into Skia API calls 
Device backends for Skia currently include: 
Raster, OpenGL, PDF, XPS 
Picture (for recording and then playing back into another Canvas) 
Performance optimizations 
Copy-on-write for images and other data types 
Extensive use of the stack to avoid memory fragmentation 
Thread-safety to enable parallelization 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
23 
Installing Skia 
Skia trees: 
https://skia.googlesource.com/skia 
https://github.com/Samsung/skia 
• Snapshot dev/m36_1985 
Ubuntu PPA: 
https://launchpad.net/~bryce/+archive/ubuntu/skia/ 
RPM build spec: 
Only tested on Tizen 
See packaging/skia.spec 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
24 
Cairo vs. Skia! 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
25 
Cairo and Skia Differences 
Cairo 
C 
Standard build system 
(autoconf/automake) 
Drawing context is in cairo_t 
Packages available for all 
major distributions 
API/ABI Stable 
Being considered as an 
ISO Standard 
Skia 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. 
C++ 
Custom build system 
(ninja) 
Context is split 
• SkCanvas - drawing 
• SkPaint - style 
Not packaged 
Not API/ABI Stable 
PPrroommiisseess bbeetttteerr 
ppeerrffoorrmmaannccee
26 
Cairo/Skia Benchmarking 
“CaskBench” 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
27 
What is caskbench? 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. 
?
28 
What is Caskbench? 
(Yet another?) testsuite with collection of tests 
Provides equivalent Cairo and Skia test implementations 
Establishes comparable rendering environments 
Ensures consistent measurements 
Selectable rendering systems 
Image, EGL, and GLX ((ccoommiinngg ssoooonn)) 
Includes a Shapes and Styles Library 
Circles, Rectangles, Triangles, Stars, Rounded Rectangles 
Solid, Linear/Radial Gradients, Image Pattern 
Stroke Dash, Cap, and Join Styles 
Collaboration with OSG, ASWP/ABT and SRI-B. (Thanks!) 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
29 
How to use Caskbench 
$ cmake . 
$ make 
$ ./src/caskbench 
cairo­bubbles 
64 PASS 64 0.005676 0.006731 
skia­bubbles 
64 PASS 64 0.000987 0.001234 81.66% 
cairo­fill 
64 PASS 64 0.000789 0.000851 
... 
$ ./src/caskbench -t egl 
$ ./src/caskbench -t egl --iterations 100 --size 42 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
30 
Demo 
$ src/caskbench ­w 
1024 ­h 
800 ­i 
8 ­s 
500 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
31 
Caskbench options 
Usage: caskbench [ARG...] 
­­enable­egl­sample­buffers 
Sets EGL_SAMPLES=4 and EGL_SAMPLE_BUFFERS=1 in EGL attribute list 
­n, 
­­dry­run 
Just list the selected test case names without executing 
­i, 
­­iterations= 
INT The number of times each test case should be run 
­l, 
­­list­surfaces 
List the available surfaces linked in this executable 
­o, 
­­output­file= 
STRING Filename to write JSON output to 
­t, 
­­surface­type= 
STRING Type of graphics surface to use (see ­­list­surfaces) 
­s, 
­­test­size= 
INT Controls complexity of the tests, such as number of drawn 
elements 
­V, 
­­version 
Display the program version 
­S, 
­­shape= 
STRING Controls which shape to be drawn 
­X, 
­­x­position= 
INT The X location to draw the object 
­Y, 
­­y­position= 
INT The Y location to draw the object 
­W, 
­­width= 
INT Width of the shape bject 
­H, 
­­height= 
INT Height of the shape object 
­f, 
­­fill­type= 
STRING Limit fill type of objects to solid, gradient, image pattern type 
­g, 
­­animation= 
INT Controls the kinematics of the objects drawn 
­I, 
­­image­path= 
STRING Path to a stock image for use in clipping, patterns, etc. 
­w, 
­­stroke­width= 
INT Limit stroke with to specified width 
­m, 
­­multi­shapes= 
INT Randomize shape types used in tests 
­C, 
­­cap­style= 
INT Limit cap style to specified cap style ID 
­J, 
­­join­style= 
INT Limit join style to specified cap style ID 
­D, 
­­dash­style= 
INT Limit dash style to specified cap style ID 
Help options: 
­?, 
­­help 
Show this help message 
­­usage 
Display brief usage message 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
32 
What do test cases look like? 
static int max_dim; 
Cairo Skia 
int 
ca_setup_bubbles(caskbench_context_t *ctx) 
{ 
max_dim = MIN(ctx->canvas_width, ctx->canvas_height)/2; 
return 1; 
} 
void 
ca_teardown_bubbles(void) 
{ 
} 
int 
ca_test_bubbles(caskbench_context_t *ctx) 
{ 
int i, x, y, r; 
cairo_t *cr = ctx->cairo_cr; 
for (i=0; i<ctx->size; i++) { 
cairoRandomizeColor(ctx); 
r = ((double)max_dim*rand())/RAND_MAX + 1; 
x = (0.5*(double)ctx->canvas_width*rand())/RAND_MAX; 
y = (0.5*(double)ctx->canvas_height*rand())/RAND_MAX; 
cairo_arc (cr, x, y, r, 0, 2*M_PI); 
cairo_fill (cr); 
} 
return 1; 
} 
static int max_dim; 
int 
sk_setup_bubbles(caskbench_context_t *ctx) 
{ 
max_dim = MIN(ctx->canvas_width, ctx->canvas_height)/2; 
return 1; 
} 
void 
sk_teardown_bubbles(void) 
{ 
} 
int 
sk_test_bubbles(caskbench_context_t *ctx) 
{ 
int i, x, y, r; 
for (i=0; i<ctx->size; i++) { 
skiaRandomizePaintColor(ctx); 
r = ((double)max_dim*rand())/RAND_MAX + 1; 
x = (0.5*(double)ctx->canvas_width*rand())/RAND_MAX; 
y = (0.5*(double)ctx->canvas_height*rand())/RAND_MAX; 
ctx->skia_canvas->drawCircle(x, y, r, *ctx->skia_paint); 
} 
return 1; 
} 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
33 
Cairo Bubbles Test 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
34 
Skia Bubbles Test 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
35 
Adding New Backends 
Backends other than egl, glx and image are welcome 
Tasks for adding another backend: 
cairo-[backend].cpp - surface creation/update/destruction 
skia-[backend].cpp - surface creation/update/destruction 
[backend].cpp - shared code for both of the above 
caskbench-context.cpp - register your backend 
caskbench.cpp - add command line options you need 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
36 
Add Another Drawing Library 
More drawing libraries beyond Cairo and Skia also welcome 
Bit more involved, though: 
[drawlib]-[backend].cpp - surface creation/update/deletion 
[drawlib]-shapes.* - implement shape drawing 
[drawlib]-utils.cpp - misc. routines 
[drawlib]-tests/*.cpp - reimplement all tests 
caskbench_context.cpp - register your drawing library 
caskbench.cpp - add command line options, etc. 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
37 
Results (So far...) 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
38 
Performance results (PC) 
$ caskbench ­i 
100 ­s 
256 ­t 
egl 
cpu: Intel(R) Core(TM) i5-2405S CPU @ 2.50GHz 
platform: x86_64 GNU/Linux 
distribution: Ubuntu Trusty Tahr (development branch) 
linux kernel: 3.13 
xserver: 1.15 
mesa: OpenGL version string: 3.0 Mesa 10.1.0 
video: snb-gt2 (8086:0112) sandybridge xserver-xorg-video-intel 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
39 
EGL Performance results (EGL, PC) 
test case ca sk 
vline 485 508 4.48% 
hline 482 499 3.41% 
test case ca sk 
line 292 510 42.79% 
multi_line 430 646 33.46% 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
40 
Performance results (EGL, PC) 
test ca sk 
cubic 107 402 73.37% 
quadratic 123 416 70.47% 
test ca sk 
curves 11 76 85.44% 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
41 
Performance results (EGL, PC) 
test ca sk 
circle 107 169 36.98% 
rect 243 81 ­201.03% 
test ca sk 
roundrect 109 232 53.11% 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
42 
Performance results (EGL, PC) 
test ca sk 
star(!) 201 169 ­19.06% 
mulshape 139 197 29.57% 
test ca sk 
animation 123 375 67.13% 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
43 
Performance results (EGL, PC) 
test ca sk 
fill 166 240 30.54% 
bubbles 169 45 ­274.75% 
test ca sk 
lin_grad 441 63 ­601.84% 
rad_grad 455 62 ­631.12% 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
44 
Performance results (EGL, PC) 
test ca sk 
mask 433 876 50.53% 
clip(!) 1689 23 ­7336.62% 
test ca sk 
paint 364 6 ­5811.96% 
transform 8 2 ­258.79% 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
45 
Performance results (EGL, PC) 
test ca sk 
text ! 767 5 ­15009.39% 
text_glyphs ! 708 41 ­1614.53% 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
46 
Findings 
Skia has better performance than Cairo for EGL+MSAA 
50% faster on average for basic drawing ops (both on PC and M0) 
Slower than Cairo in certain cases 
Skia can be trickier than Cairo to get right 
Rendering discrepancies 
More sensitive to settings 
• Polygons with anti-aliasing segfaults in debug builds (mesa 8 only) 
• Rounded rects and stroke width > radius 
• Stroke with dashes (fStencilbits<2) 
• fSampleCount!=4 causes incorrect output 
• … ? 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
47 
Ongoing Work 
Skia 
MSAA Oval/Circle fill and stroke optimizations 
Batch and route GrContext::drawPath() for rects and ellipses 
Curved strokes – GrShapePathRenderer 
SkDeferredCanvas improvements? 
Cairo 
Gles3 support 
Gaussian blur 
GL MSAA compositor & optimizations 
Drop shadow, inset shadow; shadow caching 
Image downscaling 
Perspective transformation 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
48 
Thank you 
https://github.com/SRA-SiliconValley/cairogles 
Samsung's cairo branch with gles3, etc. 
https://github.com/Samsung 
Samsung's branches of skia 
Caskbench 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
49 
Thank you. 
© 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.

More Related Content

What's hot

Android/iOS端末におけるエッジ推論のチューニング
Android/iOS端末におけるエッジ推論のチューニングAndroid/iOS端末におけるエッジ推論のチューニング
Android/iOS端末におけるエッジ推論のチューニング
Deep Learning Lab(ディープラーニング・ラボ)
 
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
Unity Technologies Japan K.K.
 
SDL2の紹介
SDL2の紹介SDL2の紹介
SDL2の紹介
nyaocat
 
Introduction to eBPF and XDP
Introduction to eBPF and XDPIntroduction to eBPF and XDP
Introduction to eBPF and XDP
lcplcp1
 
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
京大 マイコンクラブ
 
Magnum IO GPUDirect Storage 最新情報
Magnum IO GPUDirect Storage 最新情報Magnum IO GPUDirect Storage 最新情報
Magnum IO GPUDirect Storage 最新情報
NVIDIA Japan
 
【Unite Tokyo 2018】『崩壊3rd』開発者が語るアニメ風レンダリングの極意
【Unite Tokyo 2018】『崩壊3rd』開発者が語るアニメ風レンダリングの極意【Unite Tokyo 2018】『崩壊3rd』開発者が語るアニメ風レンダリングの極意
【Unite Tokyo 2018】『崩壊3rd』開発者が語るアニメ風レンダリングの極意
UnityTechnologiesJapan002
 
OpenGL 3.2 and More
OpenGL 3.2 and MoreOpenGL 3.2 and More
OpenGL 3.2 and More
Mark Kilgard
 
物理ベース?アート指向? ~尤もらしさと自由度を両立するレンズフレア表現
物理ベース?アート指向? ~尤もらしさと自由度を両立するレンズフレア表現物理ベース?アート指向? ~尤もらしさと自由度を両立するレンズフレア表現
物理ベース?アート指向? ~尤もらしさと自由度を両立するレンズフレア表現
Silicon Studio Corporation
 
なぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリングなぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリング
Satoshi Kodaira
 
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
Fixstars Corporation
 
Optimizing the Graphics Pipeline with Compute, GDC 2016
Optimizing the Graphics Pipeline with Compute, GDC 2016Optimizing the Graphics Pipeline with Compute, GDC 2016
Optimizing the Graphics Pipeline with Compute, GDC 2016
Graham Wihlidal
 
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
 
Open vSwitch Offload: Conntrack and the Upstream Kernel
Open vSwitch Offload: Conntrack and the Upstream KernelOpen vSwitch Offload: Conntrack and the Upstream Kernel
Open vSwitch Offload: Conntrack and the Upstream Kernel
Netronome
 
[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅
NAVER D2
 
DirectX 11 Rendering in Battlefield 3
DirectX 11 Rendering in Battlefield 3DirectX 11 Rendering in Battlefield 3
DirectX 11 Rendering in Battlefield 3
Electronic Arts / DICE
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
Fixstars Corporation
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
 
DockerCon 2017 - Cilium - Network and Application Security with BPF and XDP
DockerCon 2017 - Cilium - Network and Application Security with BPF and XDPDockerCon 2017 - Cilium - Network and Application Security with BPF and XDP
DockerCon 2017 - Cilium - Network and Application Security with BPF and XDP
Thomas Graf
 
並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js
Yoshiiro Ueno
 

What's hot (20)

Android/iOS端末におけるエッジ推論のチューニング
Android/iOS端末におけるエッジ推論のチューニングAndroid/iOS端末におけるエッジ推論のチューニング
Android/iOS端末におけるエッジ推論のチューニング
 
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
 
SDL2の紹介
SDL2の紹介SDL2の紹介
SDL2の紹介
 
Introduction to eBPF and XDP
Introduction to eBPF and XDPIntroduction to eBPF and XDP
Introduction to eBPF and XDP
 
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
 
Magnum IO GPUDirect Storage 最新情報
Magnum IO GPUDirect Storage 最新情報Magnum IO GPUDirect Storage 最新情報
Magnum IO GPUDirect Storage 最新情報
 
【Unite Tokyo 2018】『崩壊3rd』開発者が語るアニメ風レンダリングの極意
【Unite Tokyo 2018】『崩壊3rd』開発者が語るアニメ風レンダリングの極意【Unite Tokyo 2018】『崩壊3rd』開発者が語るアニメ風レンダリングの極意
【Unite Tokyo 2018】『崩壊3rd』開発者が語るアニメ風レンダリングの極意
 
OpenGL 3.2 and More
OpenGL 3.2 and MoreOpenGL 3.2 and More
OpenGL 3.2 and More
 
物理ベース?アート指向? ~尤もらしさと自由度を両立するレンズフレア表現
物理ベース?アート指向? ~尤もらしさと自由度を両立するレンズフレア表現物理ベース?アート指向? ~尤もらしさと自由度を両立するレンズフレア表現
物理ベース?アート指向? ~尤もらしさと自由度を両立するレンズフレア表現
 
なぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリングなぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリング
 
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
 
Optimizing the Graphics Pipeline with Compute, GDC 2016
Optimizing the Graphics Pipeline with Compute, GDC 2016Optimizing the Graphics Pipeline with Compute, GDC 2016
Optimizing the Graphics Pipeline with Compute, GDC 2016
 
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
 
Open vSwitch Offload: Conntrack and the Upstream Kernel
Open vSwitch Offload: Conntrack and the Upstream KernelOpen vSwitch Offload: Conntrack and the Upstream Kernel
Open vSwitch Offload: Conntrack and the Upstream Kernel
 
[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅
 
DirectX 11 Rendering in Battlefield 3
DirectX 11 Rendering in Battlefield 3DirectX 11 Rendering in Battlefield 3
DirectX 11 Rendering in Battlefield 3
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
 
DockerCon 2017 - Cilium - Network and Application Security with BPF and XDP
DockerCon 2017 - Cilium - Network and Application Security with BPF and XDPDockerCon 2017 - Cilium - Network and Application Security with BPF and XDP
DockerCon 2017 - Cilium - Network and Application Security with BPF and XDP
 
並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js
 

Similar to Duel of Two Libraries: Cairo & Skia

A Detailed Look at Cairo's OpenGL Spans Compositor Performance
A Detailed Look at Cairo's OpenGL Spans Compositor PerformanceA Detailed Look at Cairo's OpenGL Spans Compositor Performance
A Detailed Look at Cairo's OpenGL Spans Compositor Performance
Samsung Open Source Group
 
[E-Dev-Day 2014][14/16] Adding vector graphics support to EFL
[E-Dev-Day 2014][14/16] Adding vector graphics support to EFL[E-Dev-Day 2014][14/16] Adding vector graphics support to EFL
[E-Dev-Day 2014][14/16] Adding vector graphics support to EFL
EnlightenmentProject
 
How Servo Renders the Web
How Servo Renders the WebHow Servo Renders the Web
How Servo Renders the Web
Adenilson Cavalcanti
 
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
 
Star Ccm604 Features Final
Star Ccm604 Features FinalStar Ccm604 Features Final
Star Ccm604 Features Final
Ed Erb
 
Skia & Freetype - Android 2D Graphics Essentials
Skia & Freetype - Android 2D Graphics EssentialsSkia & Freetype - Android 2D Graphics Essentials
Skia & Freetype - Android 2D Graphics Essentials
Kyungmin Lee
 
Rich User Interaction with SVG
Rich User Interaction with SVGRich User Interaction with SVG
Rich User Interaction with SVG
stsire
 
Remote Graphical Rendering
Remote Graphical RenderingRemote Graphical Rendering
Remote Graphical Rendering
Joel Isaacson
 
Accelerating Spark MLlib and DataFrame with Vector Processor “SX-Aurora TSUBASA”
Accelerating Spark MLlib and DataFrame with Vector Processor “SX-Aurora TSUBASA”Accelerating Spark MLlib and DataFrame with Vector Processor “SX-Aurora TSUBASA”
Accelerating Spark MLlib and DataFrame with Vector Processor “SX-Aurora TSUBASA”
Databricks
 
Optimizing NN inference performance on Arm NEON and Vulkan
Optimizing NN inference performance on Arm NEON and VulkanOptimizing NN inference performance on Arm NEON and Vulkan
Optimizing NN inference performance on Arm NEON and Vulkan
ax inc.
 
Task 2
Task 2Task 2
Open Standards for ADAS: Andrew Richards, Codeplay, at AutoSens 2016
Open Standards for ADAS: Andrew Richards, Codeplay, at AutoSens 2016Open Standards for ADAS: Andrew Richards, Codeplay, at AutoSens 2016
Open Standards for ADAS: Andrew Richards, Codeplay, at AutoSens 2016
Andrew Richards
 
ED CONNOR RESUME 2013
ED CONNOR RESUME 2013ED CONNOR RESUME 2013
ED CONNOR RESUME 2013
Edward Connor
 
Keynote (Mike Muller) - Is There Anything New in Heterogeneous Computing - by...
Keynote (Mike Muller) - Is There Anything New in Heterogeneous Computing - by...Keynote (Mike Muller) - Is There Anything New in Heterogeneous Computing - by...
Keynote (Mike Muller) - Is There Anything New in Heterogeneous Computing - by...
AMD Developer Central
 
Introduction to 2D/3D Graphics
Introduction to 2D/3D GraphicsIntroduction to 2D/3D Graphics
Introduction to 2D/3D Graphics
Prabindh Sundareson
 
GPT and Graph Data Science to power your Knowledge Graph
GPT and Graph Data Science to power your Knowledge GraphGPT and Graph Data Science to power your Knowledge Graph
GPT and Graph Data Science to power your Knowledge Graph
Neo4j
 
How to Use OpenGL/ES on Native Activity
How to Use OpenGL/ES on Native ActivityHow to Use OpenGL/ES on Native Activity
EclipseConEU 2019 - Your cloud-based modeling workbench in 15 minutes with Ec...
EclipseConEU 2019 - Your cloud-based modeling workbench in 15 minutes with Ec...EclipseConEU 2019 - Your cloud-based modeling workbench in 15 minutes with Ec...
EclipseConEU 2019 - Your cloud-based modeling workbench in 15 minutes with Ec...
melbats
 
SDVIs and In-Situ Visualization on TACC's Stampede
SDVIs and In-Situ Visualization on TACC's StampedeSDVIs and In-Situ Visualization on TACC's Stampede
SDVIs and In-Situ Visualization on TACC's Stampede
Intel® Software
 
Photo Editing And Sharing Web Application With AI- Assisted Features
Photo Editing And Sharing Web Application With AI- Assisted FeaturesPhoto Editing And Sharing Web Application With AI- Assisted Features
Photo Editing And Sharing Web Application With AI- Assisted Features
IRJET Journal
 

Similar to Duel of Two Libraries: Cairo & Skia (20)

A Detailed Look at Cairo's OpenGL Spans Compositor Performance
A Detailed Look at Cairo's OpenGL Spans Compositor PerformanceA Detailed Look at Cairo's OpenGL Spans Compositor Performance
A Detailed Look at Cairo's OpenGL Spans Compositor Performance
 
[E-Dev-Day 2014][14/16] Adding vector graphics support to EFL
[E-Dev-Day 2014][14/16] Adding vector graphics support to EFL[E-Dev-Day 2014][14/16] Adding vector graphics support to EFL
[E-Dev-Day 2014][14/16] Adding vector graphics support to EFL
 
How Servo Renders the Web
How Servo Renders the WebHow Servo Renders the Web
How Servo Renders the Web
 
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
 
Star Ccm604 Features Final
Star Ccm604 Features FinalStar Ccm604 Features Final
Star Ccm604 Features Final
 
Skia & Freetype - Android 2D Graphics Essentials
Skia & Freetype - Android 2D Graphics EssentialsSkia & Freetype - Android 2D Graphics Essentials
Skia & Freetype - Android 2D Graphics Essentials
 
Rich User Interaction with SVG
Rich User Interaction with SVGRich User Interaction with SVG
Rich User Interaction with SVG
 
Remote Graphical Rendering
Remote Graphical RenderingRemote Graphical Rendering
Remote Graphical Rendering
 
Accelerating Spark MLlib and DataFrame with Vector Processor “SX-Aurora TSUBASA”
Accelerating Spark MLlib and DataFrame with Vector Processor “SX-Aurora TSUBASA”Accelerating Spark MLlib and DataFrame with Vector Processor “SX-Aurora TSUBASA”
Accelerating Spark MLlib and DataFrame with Vector Processor “SX-Aurora TSUBASA”
 
Optimizing NN inference performance on Arm NEON and Vulkan
Optimizing NN inference performance on Arm NEON and VulkanOptimizing NN inference performance on Arm NEON and Vulkan
Optimizing NN inference performance on Arm NEON and Vulkan
 
Task 2
Task 2Task 2
Task 2
 
Open Standards for ADAS: Andrew Richards, Codeplay, at AutoSens 2016
Open Standards for ADAS: Andrew Richards, Codeplay, at AutoSens 2016Open Standards for ADAS: Andrew Richards, Codeplay, at AutoSens 2016
Open Standards for ADAS: Andrew Richards, Codeplay, at AutoSens 2016
 
ED CONNOR RESUME 2013
ED CONNOR RESUME 2013ED CONNOR RESUME 2013
ED CONNOR RESUME 2013
 
Keynote (Mike Muller) - Is There Anything New in Heterogeneous Computing - by...
Keynote (Mike Muller) - Is There Anything New in Heterogeneous Computing - by...Keynote (Mike Muller) - Is There Anything New in Heterogeneous Computing - by...
Keynote (Mike Muller) - Is There Anything New in Heterogeneous Computing - by...
 
Introduction to 2D/3D Graphics
Introduction to 2D/3D GraphicsIntroduction to 2D/3D Graphics
Introduction to 2D/3D Graphics
 
GPT and Graph Data Science to power your Knowledge Graph
GPT and Graph Data Science to power your Knowledge GraphGPT and Graph Data Science to power your Knowledge Graph
GPT and Graph Data Science to power your Knowledge Graph
 
How to Use OpenGL/ES on Native Activity
How to Use OpenGL/ES on Native ActivityHow to Use OpenGL/ES on Native Activity
How to Use OpenGL/ES on Native Activity
 
EclipseConEU 2019 - Your cloud-based modeling workbench in 15 minutes with Ec...
EclipseConEU 2019 - Your cloud-based modeling workbench in 15 minutes with Ec...EclipseConEU 2019 - Your cloud-based modeling workbench in 15 minutes with Ec...
EclipseConEU 2019 - Your cloud-based modeling workbench in 15 minutes with Ec...
 
SDVIs and In-Situ Visualization on TACC's Stampede
SDVIs and In-Situ Visualization on TACC's StampedeSDVIs and In-Situ Visualization on TACC's Stampede
SDVIs and In-Situ Visualization on TACC's Stampede
 
Photo Editing And Sharing Web Application With AI- Assisted Features
Photo Editing And Sharing Web Application With AI- Assisted FeaturesPhoto Editing And Sharing Web Application With AI- Assisted Features
Photo Editing And Sharing Web Application With AI- Assisted Features
 

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
 
IoTivity for Automotive IoT Interoperability
IoTivity for Automotive IoT InteroperabilityIoTivity for Automotive IoT Interoperability
IoTivity for Automotive IoT Interoperability
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
 

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
 
IoTivity for Automotive IoT Interoperability
IoTivity for Automotive IoT InteroperabilityIoTivity for Automotive IoT Interoperability
IoTivity for Automotive IoT Interoperability
 
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
 

Recently uploaded

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
 
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
 
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
 
Integrating Kafka with MuleSoft 4 and usecase
Integrating Kafka with MuleSoft 4 and usecaseIntegrating Kafka with MuleSoft 4 and usecase
Integrating Kafka with MuleSoft 4 and usecase
shyamraj55
 
Mule Experience Hub and Release Channel with Java 17
Mule Experience Hub and Release Channel with Java 17Mule Experience Hub and Release Channel with Java 17
Mule Experience Hub and Release Channel with Java 17
Bhajan Mehta
 
Mastering OnlyFans Clone App Development: Key Strategies for Success
Mastering OnlyFans Clone App Development: Key Strategies for SuccessMastering OnlyFans Clone App Development: Key Strategies for Success
Mastering OnlyFans Clone App Development: Key Strategies for Success
David Wilson
 
Use Cases & Benefits of RPA in Manufacturing in 2024.pptx
Use Cases & Benefits of RPA in Manufacturing in 2024.pptxUse Cases & Benefits of RPA in Manufacturing in 2024.pptx
Use Cases & Benefits of RPA in Manufacturing in 2024.pptx
SynapseIndia
 
MAKE MONEY ONLINE Unlock Your Income Potential Today.pptx
MAKE MONEY ONLINE Unlock Your Income Potential Today.pptxMAKE MONEY ONLINE Unlock Your Income Potential Today.pptx
MAKE MONEY ONLINE Unlock Your Income Potential Today.pptx
janagijoythi
 
It's your unstructured data: How to get your GenAI app to production (and spe...
It's your unstructured data: How to get your GenAI app to production (and spe...It's your unstructured data: How to get your GenAI app to production (and spe...
It's your unstructured data: How to get your GenAI app to production (and spe...
Zilliz
 
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
 
Generative AI Reasoning Tech Talk - July 2024
Generative AI Reasoning Tech Talk - July 2024Generative AI Reasoning Tech Talk - July 2024
Generative AI Reasoning Tech Talk - July 2024
siddu769252
 
Improving Learning Content Efficiency with Reusable Learning Content
Improving Learning Content Efficiency with Reusable Learning ContentImproving Learning Content Efficiency with Reusable Learning Content
Improving Learning Content Efficiency with Reusable Learning Content
Enterprise Knowledge
 
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
 
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
 
Garbage In, Garbage Out: Why poor data curation is killing your AI models (an...
Garbage In, Garbage Out: Why poor data curation is killing your AI models (an...Garbage In, Garbage Out: Why poor data curation is killing your AI models (an...
Garbage In, Garbage Out: Why poor data curation is killing your AI models (an...
Zilliz
 
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
 
High Profile Girls call Service Pune 000XX00000 Provide Best And Top Girl Ser...
High Profile Girls call Service Pune 000XX00000 Provide Best And Top Girl Ser...High Profile Girls call Service Pune 000XX00000 Provide Best And Top Girl Ser...
High Profile Girls call Service Pune 000XX00000 Provide Best And Top Girl Ser...
bhumivarma35300
 
Semantic-Aware Code Model: Elevating the Future of Software Development
Semantic-Aware Code Model: Elevating the Future of Software DevelopmentSemantic-Aware Code Model: Elevating the Future of Software Development
Semantic-Aware Code Model: Elevating the Future of Software Development
Baishakhi Ray
 
leewayhertz.com-Generative AI tech stack Frameworks infrastructure models and...
leewayhertz.com-Generative AI tech stack Frameworks infrastructure models and...leewayhertz.com-Generative AI tech stack Frameworks infrastructure models and...
leewayhertz.com-Generative AI tech stack Frameworks infrastructure models and...
alexjohnson7307
 
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
 

Recently uploaded (20)

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
 
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
 
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
 
Integrating Kafka with MuleSoft 4 and usecase
Integrating Kafka with MuleSoft 4 and usecaseIntegrating Kafka with MuleSoft 4 and usecase
Integrating Kafka with MuleSoft 4 and usecase
 
Mule Experience Hub and Release Channel with Java 17
Mule Experience Hub and Release Channel with Java 17Mule Experience Hub and Release Channel with Java 17
Mule Experience Hub and Release Channel with Java 17
 
Mastering OnlyFans Clone App Development: Key Strategies for Success
Mastering OnlyFans Clone App Development: Key Strategies for SuccessMastering OnlyFans Clone App Development: Key Strategies for Success
Mastering OnlyFans Clone App Development: Key Strategies for Success
 
Use Cases & Benefits of RPA in Manufacturing in 2024.pptx
Use Cases & Benefits of RPA in Manufacturing in 2024.pptxUse Cases & Benefits of RPA in Manufacturing in 2024.pptx
Use Cases & Benefits of RPA in Manufacturing in 2024.pptx
 
MAKE MONEY ONLINE Unlock Your Income Potential Today.pptx
MAKE MONEY ONLINE Unlock Your Income Potential Today.pptxMAKE MONEY ONLINE Unlock Your Income Potential Today.pptx
MAKE MONEY ONLINE Unlock Your Income Potential Today.pptx
 
It's your unstructured data: How to get your GenAI app to production (and spe...
It's your unstructured data: How to get your GenAI app to production (and spe...It's your unstructured data: How to get your GenAI app to production (and spe...
It's your unstructured data: How to get your GenAI app to production (and spe...
 
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...
 
Generative AI Reasoning Tech Talk - July 2024
Generative AI Reasoning Tech Talk - July 2024Generative AI Reasoning Tech Talk - July 2024
Generative AI Reasoning Tech Talk - July 2024
 
Improving Learning Content Efficiency with Reusable Learning Content
Improving Learning Content Efficiency with Reusable Learning ContentImproving Learning Content Efficiency with Reusable Learning Content
Improving Learning Content Efficiency with Reusable Learning Content
 
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...
 
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
 
Garbage In, Garbage Out: Why poor data curation is killing your AI models (an...
Garbage In, Garbage Out: Why poor data curation is killing your AI models (an...Garbage In, Garbage Out: Why poor data curation is killing your AI models (an...
Garbage In, Garbage Out: Why poor data curation is killing your AI models (an...
 
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
 
High Profile Girls call Service Pune 000XX00000 Provide Best And Top Girl Ser...
High Profile Girls call Service Pune 000XX00000 Provide Best And Top Girl Ser...High Profile Girls call Service Pune 000XX00000 Provide Best And Top Girl Ser...
High Profile Girls call Service Pune 000XX00000 Provide Best And Top Girl Ser...
 
Semantic-Aware Code Model: Elevating the Future of Software Development
Semantic-Aware Code Model: Elevating the Future of Software DevelopmentSemantic-Aware Code Model: Elevating the Future of Software Development
Semantic-Aware Code Model: Elevating the Future of Software Development
 
leewayhertz.com-Generative AI tech stack Frameworks infrastructure models and...
leewayhertz.com-Generative AI tech stack Frameworks infrastructure models and...leewayhertz.com-Generative AI tech stack Frameworks infrastructure models and...
leewayhertz.com-Generative AI tech stack Frameworks infrastructure models and...
 
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
 

Duel of Two Libraries: Cairo & Skia

  • 1. A Duel of Two Libraries Cairo vs. Skia Bryce Harrington – Senior Open Source Developer Samsung Research America (Silicon Valley) bryce@osg.samsung.com 1 © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 2. 2 What is Vector Graphics? © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 3. 3 Vector Graphics © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 4. 4 Vector Graphics © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. Basic Tutorial From Inkscape inkscape.org
  • 5. 5 Vector Graphics © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. Basic Tutorial From Inkscape inkscape.org
  • 6. 6 Vector Graphics © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. Shapes Tutorial From Inkscape inkscape.org
  • 7. 7 Vector Graphics © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. Shapes Tutorial From Inkscape inkscape.org
  • 8. 8 Vector Graphics © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. Fibonacci Little Owl By ark4n deviantart.com
  • 9. 9 Vector Graphics © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. openclipart.org public domain vector graphics
  • 10. 10 Vector Graphics © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. Shapes Tutorial From Inkscape inkscape.org
  • 11. 11 Vector Graphics Snooker By Maddrum deviantart.co m © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 12. 12 Vector Graphics © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. Iron Man by mrmanders deviantart.com
  • 13. 13 Vector Graphics Audi TT by JumpOrDie deviantart.co m © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 14. 14 What is Cairo? © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 15. 15 What is Cairo? 2D pen-based drawing model For both display and print Includes backends for acceleration and for vector output formats © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 16. 16 Overview Cairoglyphics vers 2.0 This diagram works from left to right. It shows the drawing of two shapes which each go to the page one after the other. All the commands to do this come from a toolbox called the Context. On the next page (Summary) I list many of the commands that you can use. Transforms Clip The star will be drawn on top of the rectangle. 1 2 Create Path Create Path Source © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. Source The Page Diagram (c) 2007 Donn Ingle ­donn. ingle@gmail.com. Kubuntu 7.10 & Inkscape Create Mask Create Mask This rectangle will be drawn first, shaped by the clip. The clip only lasts for this one operation. Before you start drawing, you can set up a rotation and scale just like in a vector program like Inkscape. The Source is like a picture you slip under the Path. It is revealed by the masking commands just like scratching away the surface to see what's underneath. See Sources, Surfaces & Patterns diagram for details. hhtttptp:/://w/wwwww.t.otortratalll.ln.neet/tm/muu/w/wikiki/iC/CaairioroTTuutotoriraial l
  • 17. 17 Cairo Backends Format backends  ps  pdf  svg Platform backends  image  xlib  xcb  ccaaiirroo--ggll  quartz  win32  beos  skia (‽) © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 18. 18 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  gglleessvv33 ((OOppeennGGLL EESS 33..00)) -- EEGGLL  vg (OpenVG) - EGL, GLX  cogl - experimental © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 19. 19 Installing Cairo Distro-supplied Cairo usually doesn't include GL support Cairo Trees: Upstream: http://cgit.freedesk.top.org/cairo CairoGles fork: https://github.com/SRA-SiliconValley/cairogles PPAs Coming Soon! © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 20. 20 What is Skia? © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 21. 21 What is Skia? Skia Graphics Engine Greek for “sshhaaddooww” Written in C++ Nov 1, 2005 - Google buys Skia Inc. Based in Chapel Hill, North Carolina 5 people Releases Skia Graphics Engine as Open Source Originally used for Android's WebKit, later added to Chrome web browser, Chrome OS, Chromium OS, and Android OS © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 22. 22 Skia features Skia is a 2D graphic library for drawing Text, Geometries, and Images. 3x3 matrices w/ perspective antialiasing, transparency, filters, subpixel text shaders, transfer modes, maskfilters, patheffects reads SVG, PS, PDF, Flash and translates into Skia API calls Device backends for Skia currently include: Raster, OpenGL, PDF, XPS Picture (for recording and then playing back into another Canvas) Performance optimizations Copy-on-write for images and other data types Extensive use of the stack to avoid memory fragmentation Thread-safety to enable parallelization © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 23. 23 Installing Skia Skia trees: https://skia.googlesource.com/skia https://github.com/Samsung/skia • Snapshot dev/m36_1985 Ubuntu PPA: https://launchpad.net/~bryce/+archive/ubuntu/skia/ RPM build spec: Only tested on Tizen See packaging/skia.spec © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 24. 24 Cairo vs. Skia! © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 25. 25 Cairo and Skia Differences Cairo C Standard build system (autoconf/automake) Drawing context is in cairo_t Packages available for all major distributions API/ABI Stable Being considered as an ISO Standard Skia © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. C++ Custom build system (ninja) Context is split • SkCanvas - drawing • SkPaint - style Not packaged Not API/ABI Stable PPrroommiisseess bbeetttteerr ppeerrffoorrmmaannccee
  • 26. 26 Cairo/Skia Benchmarking “CaskBench” © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 27. 27 What is caskbench? © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co. ?
  • 28. 28 What is Caskbench? (Yet another?) testsuite with collection of tests Provides equivalent Cairo and Skia test implementations Establishes comparable rendering environments Ensures consistent measurements Selectable rendering systems Image, EGL, and GLX ((ccoommiinngg ssoooonn)) Includes a Shapes and Styles Library Circles, Rectangles, Triangles, Stars, Rounded Rectangles Solid, Linear/Radial Gradients, Image Pattern Stroke Dash, Cap, and Join Styles Collaboration with OSG, ASWP/ABT and SRI-B. (Thanks!) © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 29. 29 How to use Caskbench $ cmake . $ make $ ./src/caskbench cairo­bubbles 64 PASS 64 0.005676 0.006731 skia­bubbles 64 PASS 64 0.000987 0.001234 81.66% cairo­fill 64 PASS 64 0.000789 0.000851 ... $ ./src/caskbench -t egl $ ./src/caskbench -t egl --iterations 100 --size 42 © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 30. 30 Demo $ src/caskbench ­w 1024 ­h 800 ­i 8 ­s 500 © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 31. 31 Caskbench options Usage: caskbench [ARG...] ­­enable­egl­sample­buffers Sets EGL_SAMPLES=4 and EGL_SAMPLE_BUFFERS=1 in EGL attribute list ­n, ­­dry­run Just list the selected test case names without executing ­i, ­­iterations= INT The number of times each test case should be run ­l, ­­list­surfaces List the available surfaces linked in this executable ­o, ­­output­file= STRING Filename to write JSON output to ­t, ­­surface­type= STRING Type of graphics surface to use (see ­­list­surfaces) ­s, ­­test­size= INT Controls complexity of the tests, such as number of drawn elements ­V, ­­version Display the program version ­S, ­­shape= STRING Controls which shape to be drawn ­X, ­­x­position= INT The X location to draw the object ­Y, ­­y­position= INT The Y location to draw the object ­W, ­­width= INT Width of the shape bject ­H, ­­height= INT Height of the shape object ­f, ­­fill­type= STRING Limit fill type of objects to solid, gradient, image pattern type ­g, ­­animation= INT Controls the kinematics of the objects drawn ­I, ­­image­path= STRING Path to a stock image for use in clipping, patterns, etc. ­w, ­­stroke­width= INT Limit stroke with to specified width ­m, ­­multi­shapes= INT Randomize shape types used in tests ­C, ­­cap­style= INT Limit cap style to specified cap style ID ­J, ­­join­style= INT Limit join style to specified cap style ID ­D, ­­dash­style= INT Limit dash style to specified cap style ID Help options: ­?, ­­help Show this help message ­­usage Display brief usage message © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 32. 32 What do test cases look like? static int max_dim; Cairo Skia int ca_setup_bubbles(caskbench_context_t *ctx) { max_dim = MIN(ctx->canvas_width, ctx->canvas_height)/2; return 1; } void ca_teardown_bubbles(void) { } int ca_test_bubbles(caskbench_context_t *ctx) { int i, x, y, r; cairo_t *cr = ctx->cairo_cr; for (i=0; i<ctx->size; i++) { cairoRandomizeColor(ctx); r = ((double)max_dim*rand())/RAND_MAX + 1; x = (0.5*(double)ctx->canvas_width*rand())/RAND_MAX; y = (0.5*(double)ctx->canvas_height*rand())/RAND_MAX; cairo_arc (cr, x, y, r, 0, 2*M_PI); cairo_fill (cr); } return 1; } static int max_dim; int sk_setup_bubbles(caskbench_context_t *ctx) { max_dim = MIN(ctx->canvas_width, ctx->canvas_height)/2; return 1; } void sk_teardown_bubbles(void) { } int sk_test_bubbles(caskbench_context_t *ctx) { int i, x, y, r; for (i=0; i<ctx->size; i++) { skiaRandomizePaintColor(ctx); r = ((double)max_dim*rand())/RAND_MAX + 1; x = (0.5*(double)ctx->canvas_width*rand())/RAND_MAX; y = (0.5*(double)ctx->canvas_height*rand())/RAND_MAX; ctx->skia_canvas->drawCircle(x, y, r, *ctx->skia_paint); } return 1; } © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 33. 33 Cairo Bubbles Test © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 34. 34 Skia Bubbles Test © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 35. 35 Adding New Backends Backends other than egl, glx and image are welcome Tasks for adding another backend: cairo-[backend].cpp - surface creation/update/destruction skia-[backend].cpp - surface creation/update/destruction [backend].cpp - shared code for both of the above caskbench-context.cpp - register your backend caskbench.cpp - add command line options you need © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 36. 36 Add Another Drawing Library More drawing libraries beyond Cairo and Skia also welcome Bit more involved, though: [drawlib]-[backend].cpp - surface creation/update/deletion [drawlib]-shapes.* - implement shape drawing [drawlib]-utils.cpp - misc. routines [drawlib]-tests/*.cpp - reimplement all tests caskbench_context.cpp - register your drawing library caskbench.cpp - add command line options, etc. © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 37. 37 Results (So far...) © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 38. 38 Performance results (PC) $ caskbench ­i 100 ­s 256 ­t egl cpu: Intel(R) Core(TM) i5-2405S CPU @ 2.50GHz platform: x86_64 GNU/Linux distribution: Ubuntu Trusty Tahr (development branch) linux kernel: 3.13 xserver: 1.15 mesa: OpenGL version string: 3.0 Mesa 10.1.0 video: snb-gt2 (8086:0112) sandybridge xserver-xorg-video-intel © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 39. 39 EGL Performance results (EGL, PC) test case ca sk vline 485 508 4.48% hline 482 499 3.41% test case ca sk line 292 510 42.79% multi_line 430 646 33.46% © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 40. 40 Performance results (EGL, PC) test ca sk cubic 107 402 73.37% quadratic 123 416 70.47% test ca sk curves 11 76 85.44% © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 41. 41 Performance results (EGL, PC) test ca sk circle 107 169 36.98% rect 243 81 ­201.03% test ca sk roundrect 109 232 53.11% © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 42. 42 Performance results (EGL, PC) test ca sk star(!) 201 169 ­19.06% mulshape 139 197 29.57% test ca sk animation 123 375 67.13% © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 43. 43 Performance results (EGL, PC) test ca sk fill 166 240 30.54% bubbles 169 45 ­274.75% test ca sk lin_grad 441 63 ­601.84% rad_grad 455 62 ­631.12% © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 44. 44 Performance results (EGL, PC) test ca sk mask 433 876 50.53% clip(!) 1689 23 ­7336.62% test ca sk paint 364 6 ­5811.96% transform 8 2 ­258.79% © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 45. 45 Performance results (EGL, PC) test ca sk text ! 767 5 ­15009.39% text_glyphs ! 708 41 ­1614.53% © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 46. 46 Findings Skia has better performance than Cairo for EGL+MSAA 50% faster on average for basic drawing ops (both on PC and M0) Slower than Cairo in certain cases Skia can be trickier than Cairo to get right Rendering discrepancies More sensitive to settings • Polygons with anti-aliasing segfaults in debug builds (mesa 8 only) • Rounded rects and stroke width > radius • Stroke with dashes (fStencilbits<2) • fSampleCount!=4 causes incorrect output • … ? © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 47. 47 Ongoing Work Skia MSAA Oval/Circle fill and stroke optimizations Batch and route GrContext::drawPath() for rects and ellipses Curved strokes – GrShapePathRenderer SkDeferredCanvas improvements? Cairo Gles3 support Gaussian blur GL MSAA compositor & optimizations Drop shadow, inset shadow; shadow caching Image downscaling Perspective transformation © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 48. 48 Thank you https://github.com/SRA-SiliconValley/cairogles Samsung's cairo branch with gles3, etc. https://github.com/Samsung Samsung's branches of skia Caskbench © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.
  • 49. 49 Thank you. © 2014 SAMSUNG Open Source Group – Silicon Valley Electronics Co.