MCPcopy Create free account
hub / github.com/Snapchat/Valdi / getResizedImage

Method getResizedImage

valdi/src/valdi/snap_drawing/ImageLoading/ImageCache.cpp:101–137  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

99}
100
101CachedImage ImageCache::getResizedImage(const String& url,
102 Ref<ImageCacheItem>& cachedItem,
103 int preferredWidth,
104 int preferredHeight) {
105 Ref<Image> returnImage;
106 auto scalingResult =
107 findScaledDimensions(cachedItem->getWidth(), cachedItem->getHeight(), preferredWidth, preferredHeight);
108 auto newWidth = scalingResult.width;
109 auto newHeight = scalingResult.height;
110 auto scalingFactor = scalingResult.scaling;
111
112 if ((cachedItem->getWidth() != newWidth || cachedItem->getHeight() != newHeight)) {
113 // NOTE(rjaber): This generates a new key, which may not be a valid URL.
114 // case1 (valid) : https://placecats.com/200/300?foo=bar&com.valdi.dimension=100,150
115 // case2 (invalid): https://placecats.com/200/300&com.valdi.dimension=100,150
116 auto new_url = url.append(STRING_FORMAT("&com.valdi.dimensions={},{};", newWidth, newHeight));
117
118 auto it = _cache.find(new_url);
119 if (it == _cache.end()) {
120 auto resizedCachedItem = cachedItem->getResized(new_url, newWidth, newHeight);
121 _cacheListStart->insertAfter(resizedCachedItem);
122 returnImage = resizedCachedItem->updateLastAccessAndGetImage();
123 _cache[new_url] = resizedCachedItem;
124 _currentSize += resizedCachedItem->getImageSizeInBytes();
125 } else {
126 returnImage = retrieveImage(it->second);
127 }
128 } else {
129 returnImage = retrieveImage(cachedItem);
130 }
131
132 if (_currentSize > _maxSizeInBytes) {
133 invalidateCachedItems(EvictionPolicy::Memory);
134 }
135
136 return CachedImage(returnImage, scalingFactor);
137}
138
139void ImageCache::setMaxAge(uint64_t maxAgeSeconds) {
140 _maxAgeMicroSeconds = snap::utils::time::Duration<std::chrono::steady_clock>(std::chrono::seconds(maxAgeSeconds));

Callers

nothing calls this directly

Calls 10

findScaledDimensionsFunction · 0.85
CachedImageClass · 0.85
getResizedMethod · 0.80
getImageSizeInBytesMethod · 0.80
appendMethod · 0.65
endMethod · 0.65
getWidthMethod · 0.45
getHeightMethod · 0.45
findMethod · 0.45
insertAfterMethod · 0.45

Tested by

no test coverage detected