SkImageFilter::onMakeColorSpace() - more overrides

Fills out most of the simple implementations.
Improves 22 gms in gbr-8888.

Bug: skia:
Change-Id: I881ade140993568263de75be51aed240d2de8cc6
Reviewed-on: https://skia-review.googlesource.com/13126
Commit-Queue: Matt Sarett <msarett@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
diff --git a/src/core/SkColorSpaceXformer.cpp b/src/core/SkColorSpaceXformer.cpp
index d256ddf..38e717d 100644
--- a/src/core/SkColorSpaceXformer.cpp
+++ b/src/core/SkColorSpaceXformer.cpp
@@ -44,6 +44,17 @@
     return xformed;
 }
 
+// As far as I know, SkModeColorFilter is the only color filter that holds a color.
+sk_sp<SkColorFilter> SkColorSpaceXformer::apply(const SkColorFilter* colorFilter) {
+    SkColor color;
+    SkBlendMode mode;
+    if (colorFilter->asColorMode(&color, &mode)) {
+        return SkColorFilter::MakeModeFilter(this->apply(color), mode);
+    }
+
+    return sk_ref_sp(const_cast<SkColorFilter*>(colorFilter));
+}
+
 void SkColorSpaceXformer::apply(SkColor* xformed, const SkColor* srgb, int n) {
     SkAssertResult(fFromSRGB->apply(SkColorSpaceXform::kBGRA_8888_ColorFormat, xformed,
                                     SkColorSpaceXform::kBGRA_8888_ColorFormat, srgb,
@@ -160,12 +171,10 @@
         }
     }
 
-    // As far as I know, SkModeColorFilter is the only color filter that holds a color.
     if (auto cf = src.getColorFilter()) {
-        SkColor color;
-        SkBlendMode mode;
-        if (cf->asColorMode(&color, &mode)) {
-            get_dst()->setColorFilter(SkColorFilter::MakeModeFilter(this->apply(color), mode));
+        auto replacement = this->apply(cf);
+        if (replacement.get() != cf) {
+            get_dst()->setColorFilter(std::move(replacement));
         }
     }