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

Side by Side Diff: tools/LazyDecodeBitmap.cpp

Issue 19109002: Add the lazy decoder from PictureFlags to SkImageDecoder (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Move LazyDecodeBitmap to its own cpp/h. Created 7 years, 5 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 #include "LazyDecodeBitmap.h"
scroggo 2013/07/15 18:02:41 Copyright header.
2
3 #include "PictureRenderingFlags.h" // --deferImageDecoding is defined here.
4 #include "SkData.h"
5 #include "SkImageDecoder.h"
6 #include "SkForceLinking.h"
7 #include "SkLruImageCache.h"
8 #include "SkPurgeableImageCache.h"
9 #include "SkCommandLineFlags.h"
10
11 __SK_FORCE_IMAGE_DECODER_LINKING;
12
13 DEFINE_bool(useVolatileCache, false, "Use a volatile cache for deferred image de coding pixels. "
14 "Only meaningful if --deferImageDecoding is set to true and the plat form has an "
15 "implementation.");
16
17 SkLruImageCache gLruImageCache(1024*1024);
18
19 // Simple cache selector to choose between a purgeable cache for large images an d the standard one
20 // for smaller images.
21 //
22 class ElasticCacheSelector : public SkBitmapFactory::CacheSelector {
scroggo 2013/07/15 18:02:41 Naming nit: I don't see what makes this CacheSelec
sglez 2013/07/16 15:59:33 How about just CacheSelector?
scroggo 2013/07/16 16:06:18 Fine with me.
23
24 public:
25 ElasticCacheSelector() {
26 fPurgeableImageCache = SkPurgeableImageCache::Create();
27 }
28
29 ~ElasticCacheSelector() {
30 SkSafeUnref(fPurgeableImageCache);
31 }
32
33 virtual SkImageCache* selectCache(const SkImage::Info& info) SK_OVERRIDE {
34 if (info.fWidth * info.fHeight > 32 * 1024 && fPurgeableImageCache != NU LL) {
35 return fPurgeableImageCache;
36 }
37 return &gLruImageCache;
38 }
39 private:
40 SkImageCache* fPurgeableImageCache;
41 };
42
43 static ElasticCacheSelector gCacheSelector;
44 static SkBitmapFactory gFactory(&SkImageDecoder::DecodeMemoryToTarget);
45
46 bool LazyDecodeBitmap(const void* buffer, size_t size, SkBitmap* bitmap) {
47 void* copiedBuffer = sk_malloc_throw(size);
48 memcpy(copiedBuffer, buffer, size);
49 SkAutoDataUnref data(SkData::NewFromMalloc(copiedBuffer, size));
50
51 static bool gOnce;
52 if (!gOnce) {
53 // Only use the cache selector if there is a purgeable image cache to us e for large
54 // images.
55 if (FLAGS_useVolatileCache && SkAutoTUnref<SkImageCache>(
56 SkPurgeableImageCache::Create()).get() != NULL) {
57 gFactory.setCacheSelector(&gCacheSelector);
58 } else {
59 gFactory.setImageCache(&gLruImageCache);
60 }
61 gOnce = true;
62 }
63 return gFactory.installPixelRef(data, bitmap);
64 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698