15c13d89c1332fcc499379b9064b891187b75ca32Chet Haase/* 25c13d89c1332fcc499379b9064b891187b75ca32Chet Haase * Copyright (C) 2010 The Android Open Source Project 35c13d89c1332fcc499379b9064b891187b75ca32Chet Haase * 45c13d89c1332fcc499379b9064b891187b75ca32Chet Haase * Licensed under the Apache License, Version 2.0 (the "License"); 55c13d89c1332fcc499379b9064b891187b75ca32Chet Haase * you may not use this file except in compliance with the License. 65c13d89c1332fcc499379b9064b891187b75ca32Chet Haase * You may obtain a copy of the License at 75c13d89c1332fcc499379b9064b891187b75ca32Chet Haase * 85c13d89c1332fcc499379b9064b891187b75ca32Chet Haase * http://www.apache.org/licenses/LICENSE-2.0 95c13d89c1332fcc499379b9064b891187b75ca32Chet Haase * 105c13d89c1332fcc499379b9064b891187b75ca32Chet Haase * Unless required by applicable law or agreed to in writing, software 115c13d89c1332fcc499379b9064b891187b75ca32Chet Haase * distributed under the License is distributed on an "AS IS" BASIS, 125c13d89c1332fcc499379b9064b891187b75ca32Chet Haase * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135c13d89c1332fcc499379b9064b891187b75ca32Chet Haase * See the License for the specific language governing permissions and 145c13d89c1332fcc499379b9064b891187b75ca32Chet Haase * limitations under the License. 155c13d89c1332fcc499379b9064b891187b75ca32Chet Haase */ 165c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 175b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#ifndef ANDROID_HWUI_RESOURCE_CACHE_H 185b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#define ANDROID_HWUI_RESOURCE_CACHE_H 195c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 207953745dd565167113f8cbfc461bc0521d32d870Romain Guy#include <cutils/compiler.h> 217953745dd565167113f8cbfc461bc0521d32d870Romain Guy 225c13d89c1332fcc499379b9064b891187b75ca32Chet Haase#include <SkBitmap.h> 23ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase#include <SkiaColorFilter.h> 245c13d89c1332fcc499379b9064b891187b75ca32Chet Haase#include <SkiaShader.h> 255c13d89c1332fcc499379b9064b891187b75ca32Chet Haase#include <utils/KeyedVector.h> 265c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 275c13d89c1332fcc499379b9064b891187b75ca32Chet Haasenamespace android { 285c13d89c1332fcc499379b9064b891187b75ca32Chet Haasenamespace uirenderer { 295c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 305c13d89c1332fcc499379b9064b891187b75ca32Chet Haase/** 315c13d89c1332fcc499379b9064b891187b75ca32Chet Haase * Type of Resource being cached 325c13d89c1332fcc499379b9064b891187b75ca32Chet Haase */ 335c13d89c1332fcc499379b9064b891187b75ca32Chet Haaseenum ResourceType { 345c13d89c1332fcc499379b9064b891187b75ca32Chet Haase kBitmap, 355c13d89c1332fcc499379b9064b891187b75ca32Chet Haase kShader, 36ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase kColorFilter, 375a7e828842c26f64bb6e0ef3e0019e1949b245eeChet Haase kPath, 385c13d89c1332fcc499379b9064b891187b75ca32Chet Haase}; 395c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 405c13d89c1332fcc499379b9064b891187b75ca32Chet Haaseclass ResourceReference { 415c13d89c1332fcc499379b9064b891187b75ca32Chet Haasepublic: 425c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 435c13d89c1332fcc499379b9064b891187b75ca32Chet Haase ResourceReference() { refCount = 0; recycled = false; destroyed = false;} 445c13d89c1332fcc499379b9064b891187b75ca32Chet Haase ResourceReference(ResourceType type) { 455c13d89c1332fcc499379b9064b891187b75ca32Chet Haase refCount = 0; recycled = false; destroyed = false; resourceType = type; 465c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 475c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 485c13d89c1332fcc499379b9064b891187b75ca32Chet Haase int refCount; 495c13d89c1332fcc499379b9064b891187b75ca32Chet Haase bool recycled; 505c13d89c1332fcc499379b9064b891187b75ca32Chet Haase bool destroyed; 515c13d89c1332fcc499379b9064b891187b75ca32Chet Haase ResourceType resourceType; 525c13d89c1332fcc499379b9064b891187b75ca32Chet Haase}; 535c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 547953745dd565167113f8cbfc461bc0521d32d870Romain Guyclass ANDROID_API ResourceCache { 555c13d89c1332fcc499379b9064b891187b75ca32Chet Haase KeyedVector<void *, ResourceReference *>* mCache; 565c13d89c1332fcc499379b9064b891187b75ca32Chet Haasepublic: 575c13d89c1332fcc499379b9064b891187b75ca32Chet Haase ResourceCache(); 585c13d89c1332fcc499379b9064b891187b75ca32Chet Haase ~ResourceCache(); 595a7e828842c26f64bb6e0ef3e0019e1949b245eeChet Haase void incrementRefcount(SkPath* resource); 605c13d89c1332fcc499379b9064b891187b75ca32Chet Haase void incrementRefcount(SkBitmap* resource); 615c13d89c1332fcc499379b9064b891187b75ca32Chet Haase void incrementRefcount(SkiaShader* resource); 62ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase void incrementRefcount(SkiaColorFilter* resource); 635c13d89c1332fcc499379b9064b891187b75ca32Chet Haase void incrementRefcount(const void* resource, ResourceType resourceType); 645c13d89c1332fcc499379b9064b891187b75ca32Chet Haase void decrementRefcount(void* resource); 655c13d89c1332fcc499379b9064b891187b75ca32Chet Haase void decrementRefcount(SkBitmap* resource); 665a7e828842c26f64bb6e0ef3e0019e1949b245eeChet Haase void decrementRefcount(SkPath* resource); 675c13d89c1332fcc499379b9064b891187b75ca32Chet Haase void decrementRefcount(SkiaShader* resource); 68ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase void decrementRefcount(SkiaColorFilter* resource); 695c13d89c1332fcc499379b9064b891187b75ca32Chet Haase void recycle(SkBitmap* resource); 705a7e828842c26f64bb6e0ef3e0019e1949b245eeChet Haase void destructor(SkPath* resource); 715c13d89c1332fcc499379b9064b891187b75ca32Chet Haase void destructor(SkBitmap* resource); 725c13d89c1332fcc499379b9064b891187b75ca32Chet Haase void destructor(SkiaShader* resource); 73ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase void destructor(SkiaColorFilter* resource); 745c13d89c1332fcc499379b9064b891187b75ca32Chet Haaseprivate: 755c13d89c1332fcc499379b9064b891187b75ca32Chet Haase void deleteResourceReference(void* resource, ResourceReference* ref); 765c13d89c1332fcc499379b9064b891187b75ca32Chet Haase void incrementRefcount(void* resource, ResourceType resourceType); 775c13d89c1332fcc499379b9064b891187b75ca32Chet Haase void logCache(); 78e7d2295c06ef9b9df6336cbff23007a13fb3f6e4Chet Haase 79e7d2295c06ef9b9df6336cbff23007a13fb3f6e4Chet Haase /** 80e7d2295c06ef9b9df6336cbff23007a13fb3f6e4Chet Haase * Used to increment, decrement, and destroy. Incrementing is generally accessed on the UI 81e7d2295c06ef9b9df6336cbff23007a13fb3f6e4Chet Haase * thread, but destroying resources may be called from the GC thread, the finalizer thread, 82e7d2295c06ef9b9df6336cbff23007a13fb3f6e4Chet Haase * or a reference queue finalization thread. 83e7d2295c06ef9b9df6336cbff23007a13fb3f6e4Chet Haase */ 84e7d2295c06ef9b9df6336cbff23007a13fb3f6e4Chet Haase mutable Mutex mLock; 855c13d89c1332fcc499379b9064b891187b75ca32Chet Haase}; 865c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 875c13d89c1332fcc499379b9064b891187b75ca32Chet Haase}; // namespace uirenderer 885c13d89c1332fcc499379b9064b891187b75ca32Chet Haase}; // namespace android 895c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 905b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#endif // ANDROID_HWUI_RESOURCE_CACHE_H 91