diff options
author | 2018-02-06 14:53:47 -0500 | |
---|---|---|
committer | 2018-02-07 00:00:25 +0000 | |
commit | 9a7a2ee5ad8453a985d7d76c1e0ebb50d17fec63 (patch) | |
tree | 6365e1bc5abaa6daf4f620442e9149e8dfa95490 /src/core | |
parent | fd5a5081d53d16facd315cb0b5d4b9622ba22d9d (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.cpp | 13 | ||||
-rw-r--r-- | src/core/SkPicturePlayback.cpp | 4 |
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; } |