diff options
author | fmalita <fmalita@chromium.org> | 2016-10-17 07:16:05 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-10-17 07:16:05 -0700 |
commit | 862a3876086a9367c584598038887b94d8065fd7 (patch) | |
tree | 6be6fd5e1d7ebe81ee596e8419ecea4b6a5beb68 /src/core/SkBitmapProvider.h | |
parent | dc87a7d8ea51b05ba2e8d86a2665461ff641b971 (diff) |
Avoid SkImage ref churn in short lived SkBitmapProvider
SkBitmapProvider is always stack-allocated and tightly-scoped. It
should be safe to store a SkImage rawptr instead of a ref object.
R=reed@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2424813002
Review-Url: https://codereview.chromium.org/2424813002
Diffstat (limited to 'src/core/SkBitmapProvider.h')
-rw-r--r-- | src/core/SkBitmapProvider.h | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/core/SkBitmapProvider.h b/src/core/SkBitmapProvider.h index 9901c0fc1a..2080104b87 100644 --- a/src/core/SkBitmapProvider.h +++ b/src/core/SkBitmapProvider.h @@ -15,10 +15,10 @@ class SkBitmapProvider { public: explicit SkBitmapProvider(const SkBitmap& bm) : fBitmap(bm) {} - explicit SkBitmapProvider(const SkImage* img) : fImage(SkSafeRef(img)) {} + explicit SkBitmapProvider(const SkImage* img) : fImage(img) {} SkBitmapProvider(const SkBitmapProvider& other) : fBitmap(other.fBitmap) - , fImage(SkSafeRef(other.fImage.get())) + , fImage(other.fImage) {} int width() const; @@ -38,8 +38,14 @@ public: bool asBitmap(SkBitmap*) const; private: - SkBitmap fBitmap; - SkAutoTUnref<const SkImage> fImage; + // Stack-allocated only. + void* operator new(size_t) = delete; + void* operator new(size_t, void*) = delete; + + SkBitmap fBitmap; + // SkBitmapProvider is always short-lived/stack allocated, and the source image is guaranteed + // to outlive its scope => we can store a raw ptr to avoid ref churn. + const SkImage* fImage; }; #endif |