diff options
author | Yuqian Li <liyuqian@google.com> | 2017-09-15 17:39:09 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-09-18 18:10:03 +0000 |
commit | 6d1aaca8276ff4ae2e10870f7e2c3222907cc4aa (patch) | |
tree | a38b2a56507ec0b3906322bf842905ebfc88e7b2 /src/core/SkScan_DAAPath.cpp | |
parent | e6c0dee067f6cdb84c98aab3bd9270c24b995084 (diff) |
Call blitFatAntiRect to avoid overhead in MaskAdditiveBlitter
This results in 25% (720ns vs 560ns) speedup for
path_fill_small_rect bench in 8888 config. Some skps have a lot of stroked
horizontal/vertical lines (e.g., bar charts) so this improvement could
have a great impact there. For example, cereal converts Microsoft word docx
to PNGs on server and the sample docx has a big bar chart. That inspired
this improvement.
Bug: skia:
Change-Id: Icf96c966edf87427b3d1f53da09a49930eda2ac1
Reviewed-on: https://skia-review.googlesource.com/46584
Commit-Queue: Yuqian Li <liyuqian@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
Diffstat (limited to 'src/core/SkScan_DAAPath.cpp')
-rw-r--r-- | src/core/SkScan_DAAPath.cpp | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/src/core/SkScan_DAAPath.cpp b/src/core/SkScan_DAAPath.cpp index a12b6da9b0..1a9bc5d311 100644 --- a/src/core/SkScan_DAAPath.cpp +++ b/src/core/SkScan_DAAPath.cpp @@ -327,14 +327,9 @@ void SkScan::DAAFillPath(const SkPath& path, const SkRegion& origClip, SkBlitter SkIRect clippedIR = ir; clippedIR.intersect(clipBounds); - SkRect rect; - if (!isInverse && path.isRect(&rect) && clippedIR.height() >= 3 && clippedIR.width() >= 3) { - // The overhead of even constructing SkCoverageDeltaList/Mask is too big. So just blit. - bool nonEmpty = rect.intersect(SkRect::Make(clipBounds)); - SkASSERT(nonEmpty); // do_fill_path should have already handled the empty case - if (nonEmpty) { - blitter->blitFatAntiRect(rect); - } + // The overhead of even constructing SkCoverageDeltaList/Mask is too big. + // So TryBlitFatAntiRect and return if it's successful. + if (TryBlitFatAntiRect(blitter, path, clipBounds)) { return; } |