skia2/bench
Mike Reed 98bfcc7ff3 Extend SkCanvas matrix stack to be 4x4, but with (basically) the same public API.
Devices receive the 4x4, but by default they simply downsample it to SkMatrix.

New SkM44 matrix for the impl. It differs from SkMatrix44 in a few ways
- no tracking of "type"
- faster for concat, as it does not use doubles for intermediates
- much simpler API

There are some low-bit differences in some gms, so adding a flag for clients to
stage this change. (due to faster but lower-precision in SkM44::concat)

Performance: running canvas_matrix bench

3x3 version:

    167.93  	canvas_matrix_3x3	8888
    209.97  	canvas_matrix_2x3	8888
    174.87  	canvas_matrix_scale	8888
    135.30  	canvas_matrix_trans	8888

4x4 version:

    116.59  	canvas_matrix_3x3	8888
    105.40  	canvas_matrix_2x3	8888
    159.83 ?	canvas_matrix_scale	8888
    113.47  	canvas_matrix_trans	8888

Why faster?
- not tracking matrix_type helps a lot it seems
- faster full concat (no doubles)

Before adding the specialized preConcats...

    318.11 ?	canvas_matrix_3x3	8888
    339.38  	canvas_matrix_2x3	8888
    383.28  	canvas_matrix_scale	8888
    251.67  	canvas_matrix_trans	8888

Change-Id: I68eac942919fa5418081e789f31710a1e2a752da
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/262056
Reviewed-by: Brian Salomon <bsalomon@google.com>
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Mike Reed <reed@google.com>
2020-01-07 18:23:04 +00:00
..
AAClipBench.cpp Revert "Revert "switch to new filltype for SkPath"" 2019-11-26 17:43:14 +00:00
AlternatingColorPatternBench.cpp more rect api simplifications 2019-08-25 10:12:57 +00:00
AndroidCodecBench.cpp Reland "Reland "SkSurface asynchronous read APIs allow client to extend pixel lifetime"" 2019-10-03 19:14:22 +00:00
AndroidCodecBench.h rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
BenchLogger.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
BenchLogger.h rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
Benchmark.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
Benchmark.h add unit scaling mode to benchmark/nanobench 2019-06-03 14:53:29 +00:00
BezierBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
BigPathBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
BitmapBench.cpp more rect api simplifications 2019-08-25 10:12:57 +00:00
BitmapRectBench.cpp more rect api simplifications 2019-08-25 10:12:57 +00:00
BitmapRegionDecoderBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
BitmapRegionDecoderBench.h rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
BlendmodeBench.cpp Use SkTextEncoding enum instead of macros. 2019-05-07 20:54:16 +00:00
BlurBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
BlurImageFilterBench.cpp Update benchmarks to use new filter factories 2019-08-05 16:41:25 +00:00
BlurRectBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
BlurRectsBench.cpp Revert "Reland "Revert "Use flat version of path-direction enum""" 2019-11-22 19:09:54 +00:00
BulkRectBench.cpp Reland "Add variety of bulk API benchmarks" 2019-10-28 18:48:32 +00:00
ChartBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
check_bench_regressions.py
ChecksumBench.cpp Add SkUNREACHABLE to definition of SK_ABORT. 2019-08-09 20:43:39 +00:00
ChromeBench.cpp more rect api simplifications 2019-08-25 10:12:57 +00:00
ClearBench.cpp Track if we need stencil on GrRenderTargetContext 2019-06-27 20:29:03 +00:00
ClipMaskBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
ClipStrategyBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
CmapBench.cpp Use SkTextEncoding enum instead of macros. 2019-05-07 20:54:16 +00:00
CodecBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
CodecBench.h rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
CodecBenchPriv.h rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
ColorFilterBench.cpp Move SkRuntimeEffect.h to include/effects 2020-01-02 17:37:46 +00:00
ColorPrivBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
CompositingImagesBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
ControlBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
CoverageBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
CTConvertBench.cpp Add a colortype conversion bench 2019-08-26 15:41:54 +00:00
CubicKLMBench.cpp Move GrPathUtils, GrRect, and GrShape into src/gpu/geometry/ 2019-06-04 13:36:05 +00:00
CubicMapBench.cpp create outer forloop to support loops=-1 2019-07-09 14:41:07 +00:00
DashBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
DDLRecorderBench.cpp Add bench for SkDDLRecorder detach 2019-09-12 17:09:08 +00:00
DisplacementBench.cpp Update benchmarks to use new filter factories 2019-08-05 16:41:25 +00:00
DrawBitmapAABench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
DrawLatticeBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
EncodeBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
FontCacheBench.cpp Use SkTextEncoding enum instead of macros. 2019-05-07 20:54:16 +00:00
FSRectBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
GameBench.cpp starter bench for canvas matrix operations 2019-12-30 15:48:26 +00:00
GeometryBench.cpp Revert "Reland "Revert "Use flat version of path-direction enum""" 2019-11-22 19:09:54 +00:00
GMBench.cpp Clean up some gm factory use. 2019-08-13 15:57:37 +00:00
GMBench.h Clean up some gm factory use. 2019-08-13 15:57:37 +00:00
GradientBench.cpp Update benchmarks to use new filter factories 2019-08-05 16:41:25 +00:00
GrCCFillGeometryBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
GrMemoryPoolBench.cpp Make Gr[Op]MemoryPool allocate itself into its initial block. 2019-12-12 20:33:40 +00:00
GrMipMapBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
GrResourceCacheBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
gUniqueGlyphIDs.h Make header files self-sufficient 2017-02-10 01:19:52 +00:00
HairlinePathBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
HardStopGradientBench_ScaleNumColors.cpp Update benchmarks to use new filter factories 2019-08-05 16:41:25 +00:00
HardStopGradientBench_ScaleNumHardStops.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
HardStopGradientBench_SpecialHardStops.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
ImageBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
ImageCacheBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
ImageCacheBudgetBench.cpp Remove maxCount resource cache limit 2019-09-03 14:59:51 +00:00
ImageCycleBench.cpp Expose the owning surface to a canvas? 2019-11-15 21:48:32 +00:00
ImageFilterCollapse.cpp Update benchmarks to use new filter factories 2019-08-05 16:41:25 +00:00
ImageFilterDAGBench.cpp Remove unused dstColorSpace parameter from makeTextureImage 2019-08-14 19:09:05 +00:00
InterpBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
JSONBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
LightingBench.cpp Update benchmarks to use new filter factories 2019-08-05 16:41:25 +00:00
LineBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
MagnifierBench.cpp Update benchmarks to use new filter factories 2019-08-05 16:41:25 +00:00
MathBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
Matrix44Bench.cpp Extend SkCanvas matrix stack to be 4x4, but with (basically) the same public API. 2020-01-07 18:23:04 +00:00
MatrixBench.cpp more rect api simplifications 2019-08-25 10:12:57 +00:00
MatrixConvolutionBench.cpp Update benchmarks to use new filter factories 2019-08-05 16:41:25 +00:00
MemsetBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
MergeBench.cpp Update benchmarks to use new filter factories 2019-08-05 16:41:25 +00:00
microbench.json
MipMapBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
MorphologyBench.cpp Update benchmarks to use new filter factories 2019-08-05 16:41:25 +00:00
MutexBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
nanobench.cpp nanobench: option to execute directory of TextBlobTraces as benches 2019-10-25 13:28:49 +00:00
nanobench.h rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
ParagraphBench.cpp re-run tools/rewrite_includes.py 2019-07-25 15:40:33 +00:00
PatchBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
PathBench.cpp Revert "Reland "Revert "Use flat version of path-direction enum""" 2019-11-22 19:09:54 +00:00
PathIterBench.cpp make pathiter bench a little more realistic 2019-08-20 18:19:55 +00:00
PathOpsBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
PathTextBench.cpp Make FindOrCreateStrikeWithNoDeviceExclusive analog for SkStrikeSpec 2019-06-07 01:29:21 +00:00
PDFBench.cpp SkPDF: MakeShader uses Color4f 2019-05-30 14:52:29 +00:00
PerlinNoiseBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
PictureNestingBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
PictureOverheadBench.cpp remove SkLiteDL 2019-05-14 18:55:44 +00:00
PicturePlaybackBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
PolyUtilsBench.cpp More polyutils fixes 2019-05-01 18:02:05 +00:00
PremulAndUnpremulAlphaOpsBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
QuickRejectBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
ReadPixBench.cpp Reland "Reland "SkSurface asynchronous read APIs allow client to extend pixel lifetime"" 2019-10-03 19:14:22 +00:00
RecordingBench.cpp remove SkLiteDL 2019-05-14 18:55:44 +00:00
RecordingBench.h remove SkLiteDL 2019-05-14 18:55:44 +00:00
RectanizerBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
RectBench.cpp more rect api simplifications 2019-08-25 10:12:57 +00:00
RefCntBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
RegionBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
RegionContainBench.cpp more rect api simplifications 2019-08-25 10:12:57 +00:00
RepeatTileBench.cpp more rect api simplifications 2019-08-25 10:12:57 +00:00
ResultsWriter.h Don't keep "outResultsFile" open in nanobench 2019-10-24 16:09:02 +00:00
RotatedRectBench.cpp Add SkUNREACHABLE to definition of SK_ABORT. 2019-08-09 20:43:39 +00:00
RTreeBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
ScalarBench.cpp more rect api simplifications 2019-08-25 10:12:57 +00:00
ShaderMaskFilterBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
ShadowBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
ShaperBench.cpp Shaper Tests: fix g3 build 2019-05-03 18:10:46 +00:00
ShapesBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
Sk4fBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
SkGlyphCacheBench.cpp nanobench: option to execute directory of TextBlobTraces as benches 2019-10-25 13:28:49 +00:00
SkGlyphCacheBench.h nanobench: option to execute directory of TextBlobTraces as benches 2019-10-25 13:28:49 +00:00
SKPAnimationBench.cpp remove unused (by clients) SkMultiPictureDraw 2019-11-15 18:18:36 +00:00
SKPAnimationBench.h re-run tools/rewrite_includes.py 2019-07-25 15:40:33 +00:00
SKPBench.cpp remove unused (by clients) SkMultiPictureDraw 2019-11-15 18:18:36 +00:00
SKPBench.h rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
skpbench.json
SkSLBench.cpp renamed SkSL texture() and process() to sample() 2019-07-29 17:37:38 +00:00
SkSLInterpreterBench.cpp Enable SKSL in skia_nanobench, enforce resources being present. 2019-10-16 16:34:36 +00:00
SkVMBench.cpp make some SkVM benches uneven 2019-07-15 02:38:26 +00:00
SortBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
StreamBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
StrokeBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
SwizzleBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
TableBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
TextBlobBench.cpp Use SkTextEncoding enum instead of macros. 2019-05-07 20:54:16 +00:00
TileBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
TileImageFilterBench.cpp Update benchmarks to use new filter factories 2019-08-05 16:41:25 +00:00
TopoSortBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
TypefaceBench.cpp use std::make_unique 2019-12-12 22:32:45 +00:00
VertBench.cpp extend imageshader updater to handle perspective 2019-12-19 18:56:39 +00:00
VertexColorSpaceBench.cpp Pull creation of GrPipeline explicitly into the Ops' onExecute methods 2019-12-06 16:33:15 +00:00
WritePixelsBench.cpp Rename GrColorSpaceInfo -> GrColorInfo 2019-09-30 21:53:24 +00:00
WriterBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00