Home | History | Annotate | Download | only in hwui
      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_PATH_CACHE_H
     18 #define ANDROID_HWUI_PATH_CACHE_H
     19 
     20 #include <utils/Vector.h>
     21 
     22 #include "Debug.h"
     23 #include "ShapeCache.h"
     24 
     25 #include "utils/Compare.h"
     26 
     27 namespace android {
     28 namespace uirenderer {
     29 
     30 ///////////////////////////////////////////////////////////////////////////////
     31 // Classes
     32 ///////////////////////////////////////////////////////////////////////////////
     33 
     34 struct PathCacheEntry: public ShapeCacheEntry {
     35     PathCacheEntry(SkPath* path, SkPaint* paint):
     36             ShapeCacheEntry(ShapeCacheEntry::kShapePath, paint) {
     37         this->path = path;
     38     }
     39 
     40     PathCacheEntry(): ShapeCacheEntry() {
     41         path = NULL;
     42     }
     43 
     44     bool lessThan(const ShapeCacheEntry& r) const {
     45         const PathCacheEntry& rhs = (const PathCacheEntry&) r;
     46         LTE_INT(path) {
     47             return false;
     48         }
     49         return false;
     50     }
     51 
     52     SkPath* path;
     53 
     54 }; // PathCacheEntry
     55 
     56 /**
     57  * A simple LRU path cache. The cache has a maximum size expressed in bytes.
     58  * Any texture added to the cache causing the cache to grow beyond the maximum
     59  * allowed size will also cause the oldest texture to be kicked out.
     60  */
     61 class PathCache: public ShapeCache<PathCacheEntry> {
     62 public:
     63     PathCache();
     64 
     65     /**
     66      * Returns the texture associated with the specified path. If the texture
     67      * cannot be found in the cache, a new texture is generated.
     68      */
     69     PathTexture* get(SkPath* path, SkPaint* paint);
     70     /**
     71      * Removes an entry.
     72      */
     73     void remove(SkPath* path);
     74     /**
     75      * Removes the specified path. This is meant to be called from threads
     76      * that are not the EGL context thread.
     77      */
     78     void removeDeferred(SkPath* path);
     79     /**
     80      * Process deferred removals.
     81      */
     82     void clearGarbage();
     83 
     84 private:
     85     Vector<SkPath*> mGarbage;
     86     mutable Mutex mLock;
     87 }; // class PathCache
     88 
     89 }; // namespace uirenderer
     90 }; // namespace android
     91 
     92 #endif // ANDROID_HWUI_PATH_CACHE_H
     93