blob: 19d7203812c4090cbcbfd9301232a6eb8f48fe38 [file] [log] [blame]
Skia Update
Skia : Overview
- portable 2D graphics engine
- src : geometry, images, text
- attr: shaders, filters, antialiasing, blending
- dst : raster, gpu, pdf, picture
Skia : Porting
- C++ and some SIMD assembly
- Fonts : CoreText, FreeType, GDI, DirectWrite
- Threads : wrappers for native apis
- Memory : wrappers for [new, malloc, discardable]
Skia : Clients
- Blink : under the GraphicsContext hood
- Chrome : ui/gfx and compositor
- Android framework
- third parties : e.g. Mozilla
- sites.google.com/site/skiadocs
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
- 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
- FilterLevel : none, low, medium (mipmaps), high
- SkPicture for caching SVG
- SkPicture + saveLayer() for masks
-- PathOps for resolving complex paths
- SkPictureShader for device-independent patterns
Skia In Blink : Recording
- GraphicsContext usuaually 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
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 field fonts
Skia : Roadmap
Skia In Blink : Roadmap
- GPU performance
-- extended OpenGL features (e.g. geometry shaders)
-- reordering for increased batching
-- support for new low-level OpenGL APIs
- Cross process support
-- immediate mode ala SkGPipe
-- serialize pictures
Skia API Roadmap
- Direct support for sRGB
- Stable C API / ABI
-- bindings for JS, Go, Python, Lua
- Robust file format
Demo