blob: 1e902d427cd58cd28629d1147f32cd4fa1947a53 [file] [log] [blame] [edit]
/*
* Copyright 2025 Google LLC
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "src/gpu/graphite/ThreadSafeResourceProvider.h"
#include "src/gpu/graphite/ResourceProvider.h"
#include "src/gpu/graphite/Sampler.h"
namespace skgpu::graphite {
ThreadSafeResourceProvider::ThreadSafeResourceProvider(
std::unique_ptr<ResourceProvider> resourceProvider)
: fWrappedProvider(std::move(resourceProvider)) {}
sk_sp<Sampler> ThreadSafeResourceProvider::findOrCreateCompatibleSampler(const SamplerDesc& desc) {
SkAutoSpinlock lock{fSpinLock};
sk_sp<Sampler> sampler = fWrappedProvider->findOrCreateCompatibleSampler(desc);
SkAssertResult(sampler->gpuMemorySize() == 0);
return sampler;
}
#if defined(SK_DEBUG)
size_t ThreadSafeResourceProvider::getResourceCacheLimit() const {
SkAutoSpinlock lock{fSpinLock};
return fWrappedProvider->getResourceCacheLimit();
}
size_t ThreadSafeResourceProvider::getResourceCacheCurrentBudgetedBytes() const {
SkAutoSpinlock lock{fSpinLock};
return fWrappedProvider->getResourceCacheCurrentBudgetedBytes();
}
size_t ThreadSafeResourceProvider::getResourceCacheCurrentPurgeableBytes() const {
SkAutoSpinlock lock{fSpinLock};
return fWrappedProvider->getResourceCacheCurrentPurgeableBytes();
}
#endif
void ThreadSafeResourceProvider::dumpMemoryStatistics(SkTraceMemoryDump* traceMemoryDump) const {
SkAutoSpinlock lock{fSpinLock};
fWrappedProvider->dumpMemoryStatistics(traceMemoryDump);
}
void ThreadSafeResourceProvider::freeGpuResources() {
SkAutoSpinlock lock{fSpinLock};
fWrappedProvider->freeGpuResources();
}
void ThreadSafeResourceProvider::purgeResourcesNotUsedSince(StdSteadyClock::time_point purgeTime) {
SkAutoSpinlock lock{fSpinLock};
fWrappedProvider->purgeResourcesNotUsedSince(purgeTime);
}
void ThreadSafeResourceProvider::forceProcessReturnedResources() {
SkAutoSpinlock lock{fSpinLock};
fWrappedProvider->forceProcessReturnedResources();
}
} // namespace skgpu::graphite