1 /* 2 * Copyright 2014 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef SkBitmapCache_DEFINED 9 #define SkBitmapCache_DEFINED 10 11 #include "SkScalar.h" 12 #include "SkBitmap.h" 13 14 class SkResourceCache; 15 class SkMipMap; 16 17 uint64_t SkMakeResourceCacheSharedIDForBitmap(uint32_t bitmapGenID); 18 19 void SkNotifyBitmapGenIDIsStale(uint32_t bitmapGenID); 20 21 class SkBitmapCache { 22 public: 23 /** 24 * Use this allocator for bitmaps, so they can use ashmem when available. 25 * Returns NULL if the ResourceCache has not been initialized with a DiscardableFactory. 26 */ 27 static SkBitmap::Allocator* GetAllocator(); 28 29 /** 30 * Search based on the src bitmap and inverse scales in X and Y. If found, returns true and 31 * result will be set to the matching bitmap with its pixels already locked. 32 */ 33 static bool Find(const SkBitmap& src, SkScalar invScaleX, SkScalar invScaleY, SkBitmap* result, 34 SkResourceCache* localCache = NULL); 35 36 /* 37 * result must be marked isImmutable() 38 */ 39 static void Add(const SkBitmap& src, SkScalar invScaleX, SkScalar invScaleY, 40 const SkBitmap& result, SkResourceCache* localCache = NULL); 41 42 /** 43 * Search based on the bitmap's genID and subset. If found, returns true and 44 * result will be set to the matching bitmap with its pixels already locked. 45 */ 46 static bool Find(uint32_t genID, const SkIRect& subset, SkBitmap* result, 47 SkResourceCache* localCache = NULL); 48 49 /** 50 * The width and the height of the provided subset must be the same as the result bitmap ones. 51 * result must be marked isImmutable() 52 */ 53 static bool Add(SkPixelRef*, const SkIRect& subset, const SkBitmap& result, 54 SkResourceCache* localCache = NULL); 55 }; 56 57 class SkMipMapCache { 58 public: 59 static const SkMipMap* FindAndRef(const SkBitmap& src, SkResourceCache* localCache = NULL); 60 static const SkMipMap* AddAndRef(const SkBitmap& src, SkResourceCache* localCache = NULL); 61 }; 62 63 #endif 64