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

Contenu connexe

Tendances

いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例Fixstars Corporation
 
[TGDF 2019] Mali GPU Architecture and Mobile Studio
[TGDF 2019] Mali GPU Architecture and Mobile Studio[TGDF 2019] Mali GPU Architecture and Mobile Studio
[TGDF 2019] Mali GPU Architecture and Mobile StudioOwen Wu
 
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)NTT DATA Technology & Innovation
 
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)NTT DATA Technology & Innovation
 
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門Tadahiro Ishisaka
 
Holy smoke! Faster Particle Rendering using Direct Compute by Gareth Thomas
Holy smoke! Faster Particle Rendering using Direct Compute by Gareth ThomasHoly smoke! Faster Particle Rendering using Direct Compute by Gareth Thomas
Holy smoke! Faster Particle Rendering using Direct Compute by Gareth ThomasAMD Developer Central
 
eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動Kohei Tokunaga
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンAkihiko Horiuchi
 
Low-level Shader Optimization for Next-Gen and DX11 by Emil Persson
Low-level Shader Optimization for Next-Gen and DX11 by Emil PerssonLow-level Shader Optimization for Next-Gen and DX11 by Emil Persson
Low-level Shader Optimization for Next-Gen and DX11 by Emil PerssonAMD Developer Central
 
[KubeCon NA 2020] containerd: Rootless Containers 2020
[KubeCon NA 2020] containerd: Rootless Containers 2020[KubeCon NA 2020] containerd: Rootless Containers 2020
[KubeCon NA 2020] containerd: Rootless Containers 2020Akihiro Suda
 
20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdfKazuaki Ishizaki
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたMITSUNARI Shigeo
 
Approaching zero driver overhead
Approaching zero driver overheadApproaching zero driver overhead
Approaching zero driver overheadCass Everitt
 
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみるDSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみるAtsushi KOMIYA
 
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2tamtam180
 
[Cloud OnAir] Google Cloud における RDBMS の運用パターン 2020年11月19日 放送
[Cloud OnAir] Google Cloud における RDBMS の運用パターン 2020年11月19日 放送[Cloud OnAir] Google Cloud における RDBMS の運用パターン 2020年11月19日 放送
[Cloud OnAir] Google Cloud における RDBMS の運用パターン 2020年11月19日 放送Google Cloud Platform - Japan
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Masahito Zembutsu
 
Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14
Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14
Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14AMD Developer Central
 
Sw技術者に送るfpga入門
Sw技術者に送るfpga入門Sw技術者に送るfpga入門
Sw技術者に送るfpga入門直久 住川
 

Tendances (20)

いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例
 
[TGDF 2019] Mali GPU Architecture and Mobile Studio
[TGDF 2019] Mali GPU Architecture and Mobile Studio[TGDF 2019] Mali GPU Architecture and Mobile Studio
[TGDF 2019] Mali GPU Architecture and Mobile Studio
 
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
 
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
 
Gstreamer Basics
Gstreamer BasicsGstreamer Basics
Gstreamer Basics
 
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
 
Holy smoke! Faster Particle Rendering using Direct Compute by Gareth Thomas
Holy smoke! Faster Particle Rendering using Direct Compute by Gareth ThomasHoly smoke! Faster Particle Rendering using Direct Compute by Gareth Thomas
Holy smoke! Faster Particle Rendering using Direct Compute by Gareth Thomas
 
eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
 
Low-level Shader Optimization for Next-Gen and DX11 by Emil Persson
Low-level Shader Optimization for Next-Gen and DX11 by Emil PerssonLow-level Shader Optimization for Next-Gen and DX11 by Emil Persson
Low-level Shader Optimization for Next-Gen and DX11 by Emil Persson
 
[KubeCon NA 2020] containerd: Rootless Containers 2020
[KubeCon NA 2020] containerd: Rootless Containers 2020[KubeCon NA 2020] containerd: Rootless Containers 2020
[KubeCon NA 2020] containerd: Rootless Containers 2020
 
20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
 
Approaching zero driver overhead
Approaching zero driver overheadApproaching zero driver overhead
Approaching zero driver overhead
 
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみるDSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
 
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
 
[Cloud OnAir] Google Cloud における RDBMS の運用パターン 2020年11月19日 放送
[Cloud OnAir] Google Cloud における RDBMS の運用パターン 2020年11月19日 放送[Cloud OnAir] Google Cloud における RDBMS の運用パターン 2020年11月19日 放送
[Cloud OnAir] Google Cloud における RDBMS の運用パターン 2020年11月19日 放送
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 
Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14
Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14
Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14
 
Sw技術者に送るfpga入門
Sw技術者に送るfpga入門Sw技術者に送るfpga入門
Sw技術者に送るfpga入門
 

Similaire à 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 PerformanceSamsung 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 EFLEnlightenmentProject
 
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 @20141008Ryan Chou
 
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 DesktopSamsung Open Source Group
 
Star Ccm604 Features Final
Star Ccm604 Features FinalStar Ccm604 Features Final
Star Ccm604 Features FinalEd Erb
 
Skia & Freetype - Android 2D Graphics Essentials
Skia & Freetype - Android 2D Graphics EssentialsSkia & Freetype - Android 2D Graphics Essentials
Skia & Freetype - Android 2D Graphics EssentialsKyungmin Lee
 
Rich User Interaction with SVG
Rich User Interaction with SVGRich User Interaction with SVG
Rich User Interaction with SVGstsire
 
Remote Graphical Rendering
Remote Graphical RenderingRemote Graphical Rendering
Remote Graphical RenderingJoel 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 Vulkanax inc.
 
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 2016Andrew Richards
 
ED CONNOR RESUME 2013
ED CONNOR RESUME 2013ED CONNOR RESUME 2013
ED CONNOR RESUME 2013Edward 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
 
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 GraphNeo4j
 
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 StampedeIntel® Software
 

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

Plus de 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
 
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 USBSamsung 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 DevicesSamsung 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 BeyondSamsung 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 tutorialSamsung 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 StrategySamsung Open Source Group
 
IoTivity for Automotive IoT Interoperability
IoTivity for Automotive IoT InteroperabilityIoTivity for Automotive IoT Interoperability
IoTivity for Automotive IoT InteroperabilitySamsung 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 DeviceSamsung 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 IoTivitySamsung 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 LinuxSamsung 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/LinuxSamsung 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 ThingsSamsung 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
 
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
 

Dernier

My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfSeasiaInfotech2
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 

Dernier (20)

My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdf
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 

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.