Lines Matching refs:resource
105 void GrResourceCache::insertResource(GrGpuResource* resource) { in insertResource() argument
107 SkASSERT(resource); in insertResource()
108 SkASSERT(!this->isInCache(resource)); in insertResource()
109 SkASSERT(!resource->wasDestroyed()); in insertResource()
110 SkASSERT(!resource->resourcePriv().isPurgeable()); in insertResource()
114 resource->cacheAccess().setTimestamp(this->getNextTimestamp()); in insertResource()
116 this->addToNonpurgeableArray(resource); in insertResource()
118 size_t size = resource->gpuMemorySize(); in insertResource()
125 if (GrBudgetedType::kBudgeted == resource->resourcePriv().budgetedType()) { in insertResource()
135 SkASSERT(!resource->cacheAccess().isUsableAsScratch()); in insertResource()
139 void GrResourceCache::removeResource(GrGpuResource* resource) { in removeResource() argument
142 SkASSERT(this->isInCache(resource)); in removeResource()
144 size_t size = resource->gpuMemorySize(); in removeResource()
145 if (resource->resourcePriv().isPurgeable()) { in removeResource()
146 fPurgeableQueue.remove(resource); in removeResource()
149 this->removeFromNonpurgeableArray(resource); in removeResource()
154 if (GrBudgetedType::kBudgeted == resource->resourcePriv().budgetedType()) { in removeResource()
161 if (resource->cacheAccess().isUsableAsScratch()) { in removeResource()
162 fScratchMap.remove(resource->resourcePriv().getScratchKey(), resource); in removeResource()
164 if (resource->getUniqueKey().isValid()) { in removeResource()
165 fUniqueHash.remove(resource->getUniqueKey()); in removeResource()
243 void GrResourceCache::refResource(GrGpuResource* resource) { in refResource() argument
244 SkASSERT(resource); in refResource()
245 SkASSERT(resource->getContext()->priv().getResourceCache() == this); in refResource()
246 if (resource->cacheAccess().hasRef()) { in refResource()
247 resource->ref(); in refResource()
249 this->refAndMakeResourceMRU(resource); in refResource()
258 bool operator()(const GrGpuResource* resource) const { in operator ()()
268 GrGpuResource* resource = fScratchMap.find(scratchKey, AvailableForScratchUse()); in findAndRefScratchResource() local
269 if (resource) { in findAndRefScratchResource()
270 fScratchMap.remove(scratchKey, resource); in findAndRefScratchResource()
271 this->refAndMakeResourceMRU(resource); in findAndRefScratchResource()
274 return resource; in findAndRefScratchResource()
277 void GrResourceCache::willRemoveScratchKey(const GrGpuResource* resource) { in willRemoveScratchKey() argument
279 SkASSERT(resource->resourcePriv().getScratchKey().isValid()); in willRemoveScratchKey()
280 if (resource->cacheAccess().isUsableAsScratch()) { in willRemoveScratchKey()
281 fScratchMap.remove(resource->resourcePriv().getScratchKey(), resource); in willRemoveScratchKey()
285 void GrResourceCache::removeUniqueKey(GrGpuResource* resource) { in removeUniqueKey() argument
289 if (resource->getUniqueKey().isValid()) { in removeUniqueKey()
290 SkASSERT(resource == fUniqueHash.find(resource->getUniqueKey())); in removeUniqueKey()
291 fUniqueHash.remove(resource->getUniqueKey()); in removeUniqueKey()
293 resource->cacheAccess().removeUniqueKey(); in removeUniqueKey()
294 if (resource->cacheAccess().isUsableAsScratch()) { in removeUniqueKey()
295 fScratchMap.insert(resource->resourcePriv().getScratchKey(), resource); in removeUniqueKey()
301 SkASSERT(!resource->resourcePriv().isPurgeable()); in removeUniqueKey()
305 void GrResourceCache::changeUniqueKey(GrGpuResource* resource, const skgpu::UniqueKey& newKey) { in changeUniqueKey() argument
307 SkASSERT(resource); in changeUniqueKey()
308 SkASSERT(this->isInCache(resource)); in changeUniqueKey()
325 if (resource->getUniqueKey().isValid()) { in changeUniqueKey()
326 SkASSERT(resource == fUniqueHash.find(resource->getUniqueKey())); in changeUniqueKey()
327 fUniqueHash.remove(resource->getUniqueKey()); in changeUniqueKey()
328 SkASSERT(nullptr == fUniqueHash.find(resource->getUniqueKey())); in changeUniqueKey()
333 if (resource->cacheAccess().isUsableAsScratch()) { in changeUniqueKey()
334 fScratchMap.remove(resource->resourcePriv().getScratchKey(), resource); in changeUniqueKey()
338 resource->cacheAccess().setUniqueKey(newKey); in changeUniqueKey()
339 fUniqueHash.add(resource); in changeUniqueKey()
341 this->removeUniqueKey(resource); in changeUniqueKey()
347 void GrResourceCache::refAndMakeResourceMRU(GrGpuResource* resource) { in refAndMakeResourceMRU() argument
349 SkASSERT(resource); in refAndMakeResourceMRU()
350 SkASSERT(this->isInCache(resource)); in refAndMakeResourceMRU()
352 if (resource->resourcePriv().isPurgeable()) { in refAndMakeResourceMRU()
354 fPurgeableBytes -= resource->gpuMemorySize(); in refAndMakeResourceMRU()
355 fPurgeableQueue.remove(resource); in refAndMakeResourceMRU()
356 this->addToNonpurgeableArray(resource); in refAndMakeResourceMRU()
357 } else if (!resource->cacheAccess().hasRefOrCommandBufferUsage() && in refAndMakeResourceMRU()
358 resource->resourcePriv().budgetedType() == GrBudgetedType::kBudgeted) { in refAndMakeResourceMRU()
362 resource->cacheAccess().ref(); in refAndMakeResourceMRU()
364 resource->cacheAccess().setTimestamp(this->getNextTimestamp()); in refAndMakeResourceMRU()
368 void GrResourceCache::notifyARefCntReachedZero(GrGpuResource* resource, in notifyARefCntReachedZero() argument
371 SkASSERT(resource); in notifyARefCntReachedZero()
372 SkASSERT(!resource->wasDestroyed()); in notifyARefCntReachedZero()
373 SkASSERT(this->isInCache(resource)); in notifyARefCntReachedZero()
376 SkASSERT(fNonpurgeableResources[*resource->cacheAccess().accessCacheIndex()] == resource); in notifyARefCntReachedZero()
379 if (resource->cacheAccess().isUsableAsScratch()) { in notifyARefCntReachedZero()
380 fScratchMap.insert(resource->resourcePriv().getScratchKey(), resource); in notifyARefCntReachedZero()
384 if (resource->cacheAccess().hasRefOrCommandBufferUsage()) { in notifyARefCntReachedZero()
393 if (resource->resourcePriv().isPurgeable()) { in notifyARefCntReachedZero()
394 fNewlyPurgeableResourceForValidation = resource; in notifyARefCntReachedZero()
397 resource->cacheAccess().setTimestamp(this->getNextTimestamp()); in notifyARefCntReachedZero()
400 if (!resource->resourcePriv().isPurgeable() && in notifyARefCntReachedZero()
401 resource->resourcePriv().budgetedType() == GrBudgetedType::kBudgeted) { in notifyARefCntReachedZero()
405 if (!resource->resourcePriv().isPurgeable()) { in notifyARefCntReachedZero()
410 this->removeFromNonpurgeableArray(resource); in notifyARefCntReachedZero()
411 fPurgeableQueue.insert(resource); in notifyARefCntReachedZero()
412 resource->cacheAccess().setTimeWhenResourceBecomePurgeable(); in notifyARefCntReachedZero()
413 fPurgeableBytes += resource->gpuMemorySize(); in notifyARefCntReachedZero()
415 bool hasUniqueKey = resource->getUniqueKey().isValid(); in notifyARefCntReachedZero()
417 GrBudgetedType budgetedType = resource->resourcePriv().budgetedType(); in notifyARefCntReachedZero()
422 bool hasKey = resource->resourcePriv().getScratchKey().isValid() || hasUniqueKey; in notifyARefCntReachedZero()
433 if (!resource->resourcePriv().refsWrappedObjects() && in notifyARefCntReachedZero()
434 resource->resourcePriv().getScratchKey().isValid()) { in notifyARefCntReachedZero()
436 if (this->wouldFit(resource->gpuMemorySize())) { in notifyARefCntReachedZero()
437 resource->resourcePriv().makeBudgeted(); in notifyARefCntReachedZero()
444 resource->cacheAccess().release(); in notifyARefCntReachedZero()
450 void GrResourceCache::didChangeBudgetStatus(GrGpuResource* resource) { in didChangeBudgetStatus() argument
452 SkASSERT(resource); in didChangeBudgetStatus()
453 SkASSERT(this->isInCache(resource)); in didChangeBudgetStatus()
455 size_t size = resource->gpuMemorySize(); in didChangeBudgetStatus()
460 SkDEBUGCODE(bool wasPurgeable = resource->resourcePriv().isPurgeable()); in didChangeBudgetStatus()
461 if (resource->resourcePriv().budgetedType() == GrBudgetedType::kBudgeted) { in didChangeBudgetStatus()
468 if (!resource->resourcePriv().isPurgeable() && in didChangeBudgetStatus()
469 !resource->cacheAccess().hasRefOrCommandBufferUsage()) { in didChangeBudgetStatus()
472 if (resource->cacheAccess().isUsableAsScratch()) { in didChangeBudgetStatus()
473 fScratchMap.insert(resource->resourcePriv().getScratchKey(), resource); in didChangeBudgetStatus()
477 SkASSERT(resource->resourcePriv().budgetedType() != GrBudgetedType::kUnbudgetedCacheable); in didChangeBudgetStatus()
480 if (!resource->resourcePriv().isPurgeable() && in didChangeBudgetStatus()
481 !resource->cacheAccess().hasRefOrCommandBufferUsage()) { in didChangeBudgetStatus()
484 if (!resource->cacheAccess().hasRef() && !resource->getUniqueKey().isValid() && in didChangeBudgetStatus()
485 resource->resourcePriv().getScratchKey().isValid()) { in didChangeBudgetStatus()
486 fScratchMap.remove(resource->resourcePriv().getScratchKey(), resource); in didChangeBudgetStatus()
489 SkASSERT(wasPurgeable == resource->resourcePriv().isPurgeable()); in didChangeBudgetStatus()
519 GrGpuResource* resource = fPurgeableQueue.peek(); in purgeAsNeeded() local
520 SkASSERT(resource->resourcePriv().isPurgeable()); in purgeAsNeeded()
521 resource->cacheAccess().release(); in purgeAsNeeded()
530 GrGpuResource* resource = fPurgeableQueue.peek(); in purgeAsNeeded() local
531 SkASSERT(resource->resourcePriv().isPurgeable()); in purgeAsNeeded()
532 resource->cacheAccess().release(); in purgeAsNeeded()
553 GrGpuResource* resource = fPurgeableQueue.peek(); in purgeUnlockedResources() local
556 resource->cacheAccess().timeWhenResourceBecamePurgeable(); in purgeUnlockedResources()
566 SkASSERT(resource->resourcePriv().isPurgeable()); in purgeUnlockedResources()
567 resource->cacheAccess().release(); in purgeUnlockedResources()
583 GrGpuResource* resource = fPurgeableQueue.at(i); in purgeUnlockedResources() local
586 resource->cacheAccess().timeWhenResourceBecamePurgeable(); in purgeUnlockedResources()
591 SkASSERT(resource->resourcePriv().isPurgeable()); in purgeUnlockedResources()
592 if (!resource->getUniqueKey().isValid()) { in purgeUnlockedResources()
593 *scratchResources.append() = resource; in purgeUnlockedResources()
620 GrGpuResource* resource = fPurgeableQueue.at(i); in purgeToMakeHeadroom() local
621 if (GrBudgetedType::kBudgeted == resource->resourcePriv().budgetedType()) { in purgeToMakeHeadroom()
622 projectedBudget -= resource->gpuMemorySize(); in purgeToMakeHeadroom()
640 for (GrGpuResource* resource : resources) { in purgeToMakeHeadroom()
641 resource->cacheAccess().release(); in purgeToMakeHeadroom()
659 GrGpuResource* resource = fPurgeableQueue.at(i); in purgeUnlockedResources() local
660 SkASSERT(resource->resourcePriv().isPurgeable()); in purgeUnlockedResources()
661 if (!resource->getUniqueKey().isValid()) { in purgeUnlockedResources()
662 *scratchResources.append() = resource; in purgeUnlockedResources()
663 scratchByteCount += resource->gpuMemorySize(); in purgeUnlockedResources()
724 void GrResourceCache::addToNonpurgeableArray(GrGpuResource* resource) { in addToNonpurgeableArray() argument
726 *fNonpurgeableResources.append() = resource; in addToNonpurgeableArray()
727 *resource->cacheAccess().accessCacheIndex() = index; in addToNonpurgeableArray()
730 void GrResourceCache::removeFromNonpurgeableArray(GrGpuResource* resource) { in removeFromNonpurgeableArray() argument
731 int* index = resource->cacheAccess().accessCacheIndex(); in removeFromNonpurgeableArray()
735 SkASSERT(fNonpurgeableResources[*index] == resource); in removeFromNonpurgeableArray()
887 void update(GrGpuResource* resource) { in validate()
888 fBytes += resource->gpuMemorySize(); in validate()
890 if (!resource->resourcePriv().isPurgeable()) { in validate()
894 const skgpu::ScratchKey& scratchKey = resource->resourcePriv().getScratchKey(); in validate()
895 const skgpu::UniqueKey& uniqueKey = resource->getUniqueKey(); in validate()
897 if (resource->cacheAccess().isUsableAsScratch()) { in validate()
899 SkASSERT(GrBudgetedType::kBudgeted == resource->resourcePriv().budgetedType()); in validate()
900 SkASSERT(!resource->cacheAccess().hasRef()); in validate()
903 SkASSERT(!resource->resourcePriv().refsWrappedObjects()); in validate()
905 SkASSERT(GrBudgetedType::kBudgeted != resource->resourcePriv().budgetedType() || in validate()
906 uniqueKey.isValid() || resource->cacheAccess().hasRef()); in validate()
907 SkASSERT(!resource->resourcePriv().refsWrappedObjects()); in validate()
908 SkASSERT(!fScratchMap->has(resource, scratchKey)); in validate()
912 SkASSERT(fUniqueHash->find(uniqueKey) == resource); in validate()
913 SkASSERT(GrBudgetedType::kBudgeted == resource->resourcePriv().budgetedType() || in validate()
914 resource->resourcePriv().refsWrappedObjects()); in validate()
917 if (GrBudgetedType::kBudgeted == resource->resourcePriv().budgetedType()) { in validate()
919 fBudgetedBytes += resource->gpuMemorySize(); in validate()
926 fScratchMap.foreach([&](const GrGpuResource& resource) { in validate() argument
927 SkASSERT(resource.cacheAccess().isUsableAsScratch()); in validate()
983 bool GrResourceCache::isInCache(const GrGpuResource* resource) const { in isInCache()
984 int index = *resource->cacheAccess().accessCacheIndex(); in isInCache()
988 if (index < fPurgeableQueue.count() && fPurgeableQueue.at(index) == resource) { in isInCache()
991 if (index < fNonpurgeableResources.count() && fNonpurgeableResources[index] == resource) { in isInCache()
1004 fUniqueHash.foreach([&](const GrGpuResource& resource){ in countUniqueKeysWithTag() argument
1005 if (0 == strcmp(tag, resource.getUniqueKey().tag())) { in countUniqueKeysWithTag()