diff options
Diffstat (limited to 'libs/hwui/ResourceCache.h')
-rw-r--r-- | libs/hwui/ResourceCache.h | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/libs/hwui/ResourceCache.h b/libs/hwui/ResourceCache.h new file mode 100644 index 0000000..b0abe2c --- /dev/null +++ b/libs/hwui/ResourceCache.h @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ANDROID_HWUI_RESOURCE_CACHE_H +#define ANDROID_HWUI_RESOURCE_CACHE_H + +#include <SkBitmap.h> +#include <SkiaColorFilter.h> +#include <SkiaShader.h> +#include <utils/KeyedVector.h> + +namespace android { +namespace uirenderer { + +/** + * Type of Resource being cached + */ +enum ResourceType { + kBitmap, + kShader, + kColorFilter, +}; + +class ResourceReference { +public: + + ResourceReference() { refCount = 0; recycled = false; destroyed = false;} + ResourceReference(ResourceType type) { + refCount = 0; recycled = false; destroyed = false; resourceType = type; + } + + int refCount; + bool recycled; + bool destroyed; + ResourceType resourceType; +}; + +class ResourceCache { + KeyedVector<void *, ResourceReference *>* mCache; +public: + ResourceCache(); + ~ResourceCache(); + void incrementRefcount(SkBitmap* resource); + void incrementRefcount(SkiaShader* resource); + void incrementRefcount(SkiaColorFilter* resource); + void incrementRefcount(const void* resource, ResourceType resourceType); + void decrementRefcount(void* resource); + void decrementRefcount(SkBitmap* resource); + void decrementRefcount(SkiaShader* resource); + void decrementRefcount(SkiaColorFilter* resource); + void recycle(void* resource); + void recycle(SkBitmap* resource); + void destructor(SkBitmap* resource); + void destructor(SkiaShader* resource); + void destructor(SkiaColorFilter* resource); +private: + void deleteResourceReference(void* resource, ResourceReference* ref); + void incrementRefcount(void* resource, ResourceType resourceType); + void logCache(); + + /** + * Used to increment, decrement, and destroy. Incrementing is generally accessed on the UI + * thread, but destroying resources may be called from the GC thread, the finalizer thread, + * or a reference queue finalization thread. + */ + mutable Mutex mLock; +}; + +}; // namespace uirenderer +}; // namespace android + +#endif // ANDROID_HWUI_RESOURCE_CACHE_H |