#include "third_party/blink/renderer/platform/graphics/image_decoding_store.h"
#include <memory>
#include "base/functional/bind.h"
#include "base/not_fatal_until.h"
#include "base/synchronization/lock.h"
#include "third_party/blink/renderer/platform/graphics/image_frame_generator.h"
#include "third_party/blink/renderer/platform/instrumentation/tracing/trace_event.h"
#include "third_party/blink/renderer/platform/wtf/threading.h"
namespace blink {
namespace {
static const size_t kDefaultMaxTotalSizeOfHeapEntries = …;
}
ImageDecodingStore::ImageDecodingStore()
: … { … }
ImageDecodingStore::~ImageDecodingStore() { … }
ImageDecodingStore& ImageDecodingStore::Instance() { … }
bool ImageDecodingStore::LockDecoder(
const ImageFrameGenerator* generator,
const SkISize& scaled_size,
ImageDecoder::AlphaOption alpha_option,
cc::PaintImage::GeneratorClientId client_id,
ImageDecoder** decoder) { … }
void ImageDecodingStore::UnlockDecoder(
const ImageFrameGenerator* generator,
cc::PaintImage::GeneratorClientId client_id,
const ImageDecoder* decoder) { … }
void ImageDecodingStore::InsertDecoder(
const ImageFrameGenerator* generator,
cc::PaintImage::GeneratorClientId client_id,
std::unique_ptr<ImageDecoder> decoder) { … }
void ImageDecodingStore::RemoveDecoder(
const ImageFrameGenerator* generator,
cc::PaintImage::GeneratorClientId client_id,
const ImageDecoder* decoder) { … }
void ImageDecodingStore::RemoveCacheIndexedByGenerator(
const ImageFrameGenerator* generator) { … }
void ImageDecodingStore::Clear() { … }
void ImageDecodingStore::SetCacheLimitInBytes(size_t cache_limit) { … }
size_t ImageDecodingStore::MemoryUsageInBytes() { … }
int ImageDecodingStore::CacheEntries() { … }
void ImageDecodingStore::Prune() { … }
void ImageDecodingStore::OnMemoryPressure(
base::MemoryPressureListener::MemoryPressureLevel level) { … }
template <class T, class U, class V>
void ImageDecodingStore::InsertCacheInternal(std::unique_ptr<T> cache_entry,
U* cache_map,
V* identifier_map) { … }
template <class T, class U, class V>
void ImageDecodingStore::RemoveFromCacheInternal(
const T* cache_entry,
U* cache_map,
V* identifier_map,
Vector<std::unique_ptr<CacheEntry>>* deletion_list) { … }
void ImageDecodingStore::RemoveFromCacheInternal(
const CacheEntry* cache_entry,
Vector<std::unique_ptr<CacheEntry>>* deletion_list) { … }
template <class U, class V>
void ImageDecodingStore::RemoveCacheIndexedByGeneratorInternal(
U* cache_map,
V* identifier_map,
const ImageFrameGenerator* generator,
Vector<std::unique_ptr<CacheEntry>>* deletion_list) { … }
void ImageDecodingStore::RemoveFromCacheListInternal(
const Vector<std::unique_ptr<CacheEntry>>& deletion_list) { … }
}