aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
authorGravatar Mike Klein <mtklein@chromium.org>2018-02-06 14:53:47 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-02-07 00:00:25 +0000
commit9a7a2ee5ad8453a985d7d76c1e0ebb50d17fec63 (patch)
tree6365e1bc5abaa6daf4f620442e9149e8dfa95490 /src/core
parentfd5a5081d53d16facd315cb0b5d4b9622ba22d9d (diff)
remove SkCanvas::kIsOpaque_SaveLayerFlag
This is a performance-only hint that no one but fuzzers is using. It's even explicitly filtered out in Android. The fuzzers have noticed they can trick us into allocating uninitialized memory and treating it as opaque, blending uninitialized pixels, etc. Since no one's using this, we can just kill the bit. Bug: skia:7566, chromium:808830 Change-Id: Id74a85e51bc4d0907b4127eb9ac5b02576f8f0a7 Reviewed-on: https://skia-review.googlesource.com/104441 Reviewed-by: Mike Reed <reed@google.com> Commit-Queue: Mike Klein <mtklein@chromium.org>
Diffstat (limited to 'src/core')
-rw-r--r--src/core/SkCanvas.cpp13
-rw-r--r--src/core/SkPicturePlayback.cpp4
2 files changed, 4 insertions, 13 deletions
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index 9f13a711c2..2667f8fed0 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -1036,20 +1036,18 @@ void SkCanvas::DrawDeviceWithFilter(SkBaseDevice* src, const SkImageFilter* filt
}
}
-static SkImageInfo make_layer_info(const SkImageInfo& prev, int w, int h, bool isOpaque,
- const SkPaint* paint) {
+static SkImageInfo make_layer_info(const SkImageInfo& prev, int w, int h, const SkPaint* paint) {
// need to force L32 for now if we have an image filter. Once filters support other colortypes
// e.g. sRGB or F16, we can remove this check
// SRGBTODO: Can we remove this check now?
const bool hasImageFilter = paint && paint->getImageFilter();
- SkAlphaType alphaType = isOpaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType;
if ((prev.bytesPerPixel() < 4) || hasImageFilter) {
// force to L32
- return SkImageInfo::MakeN32(w, h, alphaType);
+ return SkImageInfo::MakeN32Premul(w, h);
} else {
// keep the same characteristics as the prev
- return SkImageInfo::Make(w, h, prev.colorType(), alphaType, prev.refColorSpace());
+ return SkImageInfo::Make(w, h, prev.colorType(), kPremul_SkAlphaType, prev.refColorSpace());
}
}
@@ -1107,12 +1105,10 @@ void SkCanvas::internalSaveLayer(const SaveLayerRec& rec, SaveLayerStrategy stra
return;
}
- bool isOpaque = SkToBool(saveLayerFlags & kIsOpaque_SaveLayerFlag);
SkPixelGeometry geo = fProps.pixelGeometry();
if (paint) {
// TODO: perhaps add a query to filters so we might preserve opaqueness...
if (paint->getImageFilter() || paint->getColorFilter()) {
- isOpaque = false;
geo = kUnknown_SkPixelGeometry;
}
}
@@ -1123,8 +1119,7 @@ void SkCanvas::internalSaveLayer(const SaveLayerRec& rec, SaveLayerStrategy stra
return;
}
- SkImageInfo info = make_layer_info(priorDevice->imageInfo(), ir.width(), ir.height(), isOpaque,
- paint);
+ SkImageInfo info = make_layer_info(priorDevice->imageInfo(), ir.width(), ir.height(), paint);
sk_sp<SkBaseDevice> newDevice;
{
diff --git a/src/core/SkPicturePlayback.cpp b/src/core/SkPicturePlayback.cpp
index f0d454a5ff..7b9e411764 100644
--- a/src/core/SkPicturePlayback.cpp
+++ b/src/core/SkPicturePlayback.cpp
@@ -22,7 +22,6 @@
// matches old SkCanvas::SaveFlags
enum LegacySaveFlags {
- kHasAlphaLayer_LegacySaveFlags = 0x04,
kClipToLayer_LegacySaveFlags = 0x10,
};
@@ -32,9 +31,6 @@ SkCanvas::SaveLayerFlags SkCanvas::LegacySaveFlagsToSaveLayerFlags(uint32_t flag
if (0 == (flags & kClipToLayer_LegacySaveFlags)) {
layerFlags |= SkCanvas::kDontClipToLayer_PrivateSaveLayerFlag;
}
- if (0 == (flags & kHasAlphaLayer_LegacySaveFlags)) {
- layerFlags |= kIsOpaque_SaveLayerFlag;
- }
return layerFlags;
}