aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkPaintPriv.cpp
diff options
context:
space:
mode:
authorGravatar reed <reed@google.com>2015-07-16 07:40:45 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-07-16 07:40:45 -0700
commitc83a29759a5c2966da5ab973e4fd90763e4c962b (patch)
treef47ed31d01e78faa7ef95a8962b3db7ec7243f4f /src/core/SkPaintPriv.cpp
parent0df62e3d685f6b0b61ee514c68006e013109f5a1 (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.cpp19
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);
}