Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(152)

Unified Diff: src/core/SkBitmapCache.cpp

Issue 471473002: Optimize CSS box-shadow performance (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: based on SkBitmapCache Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/core/SkBitmapCache.cpp
diff --git a/src/core/SkBitmapCache.cpp b/src/core/SkBitmapCache.cpp
index de52b63b5e7eda5209f21d87e99eb8a42b66877a..a5bc8646c4ffbca1d2ebfbac38ac6420ff5b019f 100644
--- a/src/core/SkBitmapCache.cpp
+++ b/src/core/SkBitmapCache.cpp
@@ -39,6 +39,34 @@ public:
SkIRect fBounds;
};
+struct RRectBlurKey : public SkScaledImageCache::Key {
+public:
+ RRectBlurKey(SkScalar sigma, const SkRRect rrect)
+ : fSigma(sigma)
+ , fRRect(rrect) {
+ this->init(sizeof(fSigma) + sizeof(fRRect));
+ }
+
+ SkScalar fSigma;
+ SkRRect fRRect;
+};
+
+struct RectsBlurKey : public SkScaledImageCache::Key {
+public:
+ RectsBlurKey(SkScalar sigma, int32_t count, const SkRect rects[])
+ : fSigma(sigma)
+ , fRecCount(count) {
+ for (int i = 0; i < count; i++) {
+ fRects[i] = rects[i];
+ }
+ this->init(sizeof(fSigma) + sizeof(fRecCount) + sizeof(SkRect) * fRecCount);
+ }
+
+ SkScalar fSigma;
+ int32_t fRecCount;
+ SkRect fRects[2];
+};
+
//////////////////////////////////////////////////////////////////////////////////////////
SkScaledImageCache::ID* SkBitmapCache::FindAndLock(const SkBitmap& src,
@@ -89,3 +117,37 @@ SkScaledImageCache::ID* SkMipMapCache::AddAndLock(const SkBitmap& src, const SkM
return SkScaledImageCache::AddAndLock(key, result);
}
+////
+
+SkScaledImageCache::ID* SkBitmapCache::FindAndLock(SkScalar sigma,
+ const SkRRect rrect,
+ SkBitmap* result) {
+ RRectBlurKey key(sigma, rrect);
+ return SkScaledImageCache::FindAndLock(key, result);
+}
+
+SkScaledImageCache::ID* SkBitmapCache::AddAndLock(SkScalar sigma,
+ const SkRRect rrect,
+ const SkBitmap& bitmap) {
+ RRectBlurKey key(sigma, rrect);
+ return SkScaledImageCache::AddAndLock(key, bitmap);
+}
+
+////
+
+SkScaledImageCache::ID* SkBitmapCache::FindAndLock(SkScalar sigma,
+ unsigned count,
+ const SkRect rects[],
+ SkBitmap* result) {
+ RectsBlurKey key(sigma, count, rects);
+ return SkScaledImageCache::FindAndLock(key, result);
+}
+
+SkScaledImageCache::ID* SkBitmapCache::AddAndLock(SkScalar sigma,
+ unsigned count,
+ const SkRect rects[],
+ const SkBitmap& bitmap) {
+ RectsBlurKey key(sigma, count, rects);
+ return SkScaledImageCache::AddAndLock(key, bitmap);
+}
+

Powered by Google App Engine
This is Rietveld 408576698