| Index: tests/ImageFilterTest.cpp
 | 
| diff --git a/tests/ImageFilterTest.cpp b/tests/ImageFilterTest.cpp
 | 
| index b37f9589f78223f591491c2a7c89da6e9b57fdda..81f8a9993820d0557f6dd163ffc7108ffd718e18 100644
 | 
| --- a/tests/ImageFilterTest.cpp
 | 
| +++ b/tests/ImageFilterTest.cpp
 | 
| @@ -145,59 +145,61 @@ class FilterList {
 | 
|  public:
 | 
|      FilterList(sk_sp<SkImageFilter> input, const SkImageFilter::CropRect* cropRect = nullptr) {
 | 
|          SkPoint3 location = SkPoint3::Make(0, 0, SK_Scalar1);
 | 
| -        SkScalar kernel[9] = {
 | 
| -            SkIntToScalar( 1), SkIntToScalar( 1), SkIntToScalar( 1),
 | 
| -            SkIntToScalar( 1), SkIntToScalar(-7), SkIntToScalar( 1),
 | 
| -            SkIntToScalar( 1), SkIntToScalar( 1), SkIntToScalar( 1),
 | 
| -        };
 | 
| -        const SkISize kernelSize = SkISize::Make(3, 3);
 | 
| -        const SkScalar gain = SK_Scalar1, bias = 0;
 | 
|          const SkScalar five = SkIntToScalar(5);
 | 
|  
 | 
| -        SkMatrix matrix;
 | 
| -
 | 
| -        matrix.setTranslate(SK_Scalar1, SK_Scalar1);
 | 
| -        matrix.postRotate(SkIntToScalar(45), SK_Scalar1, SK_Scalar1);
 | 
| -
 | 
|          {
 | 
|              sk_sp<SkColorFilter> cf(SkColorFilter::MakeModeFilter(SK_ColorRED,
 | 
|                                                                    SkXfermode::kSrcIn_Mode));
 | 
|  
 | 
|              this->addFilter("color filter",
 | 
| -                SkColorFilterImageFilter::Make(cf, input, cropRect).release());
 | 
| +                SkColorFilterImageFilter::Make(std::move(cf), input, cropRect));
 | 
|          }
 | 
|  
 | 
|          {
 | 
|              sk_sp<SkImage> gradientImage(SkImage::MakeFromBitmap(make_gradient_circle(64, 64)));
 | 
|              sk_sp<SkImageFilter> gradientSource(SkImageSource::Make(std::move(gradientImage)));
 | 
|  
 | 
| -            this->addFilter("displacement map", SkDisplacementMapEffect::Create(
 | 
| -                SkDisplacementMapEffect::kR_ChannelSelectorType,
 | 
| -                SkDisplacementMapEffect::kB_ChannelSelectorType,
 | 
| -                20.0f, gradientSource.get(), input.get(), cropRect));
 | 
| +            this->addFilter("displacement map", 
 | 
| +                sk_sp<SkImageFilter>(SkDisplacementMapEffect::Create(
 | 
| +                                        SkDisplacementMapEffect::kR_ChannelSelectorType,
 | 
| +                                        SkDisplacementMapEffect::kB_ChannelSelectorType,
 | 
| +                                        20.0f, gradientSource.get(), input.get(), cropRect)));
 | 
|          }
 | 
|  
 | 
|          this->addFilter("blur", SkBlurImageFilter::Make(SK_Scalar1,
 | 
|                                                          SK_Scalar1,
 | 
|                                                          input,
 | 
| -                                                        cropRect).release());
 | 
| +                                                        cropRect));
 | 
|          this->addFilter("drop shadow", SkDropShadowImageFilter::Make(
 | 
|                    SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_ColorGREEN,
 | 
|                    SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode,
 | 
| -                  input, cropRect).release());
 | 
| -        this->addFilter("diffuse lighting", SkLightingImageFilter::CreatePointLitDiffuse(
 | 
| -                  location, SK_ColorGREEN, 0, 0, input.get(), cropRect));
 | 
| +                  input, cropRect));
 | 
| +        this->addFilter("diffuse lighting",
 | 
| +                  SkLightingImageFilter::MakePointLitDiffuse(location, SK_ColorGREEN, 0, 0,
 | 
| +                                                             input, cropRect));
 | 
|          this->addFilter("specular lighting",
 | 
| -                  SkLightingImageFilter::CreatePointLitSpecular(location, SK_ColorGREEN, 0, 0, 0,
 | 
| -                                                                input.get(), cropRect));
 | 
| -        this->addFilter("matrix convolution",
 | 
| +                  SkLightingImageFilter::MakePointLitSpecular(location, SK_ColorGREEN, 0, 0, 0,
 | 
| +                                                              input, cropRect));
 | 
| +        {
 | 
| +            SkScalar kernel[9] = {
 | 
| +                SkIntToScalar(1), SkIntToScalar(1), SkIntToScalar(1),
 | 
| +                SkIntToScalar(1), SkIntToScalar(-7), SkIntToScalar(1),
 | 
| +                SkIntToScalar(1), SkIntToScalar(1), SkIntToScalar(1),
 | 
| +            };
 | 
| +            const SkISize kernelSize = SkISize::Make(3, 3);
 | 
| +            const SkScalar gain = SK_Scalar1, bias = 0;
 | 
| +
 | 
| +            this->addFilter("matrix convolution",
 | 
|                    SkMatrixConvolutionImageFilter::Make(
 | 
|                        kernelSize, kernel, gain, bias, SkIPoint::Make(1, 1),
 | 
|                        SkMatrixConvolutionImageFilter::kRepeat_TileMode, false,
 | 
| -                      input, cropRect).release());
 | 
| +                      input, cropRect));
 | 
| +        }
 | 
| +
 | 
|          this->addFilter("merge", SkMergeImageFilter::Make(input, input,
 | 
|                                                            SkXfermode::kSrcOver_Mode,
 | 
| -                                                          cropRect).release());
 | 
| +                                                          cropRect));
 | 
| +
 | 
|          {
 | 
|              SkPaint greenColorShaderPaint;
 | 
|              greenColorShaderPaint.setShader(SkShader::MakeColorShader(SK_ColorGREEN));
 | 
| @@ -212,29 +214,34 @@ public:
 | 
|  
 | 
|              this->addFilter("merge with disjoint inputs", SkMergeImageFilter::Make(
 | 
|                    std::move(paintFilterLeft), std::move(paintFilterRight),
 | 
| -                  SkXfermode::kSrcOver_Mode, cropRect).release());
 | 
| +                  SkXfermode::kSrcOver_Mode, cropRect));
 | 
|          }
 | 
|  
 | 
|          this->addFilter("offset",
 | 
|                          SkOffsetImageFilter::Make(SK_Scalar1, SK_Scalar1, input,
 | 
| -                                                  cropRect).release());
 | 
| -        this->addFilter("dilate", SkDilateImageFilter::Make(3, 2, input, cropRect).release());
 | 
| -        this->addFilter("erode", SkErodeImageFilter::Make(2, 3, input, cropRect).release());
 | 
| -        this->addFilter("tile", SkTileImageFilter::Create(
 | 
| +                                                  cropRect));
 | 
| +        this->addFilter("dilate", SkDilateImageFilter::Make(3, 2, input, cropRect));
 | 
| +        this->addFilter("erode", SkErodeImageFilter::Make(2, 3, input, cropRect));
 | 
| +        this->addFilter("tile", sk_sp<SkImageFilter>(SkTileImageFilter::Create(
 | 
|              SkRect::MakeXYWH(0, 0, 50, 50),
 | 
|              cropRect ? cropRect->rect() : SkRect::MakeXYWH(0, 0, 100, 100),
 | 
| -            input.get()));
 | 
| +            input.get())));
 | 
| +
 | 
|          if (!cropRect) {
 | 
| +            SkMatrix matrix;
 | 
| +
 | 
| +            matrix.setTranslate(SK_Scalar1, SK_Scalar1);
 | 
| +            matrix.postRotate(SkIntToScalar(45), SK_Scalar1, SK_Scalar1);
 | 
| +
 | 
|              this->addFilter("matrix",
 | 
| -                SkImageFilter::MakeMatrixFilter(matrix, kLow_SkFilterQuality, input).release());
 | 
| +                SkImageFilter::MakeMatrixFilter(matrix, kLow_SkFilterQuality, input));
 | 
|          }
 | 
| -
 | 
|          {
 | 
|              sk_sp<SkImageFilter> blur(SkBlurImageFilter::Make(five, five, input));
 | 
|  
 | 
|              this->addFilter("blur and offset", SkOffsetImageFilter::Make(five, five,
 | 
|                                                                           std::move(blur),
 | 
| -                                                                         cropRect).release());
 | 
| +                                                                         cropRect));
 | 
|          }
 | 
|          {
 | 
|              SkRTreeFactory factory;
 | 
| @@ -249,7 +256,7 @@ public:
 | 
|  
 | 
|              this->addFilter("picture and blur", SkBlurImageFilter::Make(five, five,
 | 
|                                                                          std::move(pictureFilter),
 | 
| -                                                                        cropRect).release());
 | 
| +                                                                        cropRect));
 | 
|          }
 | 
|          {
 | 
|              SkPaint paint;
 | 
| @@ -258,23 +265,26 @@ public:
 | 
|  
 | 
|              this->addFilter("paint and blur", SkBlurImageFilter::Make(five, five,
 | 
|                                                                        std::move(paintFilter),
 | 
| -                                                                      cropRect).release());
 | 
| +                                                                      cropRect));
 | 
|          }
 | 
|          this->addFilter("xfermode", SkXfermodeImageFilter::Make(
 | 
| -            SkXfermode::Make(SkXfermode::kSrc_Mode), input, input, cropRect).release());
 | 
| +            SkXfermode::Make(SkXfermode::kSrc_Mode), input, input, cropRect));
 | 
|      }
 | 
|      int count() const { return fFilters.count(); }
 | 
|      SkImageFilter* getFilter(int index) const { return fFilters[index].fFilter.get(); }
 | 
|      const char* getName(int index) const { return fFilters[index].fName; }
 | 
|  private:
 | 
|      struct Filter {
 | 
| -        Filter() : fName(nullptr), fFilter(nullptr) {}
 | 
| -        Filter(const char* name, SkImageFilter* filter) : fName(name), fFilter(filter) {}
 | 
| +        Filter() : fName(nullptr) {}
 | 
| +        Filter(const char* name, sk_sp<SkImageFilter> filter)
 | 
| +            : fName(name)
 | 
| +            , fFilter(std::move(filter)) {
 | 
| +        }
 | 
|          const char*                 fName;
 | 
|          sk_sp<SkImageFilter>        fFilter;
 | 
|      };
 | 
| -    void addFilter(const char* name, SkImageFilter* filter) {
 | 
| -        fFilters.push_back(Filter(name, filter));
 | 
| +    void addFilter(const char* name, sk_sp<SkImageFilter> filter) {
 | 
| +        fFilters.push_back(Filter(name, std::move(filter)));
 | 
|      }
 | 
|  
 | 
|      SkTArray<Filter> fFilters;
 | 
| @@ -500,10 +510,10 @@ DEF_TEST(ImageFilter, reporter) {
 | 
|  
 | 
|              sk_sp<SkImageFilter> bmSrc(SkImageSource::Make(std::move(image)));
 | 
|              SkPaint paint;
 | 
| -            paint.setImageFilter(SkLightingImageFilter::CreateSpotLitSpecular(
 | 
| +            paint.setImageFilter(SkLightingImageFilter::MakeSpotLitSpecular(
 | 
|                      location, target, specularExponent, 180,
 | 
|                      0xFFFFFFFF, SK_Scalar1, SK_Scalar1, SK_Scalar1,
 | 
| -                    bmSrc.get()))->unref();
 | 
| +                    std::move(bmSrc)));
 | 
|              SkCanvas canvas(result);
 | 
|              SkRect r = SkRect::MakeWH(SkIntToScalar(kBitmapSize),
 | 
|                                        SkIntToScalar(kBitmapSize));
 | 
| @@ -625,8 +635,8 @@ static void run_raster_test(skiatest::Reporter* reporter,
 | 
|  
 | 
|      const SkImageInfo info = SkImageInfo::MakeN32Premul(widthHeight, widthHeight);
 | 
|  
 | 
| -    SkAutoTUnref<SkBaseDevice> device(SkBitmapDevice::Create(info, props));
 | 
| -    SkImageFilter::DeviceProxy proxy(device);
 | 
| +    sk_sp<SkBaseDevice> device(SkBitmapDevice::Create(info, props));
 | 
| +    SkImageFilter::DeviceProxy proxy(device.get());
 | 
|  
 | 
|      (*test)(&proxy, reporter, nullptr);
 | 
|  }
 | 
| @@ -638,14 +648,14 @@ static void run_gpu_test(skiatest::Reporter* reporter,
 | 
|                           PFTest test) {
 | 
|      const SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType);
 | 
|  
 | 
| -    SkAutoTUnref<SkGpuDevice> device(SkGpuDevice::Create(context,
 | 
| -                                                         SkBudgeted::kNo,
 | 
| -                                                         SkImageInfo::MakeN32Premul(widthHeight,
 | 
| -                                                                                    widthHeight),
 | 
| -                                                         0,
 | 
| -                                                         &props,
 | 
| -                                                         SkGpuDevice::kUninit_InitContents));
 | 
| -    SkImageFilter::DeviceProxy proxy(device);
 | 
| +    sk_sp<SkGpuDevice> device(SkGpuDevice::Create(context,
 | 
| +                                                  SkBudgeted::kNo,
 | 
| +                                                  SkImageInfo::MakeN32Premul(widthHeight,
 | 
| +                                                                             widthHeight),
 | 
| +                                                  0,
 | 
| +                                                  &props,
 | 
| +                                                  SkGpuDevice::kUninit_InitContents));
 | 
| +    SkImageFilter::DeviceProxy proxy(device.get());
 | 
|  
 | 
|      (*test)(&proxy, reporter, context);
 | 
|  }
 | 
| @@ -1158,8 +1168,8 @@ DEF_TEST(ImageFilterCrossProcessPictureImageFilter, reporter) {
 | 
|      // Check that, for now, SkPictureImageFilter does not serialize or
 | 
|      // deserialize its contained picture when the filter is serialized
 | 
|      // cross-process. Do this by "laundering" it through SkValidatingReadBuffer.
 | 
| -    SkAutoTUnref<SkData> data(SkValidatingSerializeFlattenable(imageFilter.get()));
 | 
| -    SkAutoTUnref<SkFlattenable> flattenable(SkValidatingDeserializeFlattenable(
 | 
| +    sk_sp<SkData> data(SkValidatingSerializeFlattenable(imageFilter.get()));
 | 
| +    sk_sp<SkFlattenable> flattenable(SkValidatingDeserializeFlattenable(
 | 
|          data->data(), data->size(), SkImageFilter::GetFlattenableType()));
 | 
|      SkImageFilter* unflattenedFilter = static_cast<SkImageFilter*>(flattenable.get());
 | 
|  
 | 
| @@ -1551,10 +1561,13 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(PartialCropRect_Gpu, reporter, ctxInfo) {
 | 
|  
 | 
|  DEF_TEST(ImageFilterCanComputeFastBounds, reporter) {
 | 
|  
 | 
| -    SkPoint3 location = SkPoint3::Make(0, 0, SK_Scalar1);
 | 
| -    SkAutoTUnref<SkImageFilter> lighting(SkLightingImageFilter::CreatePointLitDiffuse(
 | 
| -          location, SK_ColorGREEN, 0, 0));
 | 
| -    REPORTER_ASSERT(reporter, !lighting->canComputeFastBounds());
 | 
| +    {
 | 
| +        SkPoint3 location = SkPoint3::Make(0, 0, SK_Scalar1);
 | 
| +        sk_sp<SkImageFilter> lighting(SkLightingImageFilter::MakePointLitDiffuse(location,
 | 
| +                                                                                 SK_ColorGREEN,
 | 
| +                                                                                 0, 0, nullptr));
 | 
| +        REPORTER_ASSERT(reporter, !lighting->canComputeFastBounds());
 | 
| +    }
 | 
|  
 | 
|      {
 | 
|          sk_sp<SkImageFilter> gray(make_grayscale(nullptr, nullptr));
 | 
| @@ -1685,13 +1698,13 @@ DEF_TEST(BlurLargeImage, reporter) {
 | 
|  DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(HugeBlurImageFilter_Gpu, reporter, ctxInfo) {
 | 
|      const SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType);
 | 
|  
 | 
| -    SkAutoTUnref<SkGpuDevice> device(SkGpuDevice::Create(ctxInfo.fGrContext,
 | 
| -                                                         SkBudgeted::kNo,
 | 
| -                                                         SkImageInfo::MakeN32Premul(100, 100),
 | 
| -                                                         0,
 | 
| -                                                         &props,
 | 
| -                                                         SkGpuDevice::kUninit_InitContents));
 | 
| -    SkCanvas canvas(device);
 | 
| +    sk_sp<SkGpuDevice> device(SkGpuDevice::Create(ctxInfo.fGrContext,
 | 
| +                                                  SkBudgeted::kNo,
 | 
| +                                                  SkImageInfo::MakeN32Premul(100, 100),
 | 
| +                                                  0,
 | 
| +                                                  &props,
 | 
| +                                                  SkGpuDevice::kUninit_InitContents));
 | 
| +    SkCanvas canvas(device.get());
 | 
|  
 | 
|      test_huge_blur(&canvas, reporter);
 | 
|  }
 | 
| @@ -1699,13 +1712,13 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(HugeBlurImageFilter_Gpu, reporter, ctxInfo
 | 
|  DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(XfermodeImageFilterCroppedInput_Gpu, reporter, ctxInfo) {
 | 
|      const SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType);
 | 
|  
 | 
| -    SkAutoTUnref<SkGpuDevice> device(SkGpuDevice::Create(ctxInfo.fGrContext,
 | 
| -                                                         SkBudgeted::kNo,
 | 
| -                                                         SkImageInfo::MakeN32Premul(1, 1),
 | 
| -                                                         0,
 | 
| -                                                         &props,
 | 
| -                                                         SkGpuDevice::kUninit_InitContents));
 | 
| -    SkCanvas canvas(device);
 | 
| +    sk_sp<SkGpuDevice> device(SkGpuDevice::Create(ctxInfo.fGrContext,
 | 
| +                                                  SkBudgeted::kNo,
 | 
| +                                                  SkImageInfo::MakeN32Premul(1, 1),
 | 
| +                                                  0,
 | 
| +                                                  &props,
 | 
| +                                                  SkGpuDevice::kUninit_InitContents));
 | 
| +    SkCanvas canvas(device.get());
 | 
|  
 | 
|      test_xfermode_cropped_input(&canvas, reporter);
 | 
|  }
 | 
| 
 |