diff options
author | Herb Derby <herb@google.com> | 2017-02-13 20:04:00 +0000 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-02-13 20:04:16 +0000 |
commit | 07f665efb918f68e406b76a78d0b76d5c714f16c (patch) | |
tree | d58a5d4849f779e9504aa69dda0414777770eafb /src/core/SkDraw.cpp | |
parent | d2d6d726fa3e401da73befa649266bc5589da7e5 (diff) |
Revert "Always make SkImageShaders in heap."
This reverts commit ff590a12441002d281254ec6a86070ac0a19263f.
Reason for revert: This breaks the android roll because they are using
a private call. Updating android tests to use new api.
Original change's description:
> Always make SkImageShaders in heap.
>
> I made a couple of measurments, and it looks like any differences is
> well below the noise threshold.
>
> Just for the record run1: .9991 of baseline and run2 .9988 of baseline.
> I was using top25 .skps as workload.
>
> TBR=mtklein@google.com
>
> Change-Id: If4fa06e5d5df72fb67dbb4bbb99c926f05765897
> Reviewed-on: https://skia-review.googlesource.com/8341
> Reviewed-by: Herb Derby <herb@google.com>
> Commit-Queue: Herb Derby <herb@google.com>
>
TBR=mtklein@chromium.org,mtklein@google.com,herb@google.com,reviews@skia.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
Change-Id: Ibdaafc796702e250933b62e5f4abb5e2ce8d40c0
Reviewed-on: https://skia-review.googlesource.com/8393
Commit-Queue: Herb Derby <herb@google.com>
Reviewed-by: Herb Derby <herb@google.com>
Diffstat (limited to 'src/core/SkDraw.cpp')
-rw-r--r-- | src/core/SkDraw.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/core/SkDraw.cpp b/src/core/SkDraw.cpp index 4d1c5a4998..4308000457 100644 --- a/src/core/SkDraw.cpp +++ b/src/core/SkDraw.cpp @@ -85,10 +85,23 @@ public: SkAutoBitmapShaderInstall(const SkBitmap& src, const SkPaint& paint, const SkMatrix* localMatrix = nullptr) : fPaint(paint) /* makes a copy of the paint */ { - + // TODO(herb): Move this over to SkArenaAlloc when arena alloc has a + // facility to return sk_sps. fPaint.setShader(SkMakeBitmapShader(src, SkShader::kClamp_TileMode, SkShader::kClamp_TileMode, localMatrix, - kNever_SkCopyPixelsMode)); + kNever_SkCopyPixelsMode, + &fAllocator)); + // we deliberately left the shader with an owner-count of 2 + fPaint.getShader()->ref(); + SkASSERT(2 == fPaint.getShader()->getRefCnt()); + } + + ~SkAutoBitmapShaderInstall() { + // since fAllocator will destroy shader, we insist that owners == 2 + SkASSERT(2 == fPaint.getShader()->getRefCnt()); + + fPaint.setShader(nullptr); // unref the shader by 1 + } // return the new paint that has the shader applied @@ -97,6 +110,8 @@ public: private: // copy of caller's paint (which we then modify) SkPaint fPaint; + // Stores the shader. + SkTBlitterAllocator fAllocator; }; #define SkAutoBitmapShaderInstall(...) SK_REQUIRE_LOCAL_VAR(SkAutoBitmapShaderInstall) |