#include "src/gpu/graphite/ProxyCache.h"
#include "include/core/SkBitmap.h"
#include "include/core/SkPixelRef.h"
#include "include/gpu/GpuTypes.h"
#include "src/core/SkMipmap.h"
#include "src/gpu/ResourceKey.h"
#include "src/gpu/graphite/RecorderPriv.h"
#include "src/gpu/graphite/Texture.h"
#include "src/gpu/graphite/TextureProxy.h"
#include "src/gpu/graphite/TextureUtils.h"
usingnamespaceskia_private;
DECLARE_SKMESSAGEBUS_MESSAGE(…)
namespace {
void make_bitmap_key(skgpu::UniqueKey* key, const SkBitmap& bm) { … }
sk_sp<SkIDChangeListener> make_unique_key_invalidation_listener(const skgpu::UniqueKey& key,
uint32_t recorderID) { … }
}
namespace skgpu::graphite {
ProxyCache::ProxyCache(uint32_t recorderID) : … { … }
ProxyCache::~ProxyCache() { … }
uint32_t ProxyCache::UniqueKeyHash::operator()(const UniqueKey& key) const { … }
sk_sp<TextureProxy> ProxyCache::findOrCreateCachedProxy(Recorder* recorder,
const SkBitmap& bitmap,
std::string_view label) { … }
sk_sp<TextureProxy> ProxyCache::findOrCreateCachedProxy(Recorder* recorder,
const UniqueKey& key,
BitmapGeneratorContext context,
BitmapGeneratorFn generator,
std::string_view label) { … }
void ProxyCache::purgeAll() { … }
void ProxyCache::processInvalidKeyMsgs() { … }
void ProxyCache::freeUniquelyHeld() { … }
void ProxyCache::purgeProxiesNotUsedSince(const skgpu::StdSteadyClock::time_point* purgeTime) { … }
#if defined(GPU_TEST_UTILS)
int ProxyCache::numCached() const {
return fCache.count();
}
sk_sp<TextureProxy> ProxyCache::find(const SkBitmap& bitmap) {
skgpu::UniqueKey key;
make_bitmap_key(&key, bitmap);
if (sk_sp<TextureProxy>* cached = fCache.find(key)) {
return *cached;
}
return nullptr;
}
void ProxyCache::forceProcessInvalidKeyMsgs() {
this->processInvalidKeyMsgs();
}
void ProxyCache::forceFreeUniquelyHeld() {
this->freeUniquelyHeld();
}
void ProxyCache::forcePurgeProxiesNotUsedSince(skgpu::StdSteadyClock::time_point purgeTime) {
this->purgeProxiesNotUsedSince(&purgeTime);
}
#endif
}