8#ifndef GrGpuResource_DEFINED
9#define GrGpuResource_DEFINED
47 bool unique()
const {
return fRefCnt == 1; }
53 (void)fRefCnt.fetch_add(+1, std::memory_order_relaxed);
64 if (1 == fRefCnt.fetch_add(-1, std::memory_order_acq_rel)) {
71 (void)fCommandBufferUsageCnt.fetch_add(+1, std::memory_order_relaxed);
75 SkASSERT(!this->hasNoCommandBufferUsages());
76 if (1 == fCommandBufferUsageCnt.fetch_add(-1, std::memory_order_acq_rel)) {
81#if defined(GR_TEST_UTILS)
82 int32_t testingOnly_getRefCnt()
const {
return this->getRefCnt(); }
86 GrIORef() : fRefCnt(1), fCommandBufferUsageCnt(0) {}
90 return SkToBool(this->hasNoCommandBufferUsages());
97 (void)fRefCnt.fetch_add(+1, std::memory_order_relaxed);
102 static_cast<const DERIVED*
>(
this)->notifyARefCntIsZero(removedRef);
105 int32_t getRefCnt()
const {
return fRefCnt.load(std::memory_order_relaxed); }
107 bool hasNoCommandBufferUsages()
const {
108 if (0 == fCommandBufferUsageCnt.load(std::memory_order_acquire)) {
117 mutable std::atomic<int32_t> fRefCnt;
118 mutable std::atomic<int32_t> fCommandBufferUsageCnt;
157 if (kInvalidGpuMemorySize == fGpuMemorySize) {
159 SkASSERT(kInvalidGpuMemorySize != fGpuMemorySize);
161 return fGpuMemorySize;
238#if defined(GR_TEST_UTILS)
239 virtual const GrSurface* asSurface()
const {
return nullptr; }
280 const char*
type,
size_t size)
const;
284 bool isPurgeable()
const;
286 bool hasNoCommandBufferUsages()
const;
313 void removeUniqueKey();
315 void removeScratchKey();
317 void makeUnbudgeted();
325 int fCacheArrayIndex;
329 skgpu::StdSteadyClock::time_point fTimeWhenBecamePurgeable;
331 static const size_t kInvalidGpuMemorySize = ~static_cast<size_t>(0);
338 mutable size_t fGpuMemorySize = kInvalidGpuMemorySize;
341 bool fRefsWrappedObjects =
false;
static constexpr bool SkToBool(const T &x)
static constexpr uint32_t SK_InvalidUniqueID
bool operator!=(const UniqueID &other) const
bool operator==(const UniqueID &other) const
virtual void computeScratchKey(skgpu::ScratchKey *) const
std::string getLabel() const
size_t gpuMemorySize() const
virtual size_t onGpuMemorySize() const =0
void dumpMemoryStatisticsPriv(SkTraceMemoryDump *traceMemoryDump, const SkString &resourceName, const char *type, size_t size) const
const GrDirectContext * getContext() const
UniqueID uniqueID() const
virtual void dumpMemoryStatistics(SkTraceMemoryDump *traceMemoryDump) const
bool wasDestroyed() const
SkString getResourceName() const
const skgpu::UniqueKey & getUniqueKey() const
virtual const char * getResourceType() const =0
virtual void onSetLabel()=0
void registerWithCacheWrapped(GrWrapCacheable)
virtual void setMemoryBacking(SkTraceMemoryDump *, const SkString &) const
static uint32_t CreateUniqueID()
void registerWithCache(skgpu::Budgeted)
void setLabel(std::string_view label)
CacheAccess cacheAccess()
ProxyAccess proxyAccess()
ResourcePriv resourcePriv()
bool internalHasNoCommandBufferUsages() const
void refCommandBuffer() const
void unrefCommandBuffer() const
void addInitialRef() const
bool internalHasRef() const