diff options
author | 2017-03-06 15:47:09 -0500 | |
---|---|---|
committer | 2017-03-06 21:30:12 +0000 | |
commit | 05a429614ec3206f9d2b7c145cbda0b5a442b6d0 (patch) | |
tree | 6c22906ccb872d90f7eead2b83b525da3f5534ad /src | |
parent | 9973f981c72dfd0b797b69d97149b75970af75fd (diff) |
Turn off savelayer optimization for Android framework
This is a simpler version of https://skia-review.googlesource.com/c/8970/
Note that we couldn't do the optimization and add back the clip effect by
another clipRect or clipPath call because the final matrix is not available at
recording time.
BUG=skia:6334
Change-Id: I3ca091bdc1ee1d265a79fb88d0a6f9afe2b27e58
Reviewed-on: https://skia-review.googlesource.com/9311
Reviewed-by: Mike Klein <mtklein@chromium.org>
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Yuqian Li <liyuqian@google.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/core/SkRecordOpts.cpp | 11 | ||||
-rw-r--r-- | src/core/SkRecordOpts.h | 2 |
2 files changed, 12 insertions, 1 deletions
diff --git a/src/core/SkRecordOpts.cpp b/src/core/SkRecordOpts.cpp index bd8364fcda..07ef19d5a5 100644 --- a/src/core/SkRecordOpts.cpp +++ b/src/core/SkRecordOpts.cpp @@ -172,6 +172,7 @@ void SkRecordNoopSaveRestores(SkRecord* record) { while (apply(&onlyDraws, record) || apply(&noDraws, record)); } +#ifndef SK_BUILD_FOR_ANDROID_FRAMEWORK static bool effectively_srcover(const SkPaint* paint) { if (!paint || paint->isSrcOver()) { return true; @@ -229,7 +230,7 @@ void SkRecordNoopSaveLayerDrawRestores(SkRecord* record) { SaveLayerDrawRestoreNooper pass; apply(&pass, record); } - +#endif /* For SVG generated: SaveLayer (non-opaque, typically for CSS opacity) @@ -297,7 +298,12 @@ void SkRecordOptimize(SkRecord* record) { // https://bugs.chromium.org/p/skia/issues/detail?id=5548 // SkRecordNoopSaveRestores(record); + // Turn off this optimization completely for Android framework + // because it makes the following Android CTS test fail: + // android.uirendering.cts.testclasses.LayerTests#testSaveLayerClippedWithAlpha +#ifndef SK_BUILD_FOR_ANDROID_FRAMEWORK SkRecordNoopSaveLayerDrawRestores(record); +#endif SkRecordMergeSvgOpacityAndFilterLayers(record); record->defrag(); @@ -306,7 +312,10 @@ void SkRecordOptimize(SkRecord* record) { void SkRecordOptimize2(SkRecord* record) { multiple_set_matrices(record); SkRecordNoopSaveRestores(record); + // See why we turn this off in SkRecordOptimize above. +#ifndef SK_BUILD_FOR_ANDROID_FRAMEWORK SkRecordNoopSaveLayerDrawRestores(record); +#endif SkRecordMergeSvgOpacityAndFilterLayers(record); record->defrag(); diff --git a/src/core/SkRecordOpts.h b/src/core/SkRecordOpts.h index d6531b5226..f9db0698cf 100644 --- a/src/core/SkRecordOpts.h +++ b/src/core/SkRecordOpts.h @@ -16,9 +16,11 @@ void SkRecordOptimize(SkRecord*); // Turns logical no-op Save-[non-drawing command]*-Restore patterns into actual no-ops. void SkRecordNoopSaveRestores(SkRecord*); +#ifndef SK_BUILD_FOR_ANDROID_FRAMEWORK // For some SaveLayer-[drawing command]-Restore patterns, merge the SaveLayer's alpha into the // draw, and no-op the SaveLayer and Restore. void SkRecordNoopSaveLayerDrawRestores(SkRecord*); +#endif // For SVG generated SaveLayer-Save-ClipRect-SaveLayer-3xRestore patterns, merge // the alpha of the first SaveLayer to the second SaveLayer. |