diff options
author | reed <reed@google.com> | 2015-07-16 07:40:45 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-07-16 07:40:45 -0700 |
commit | c83a29759a5c2966da5ab973e4fd90763e4c962b (patch) | |
tree | f47ed31d01e78faa7ef95a8962b3db7ec7243f4f /src/core/SkPaintPriv.cpp | |
parent | 0df62e3d685f6b0b61ee514c68006e013109f5a1 (diff) |
have canvas send discard instead of retain if the draw would overwrite everything
Motivation:
- perf win for clients that overwrite the surface after a snapshot.
- may allow us to eliminate SkDeferredCanvas, as this was its primary advantage.
BUG=skia:
Review URL: https://codereview.chromium.org/1236023004
Diffstat (limited to 'src/core/SkPaintPriv.cpp')
-rw-r--r-- | src/core/SkPaintPriv.cpp | 19 |
1 files changed, 4 insertions, 15 deletions
diff --git a/src/core/SkPaintPriv.cpp b/src/core/SkPaintPriv.cpp index a4a7327110..6725cb49be 100644 --- a/src/core/SkPaintPriv.cpp +++ b/src/core/SkPaintPriv.cpp @@ -5,26 +5,19 @@ * found in the LICENSE file. */ -#include "SkPaintPriv.h" - #include "SkBitmap.h" #include "SkColorFilter.h" +#include "SkPaintPriv.h" #include "SkImage.h" #include "SkPaint.h" #include "SkShader.h" -enum ShaderOverrideOpacity { - kNone_ShaderOverrideOpacity, //!< there is no overriding shader (bitmap or image) - kOpaque_ShaderOverrideOpacity, //!< the overriding shader is opaque - kNotOpaque_ShaderOverrideOpacity, //!< the overriding shader may not be opaque -}; - static bool changes_alpha(const SkPaint& paint) { SkColorFilter* cf = paint.getColorFilter(); return cf && !(cf->getFlags() & SkColorFilter::kAlphaUnchanged_Flag); } -static bool overwrites(const SkPaint* paint, ShaderOverrideOpacity overrideOpacity) { +bool SkPaintPriv::Overwrites(const SkPaint* paint, ShaderOverrideOpacity overrideOpacity) { if (!paint) { // No paint means we default to SRC_OVER, so we overwrite iff our shader-override // is opaque, or we don't have one. @@ -51,16 +44,12 @@ static bool overwrites(const SkPaint* paint, ShaderOverrideOpacity overrideOpaci return SkXfermode::IsOpaque(paint->getXfermode(), opacityType); } -bool SkPaintPriv::Overwrites(const SkPaint& paint) { - return overwrites(&paint, kNone_ShaderOverrideOpacity); -} - bool SkPaintPriv::Overwrites(const SkBitmap& bitmap, const SkPaint* paint) { - return overwrites(paint, bitmap.isOpaque() ? kOpaque_ShaderOverrideOpacity + return Overwrites(paint, bitmap.isOpaque() ? kOpaque_ShaderOverrideOpacity : kNotOpaque_ShaderOverrideOpacity); } bool SkPaintPriv::Overwrites(const SkImage* image, const SkPaint* paint) { - return overwrites(paint, image->isOpaque() ? kOpaque_ShaderOverrideOpacity + return Overwrites(paint, image->isOpaque() ? kOpaque_ShaderOverrideOpacity : kNotOpaque_ShaderOverrideOpacity); } |