Make SkColorSpaceXformer::apply(SkPaint) safe to call recursively

Before, we would stomp on the original paint in the recursive call.

This fixes 4 gbr-8888 gms.  Currently, this only affects loopers
and SkPaintImageFilter.

Bug: skia:6516
Change-Id: Ic47d637a912370c0a1ae8ef3282ad7d15d9902e3
Reviewed-on: https://skia-review.googlesource.com/14182
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 0db303b..ce6fff6 100644
--- a/src/core/SkColorSpaceXformer.cpp
+++ b/src/core/SkColorSpaceXformer.cpp
@@ -79,52 +79,29 @@
     return xformed;
 }
 
-const SkPaint& SkColorSpaceXformer::apply(const SkPaint& src) {
-    const SkPaint* result = &src;
-    auto get_dst = [&] {
-        if (result == &src) {
-            fDstPaint = src;
-            result = &fDstPaint;
-        }
-        return &fDstPaint;
-    };
+SkPaint SkColorSpaceXformer::apply(const SkPaint& src) {
+    SkPaint dst = src;
 
     // All SkColorSpaces have the same black point.
     if (src.getColor() & 0xffffff) {
-        get_dst()->setColor(this->apply(src.getColor()));
+        dst.setColor(this->apply(src.getColor()));
     }
 
     if (auto shader = src.getShader()) {
-        auto replacement = shader->makeColorSpace(this);
-        if (replacement.get() != shader) {
-            get_dst()->setShader(std::move(replacement));
-        }
+        dst.setShader(shader->makeColorSpace(this));
     }
 
     if (auto cf = src.getColorFilter()) {
-        auto replacement = this->apply(cf);
-        if (replacement.get() != cf) {
-            get_dst()->setColorFilter(std::move(replacement));
-        }
+        dst.setColorFilter(this->apply(cf));
     }
 
     if (auto looper = src.getDrawLooper()) {
-        auto replacement = looper->makeColorSpace(this);
-        if (replacement.get() != looper) {
-            get_dst()->setDrawLooper(std::move(replacement));
-        }
+        dst.setDrawLooper(looper->makeColorSpace(this));
     }
 
     if (auto imageFilter = src.getImageFilter()) {
-        auto replacement = this->apply(imageFilter);
-        if (replacement.get() != imageFilter) {
-            get_dst()->setImageFilter(std::move(replacement));
-        }
+        dst.setImageFilter(this->apply(imageFilter));
     }
 
-    return *result;
-}
-
-const SkPaint* SkColorSpaceXformer::apply(const SkPaint* src) {
-    return src ? &this->apply(*src) : nullptr;
+    return dst;
 }