• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 /*
3  * Copyright 2008 The Android Open Source Project
4  *
5  * Use of this source code is governed by a BSD-style license that can be
6  * found in the LICENSE file.
7  */
8 
9 
10 #ifndef SkImageRef_GlobalPool_DEFINED
11 #define SkImageRef_GlobalPool_DEFINED
12 
13 #include "SkImageRef.h"
14 
15 class SkImageRef_GlobalPool : public SkImageRef {
16 public:
17     // if pool is null, use the global pool
18     SkImageRef_GlobalPool(SkStream*, SkBitmap::Config, int sampleSize = 1);
19     virtual ~SkImageRef_GlobalPool();
20 
21     // overrides
getFactory()22     virtual Factory getFactory() const {
23         return Create;
24     }
25     static SkPixelRef* Create(SkFlattenableReadBuffer&);
26 
27     SK_DECLARE_PIXEL_REF_REGISTRAR()
28 
29     // API to control the global pool
30 
31     /** Return the amount specified as the budget for the cache (in bytes).
32      */
33     static size_t GetRAMBudget();
34 
35     /** Set a new budget value for the cache.
36      */
37     static void SetRAMBudget(size_t);
38 
39     /** Return how much ram is currently in use by the global cache.
40      */
41     static size_t GetRAMUsed();
42 
43     /** Free up (approximately) enough such that the amount used by the cache
44      is <= the specified amount. Since some images may be "in use", the
45      amount actually freed may not always result in a ram usage value <=
46      to the requested amount. In addition, because of the
47      chunky nature of the cache, the resulting usage may be < the requested
48      amount.
49      */
50     static void SetRAMUsed(size_t usageInBytes);
51 
52     static void DumpPool();
53 
54 protected:
55     virtual bool onDecode(SkImageDecoder* codec, SkStream* stream,
56                           SkBitmap* bitmap, SkBitmap::Config config,
57                           SkImageDecoder::Mode mode);
58 
59     virtual void onUnlockPixels();
60 
61     SkImageRef_GlobalPool(SkFlattenableReadBuffer&);
62 
63 private:
64     typedef SkImageRef INHERITED;
65 };
66 
67 #endif
68