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