d98aa2de9a
We now use a copy of SkPaint objects to avoid having it changed from under us. We reuse copies that have not changed. We also copy the SkMatrix every time to avoid the same problem. Change-Id: If3fd80698f2d43ea16d23302063e0fd8d0549027
74 lines
2.1 KiB
C++
74 lines
2.1 KiB
C++
/*
|
|
* 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_UI_RESOURCE_CACHE_H
|
|
#define ANDROID_UI_RESOURCE_CACHE_H
|
|
|
|
#include <SkBitmap.h>
|
|
#include <SkiaShader.h>
|
|
#include <utils/KeyedVector.h>
|
|
|
|
namespace android {
|
|
namespace uirenderer {
|
|
|
|
/**
|
|
* Type of Resource being cached
|
|
*/
|
|
enum ResourceType {
|
|
kBitmap,
|
|
kShader,
|
|
};
|
|
|
|
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(const void* resource, ResourceType resourceType);
|
|
void decrementRefcount(void* resource);
|
|
void decrementRefcount(SkBitmap* resource);
|
|
void decrementRefcount(SkiaShader* resource);
|
|
void recycle(void* resource);
|
|
void recycle(SkBitmap* resource);
|
|
void destructor(SkBitmap* resource);
|
|
void destructor(SkiaShader* resource);
|
|
private:
|
|
void deleteResourceReference(void* resource, ResourceReference* ref);
|
|
void incrementRefcount(void* resource, ResourceType resourceType);
|
|
void logCache();
|
|
};
|
|
|
|
}; // namespace uirenderer
|
|
}; // namespace android
|
|
|
|
#endif // ANDROID_UI_RESOURCE_CACHE_H
|