• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2010 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef ANDROID_HWUI_PATCH_CACHE_H
18 #define ANDROID_HWUI_PATCH_CACHE_H
19 
20 #include <utils/KeyedVector.h>
21 
22 #include "Debug.h"
23 #include "Patch.h"
24 
25 namespace android {
26 namespace uirenderer {
27 
28 ///////////////////////////////////////////////////////////////////////////////
29 // Defines
30 ///////////////////////////////////////////////////////////////////////////////
31 
32 // Debug
33 #if DEBUG_PATCHES
34     #define PATCH_LOGD(...) ALOGD(__VA_ARGS__)
35 #else
36     #define PATCH_LOGD(...)
37 #endif
38 
39 ///////////////////////////////////////////////////////////////////////////////
40 // Cache
41 ///////////////////////////////////////////////////////////////////////////////
42 
43 class PatchCache {
44 public:
45     PatchCache();
46     PatchCache(uint32_t maxCapacity);
47     ~PatchCache();
48 
49     Patch* get(const uint32_t bitmapWidth, const uint32_t bitmapHeight,
50             const float pixelWidth, const float pixelHeight,
51             const int32_t* xDivs, const int32_t* yDivs, const uint32_t* colors,
52             const uint32_t width, const uint32_t height, const int8_t numColors);
53     void clear();
54 
getSize()55     uint32_t getSize() const {
56         return mCache.size();
57     }
58 
getMaxSize()59     uint32_t getMaxSize() const {
60         return mMaxEntries;
61     }
62 
63 private:
64     /**
65      * Description of a patch.
66      */
67     struct PatchDescription {
PatchDescriptionPatchDescription68         PatchDescription(): bitmapWidth(0), bitmapHeight(0), pixelWidth(0), pixelHeight(0),
69                 xCount(0), yCount(0), emptyCount(0), colorKey(0) {
70         }
71 
PatchDescriptionPatchDescription72         PatchDescription(const uint32_t bitmapWidth, const uint32_t bitmapHeight,
73                 const float pixelWidth, const float pixelHeight,
74                 const uint32_t xCount, const uint32_t yCount,
75                 const int8_t emptyCount, const uint32_t colorKey):
76                 bitmapWidth(bitmapWidth), bitmapHeight(bitmapHeight),
77                 pixelWidth(pixelWidth), pixelHeight(pixelHeight),
78                 xCount(xCount), yCount(yCount),
79                 emptyCount(emptyCount), colorKey(colorKey) {
80         }
81 
82         static int compare(const PatchDescription& lhs, const PatchDescription& rhs);
83 
84         bool operator==(const PatchDescription& other) const {
85             return compare(*this, other) == 0;
86         }
87 
88         bool operator!=(const PatchDescription& other) const {
89             return compare(*this, other) != 0;
90         }
91 
strictly_order_typePatchDescription92         friend inline int strictly_order_type(const PatchDescription& lhs,
93                 const PatchDescription& rhs) {
94             return PatchDescription::compare(lhs, rhs) < 0;
95         }
96 
compare_typePatchDescription97         friend inline int compare_type(const PatchDescription& lhs,
98                 const PatchDescription& rhs) {
99             return PatchDescription::compare(lhs, rhs);
100         }
101 
102     private:
103         uint32_t bitmapWidth;
104         uint32_t bitmapHeight;
105         float pixelWidth;
106         float pixelHeight;
107         uint32_t xCount;
108         uint32_t yCount;
109         int8_t emptyCount;
110         uint32_t colorKey;
111 
112     }; // struct PatchDescription
113 
114     uint32_t mMaxEntries;
115     KeyedVector<PatchDescription, Patch*> mCache;
116 
117 }; // class PatchCache
118 
119 }; // namespace uirenderer
120 }; // namespace android
121 
122 #endif // ANDROID_HWUI_PATCH_CACHE_H
123