Taking a subset of a bitmap is effectively free - no pixels are copied or memory is allocated. This allows Skia to offer an API that typically operates on entire bitmaps; clients who want to operate on a subset of a bitmap can use the following pattern, here being used to magnify a portion of an image with drawBitmapNine():
SkBitmap subset; bitmap.extractSubset(&subset, rect); canvas->drawBitmapNine(subset, ...);
.skp
file on a web page in Chromium.--no-sandbox --enable-gpu-benchmarking
chrome.gpuBenchmarking.printToSkPicture('/tmp')
This returns "undefined" on success.Open the resulting file in the Skia Debugger, rasterize it with dm
, or use Skia's SampleApp
to view it:
bin/sync-and-gyp ninja -C out/Release debugger dm SampleApp out/Release/debugger /tmp/layer_0.skp & out/Release/dm --src skp --skps /tmp/layer_0.skp -w /tmp \ --config 8888 gpu pdf --verbose ls -l /tmp/*/skp/layer_0.skp.* out/Release/SampleApp --picture /tmp/layer_0.skp # On MacOS, SampleApp is a bundle: open out/Release/SampleApp.app --args --picture /tmp/layer_0.skp
There are two ways Skia can take advantage of HW.
Since all drawing calls go through SkCanvas, those calls can be redirected to a different graphics API. SkGLCanvas has been written to direct its drawing calls to OpenGL. See src/gl/
There are sets of bottleneck routines inside the blits of Skia that can be replace on a platform in order to take advantage of specific CPU features. One such example is the NEON SIMD instructions on ARM v7 devices. See src/opts/
Skia has a built-in font cache, but it does not know how to actual render font files like TrueType? into its cache. For that it relies on the platform to supply an instance of SkScalerContext?. This is Skia's abstract interface for communicating with a font scaler engine. In src/ports you can see support files for FreeType?, Mac OS X, and Windows GDI font engines. Other font engines can easily be supported in a like manner.