|  | Skia Update | 
|  |  | 
|  | Skia : Access | 
|  | - https://skia.org | 
|  | - https://skia.googlesource.com/skia | 
|  |  | 
|  | Skia : Overview | 
|  | - portable graphics engine | 
|  | - 2D transformations + perspective | 
|  | - primitives: text, geometry, images | 
|  | - effects: shaders, filters, antialiasing, blending | 
|  |  | 
|  | Skia : Porting | 
|  | - C++ and some SIMD assembly | 
|  | - Fonts : CoreText, FreeType, GDI, DirectWrite | 
|  | - Threads : wrappers for native apis | 
|  | - Memory : wrappers for [new, malloc, discardable] | 
|  |  | 
|  | Skia : Backends | 
|  | - Surface | 
|  | -- raster : ARGB, RGB16, A8 in software | 
|  | -- gpu : transcribe to OpenGL | 
|  | - Document | 
|  | -- transcribe to PDF or XPS | 
|  | - Record and Playback | 
|  | -- Picture | 
|  | -- Pipe | 
|  |  | 
|  | Skia : Clients | 
|  | - Blink : under the GraphicsContext hood | 
|  | - Chrome : ui/gfx and compositor | 
|  | - Android : framework | 
|  | - third parties : e.g. Mozilla | 
|  |  | 
|  | Skia In Blink | 
|  |  | 
|  | Skia In Blink : Fonts | 
|  | - SkTypeface and SkFontMgr : platform agnostic | 
|  | - Runtime switch between GDI and DirectWrite | 
|  | - SkTextBlob to encapsulate runs of text | 
|  | - Push LCD decision-making out of Blink | 
|  |  | 
|  | Skia In Blink : Record-Time-Rasterization | 
|  | - What? : direct rendering during “Paint” pass | 
|  | -- Image scaling, filters | 
|  | -- SVG patterns, masks | 
|  | - Problematic in modern Blink | 
|  | -- CTM not always known/knowable | 
|  | -- Rendering backend not always known (gpu or cpu) | 
|  | -- Rasterization takes (too much) time | 
|  |  | 
|  | Skia In Blink : RTR response | 
|  | - SkImageFilter w/ CPU and GPU implementations | 
|  | - Bitmap scaling : bilerp, mipmaps, fancy | 
|  | - SkPicture for caching SVG | 
|  | - SkPicture + saveLayer() for masks | 
|  | -- PathOps for resolving complex paths | 
|  | - SkPictureShader for device-independent patterns | 
|  |  | 
|  | Skia In Blink : Recording | 
|  | - GraphicsContext (now) backed by SkPicture | 
|  | -- draw commands are recorded for later playback | 
|  | -- all parameters must be copied or (safely) ref'd | 
|  | -- may record more than is currently visible | 
|  | - Resulting picture may be replayed multiple times | 
|  | -- from different thread(s) | 
|  |  | 
|  | Skia In Blink : Recording response | 
|  | - New implementation | 
|  | - Optimized for recording speed | 
|  | -- shallow copies whenever possible | 
|  | -- rearchitect all Skia effects to be immutable | 
|  | - Reentrant-safe for playback in multiple threads | 
|  | -- also affected effect subclasses | 
|  |  | 
|  | Skia In Blink : Playback | 
|  | - Separate pass for optimizations (optional) | 
|  | -- peep-holes rewrites | 
|  | -- compute bounding-box hierarchy for faster tiling | 
|  | -- can be done outside of Blink thread | 
|  | - GPU optimizations | 
|  | -- layer "hoisting" | 
|  | -- distance fields : fonts and concave paths | 
|  |  | 
|  | Skia In Blink : multi-picture-draw | 
|  | - mpd(canvas[], picture[], matrix[], paint[]) | 
|  | - Requires independent canvas objects | 
|  | -- all other parameters can be shared | 
|  | -- draw order is unspecified | 
|  | - Examples | 
|  | -- 1 picture drawing to multiple tiles (canvases) | 
|  | -- multiple pictures each drawing to its own layer | 
|  |  | 
|  | Skia In Blink : MPD optimizations* | 
|  | - GPU | 
|  | -- "layer hoisting" to reduce rendertarget switching | 
|  | -- layer atlasing (also applies to imagefilters) | 
|  | -- pre-uploading of textures | 
|  | -- atlas yuv (from jpeg) to convert on gpu | 
|  | - CPU | 
|  | -- parallel execution using thread pool | 
|  | -- pre-decoding of images based on visibility | 
|  |  | 
|  | Skia : Roadmap | 
|  |  | 
|  | Skia : Roadmap - performance | 
|  | - GPU | 
|  | -- extended OpenGL features (e.g. geometry shaders) | 
|  | -- reordering for increased batching | 
|  | -- support for new low-level OpenGL APIs | 
|  | - CPU | 
|  | -- SIMD applied to floats | 
|  | -- smarter culling in pictures | 
|  |  | 
|  | Skia : Roadmap - API | 
|  | - Cross process support | 
|  | - Direct support for sRGB | 
|  | - Robust file format | 
|  | - Support PDF viewing | 
|  | - Stable C ABI | 
|  | -- bindings for JS, Go, Python, Lua | 
|  |  | 
|  | Demo |