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>
This commit is contained in:
parent
9e6a39356e
commit
f93d021680
@ -52,7 +52,9 @@ SkColor SkColorFilter::filterColor(SkColor c) const {
|
|||||||
SkColor4f SkColorFilter::filterColor4f(const SkColor4f& c, SkColorSpace* colorSpace) const {
|
SkColor4f SkColorFilter::filterColor4f(const SkColor4f& c, SkColorSpace* colorSpace) const {
|
||||||
SkPMColor4f dst, src = c.premul();
|
SkPMColor4f dst, src = c.premul();
|
||||||
|
|
||||||
SkSTArenaAlloc<128> alloc;
|
// determined experimentally, seems to cover compose+colormatrix
|
||||||
|
constexpr size_t kEnoughForCommonFilters = 512;
|
||||||
|
SkSTArenaAlloc<kEnoughForCommonFilters> alloc;
|
||||||
SkRasterPipeline pipeline(&alloc);
|
SkRasterPipeline pipeline(&alloc);
|
||||||
|
|
||||||
pipeline.append_constant_color(&alloc, src.vec());
|
pipeline.append_constant_color(&alloc, src.vec());
|
||||||
|
Loading…
Reference in New Issue
Block a user