aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkBitmapProvider.h
diff options
context:
space:
mode:
authorGravatar fmalita <fmalita@chromium.org>2016-10-17 07:16:05 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-10-17 07:16:05 -0700
commit862a3876086a9367c584598038887b94d8065fd7 (patch)
tree6be6fd5e1d7ebe81ee596e8419ecea4b6a5beb68 /src/core/SkBitmapProvider.h
parentdc87a7d8ea51b05ba2e8d86a2665461ff641b971 (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.h14
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