SourceSurface* CanvasImageCache::Lookup(Element* aImage, HTMLCanvasElement* aCanvas, gfx::IntSize* aSize) { if (!gImageCache) return nullptr; ImageCacheEntry* entry = gImageCache->mCache.GetEntry(ImageCacheKey(aImage, aCanvas)); if (!entry || !entry->mData->mILC) return nullptr; nsCOMPtr<imgIRequest> request; entry->mData->mILC->GetRequest(nsIImageLoadingContent::CURRENT_REQUEST, getter_AddRefs(request)); if (request != entry->mData->mRequest) return nullptr; gImageCache->MarkUsed(entry->mData); *aSize = entry->mData->mSize; return entry->mData->mSourceSurface; }
SourceSurface* CanvasImageCache::LookupCanvas(Element* aImage, HTMLCanvasElement* aCanvas, IntSize* aSizeOut) { if (!gImageCache) { return nullptr; } nsCOMPtr<imgIContainer> imgContainer = GetImageContainer(aImage); if (!imgContainer) { return nullptr; } ImageCacheEntry* entry = gImageCache->mCache.GetEntry(ImageCacheKey(imgContainer, aCanvas)); if (!entry) { return nullptr; } MOZ_ASSERT(aSizeOut); gImageCache->MarkUsed(entry->mData); *aSizeOut = entry->mData->mSize; return entry->mData->mSourceSurface; }
virtual void NotifyExpired(ImageCacheEntryData* aObject) { RemoveObject(aObject); // Deleting the entry will delete aObject since the entry owns aObject mCache.RemoveEntry(ImageCacheKey(aObject->mImage, aObject->mCanvas)); }