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