Release v0.6.35: reduce resident memory and compact shared dictionaries
This commit is contained in:
+17
-3
@@ -4,14 +4,28 @@
|
||||
#include <string>
|
||||
|
||||
namespace ks {
|
||||
inline constexpr size_t HistoryThumbnailBudget = 1024 * 1024;
|
||||
inline constexpr size_t HistoryRichTextBudget = 256 * 1024;
|
||||
// Keep the visible working set even in unusually tall windows. Never evict a
|
||||
// visible preview to admit another visible preview: that creates a paint loop.
|
||||
template<class T, class Weight>
|
||||
void trimHistoryPreviews(std::map<std::wstring,T> &cache,
|
||||
const std::set<std::wstring> &visible, size_t limit,
|
||||
size_t byteLimit, Weight weight)
|
||||
{
|
||||
size_t bytes = 0;
|
||||
for (const auto &[id, value] : cache) bytes += weight(value);
|
||||
for(auto it=cache.begin(); (cache.size()>limit || bytes>byteLimit) && it!=cache.end();)
|
||||
if(!visible.contains(it->first)) {
|
||||
bytes -= weight(it->second);
|
||||
it=cache.erase(it);
|
||||
}
|
||||
else ++it;
|
||||
}
|
||||
template<class T>
|
||||
void trimHistoryPreviews(std::map<std::wstring,T> &cache,
|
||||
const std::set<std::wstring> &visible, size_t limit=32)
|
||||
{
|
||||
for(auto it=cache.begin(); cache.size()>limit && it!=cache.end();)
|
||||
if(!visible.contains(it->first)) it=cache.erase(it);
|
||||
else ++it;
|
||||
trimHistoryPreviews(cache, visible, limit, 0, [](const T &) { return size_t{}; });
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user