remove allocs for colorfilters
For a modified bench, that installs colorfilterimagefilters and then draws a colored rect:
before:
13/13 MB 18 1.66µs 1.67µs 1.67µs 1.73µs 1% █▂▂▃▄▁▂▁▁▃ 8888
after:
13/13 MB 17 874ns 878ns 882ns 920ns 2% █▁▂▂▁▂▂▁▁▁ 8888
Some observations
- we can sometimes build several rasterpipelines in a single draw
- filterColor4f (can be called more than once)
- actual_blit
- imagefilter::affectsTransparentBlack
- calls through to the colorfilter
- this in-turn invokes filterColor4f, which makes a pipeline
+ if we had elimnated the imagefilter (for a colorfilter) sooner,
we would not have called affectsTransparentBlack
+ adding a virtual to colorfilter for affectsTransparentBlack might
also avoid having to call filterColor4f (at least for filters
that know how to determine this simply)
For now however, increasing the arena's stack-budget seems to brush over
these other inefficiencies.
More observations
- we decide to use pipeline before we fold-away the colorfilter (w/ no shader)
- the pipeline later notices this, and becomes just a color draw
- if we had removed the colorfilter earlier, we would have taken a different
(legacy, slightly faster) blitter (logically using memset).
Change-Id: I1a63414acbf23967c4d4daed9956bdc4d81148c6
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/214682
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Reed <reed@google.com>
1 file changed