summaryrefslogtreecommitdiff
path: root/chromium-125-debian-bad-font-gc000.patch
diff options
context:
space:
mode:
Diffstat (limited to 'chromium-125-debian-bad-font-gc000.patch')
-rw-r--r--chromium-125-debian-bad-font-gc000.patch107
1 files changed, 107 insertions, 0 deletions
diff --git a/chromium-125-debian-bad-font-gc000.patch b/chromium-125-debian-bad-font-gc000.patch
new file mode 100644
index 0000000..18e6c10
--- /dev/null
+++ b/chromium-125-debian-bad-font-gc000.patch
@@ -0,0 +1,107 @@
+Revert the following commit:
+
+commit 5ffa0446f51e34d06dc0539810a8a5d35ec9e3fc
+Author: Ian Kilpatrick <ikilpatrick@chromium.org>
+Date: Thu Feb 22 17:08:22 2024 +0000
+
+ [fonts][perf] Explicitly leak SimpleFontDatas via a LRU cache.
+
+ This adds a strong LRU cache to FontDataCache to retain the most
+ recently used fonts.
+
+ This covers the case where a large amount of DOM is destroyed, and
+ previously we'd release all the font related objects if the GC kicked
+ in.
+
+ Speedometer3 appears to peak at ~75 objects in the cache.
+
+ Results for different cache sizes:
+
+ Cache size: 64 | 32 | 16
+ Speedometer3: +0.9% | +0.5% | +0%
+
+ Bug: 41490008
+ Change-Id: I131b6a79f246e61e13a7d44dddbc1f9e625ed44a
+ Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5314842
+ Reviewed-by: Dominik Röttsches <drott@chromium.org>
+ Commit-Queue: Ian Kilpatrick <ikilpatrick@chromium.org>
+ Cr-Commit-Position: refs/heads/main@{#1264027}
+
+--- a/third_party/blink/renderer/platform/fonts/font_data_cache.cc
++++ b/third_party/blink/renderer/platform/fonts/font_data_cache.cc
+@@ -36,15 +36,6 @@
+
+ namespace blink {
+
+-namespace {
+-
+-// The maximum number of strong references to retain via the LRU.
+-// This explicitly leaks fonts (and related objects) unless under extreme
+-// memory pressure where it will be cleared. DO NOT increase unnecessarily.
+-const wtf_size_t kMaxSize = 64;
+-
+-} // namespace
+-
+ const SimpleFontData* FontDataCache::Get(const FontPlatformData* platform_data,
+ bool subpixel_ascent_descent) {
+ if (!platform_data)
+@@ -64,16 +55,7 @@ const SimpleFontData* FontDataCache::Get
+ add_result.stored_value->value = MakeGarbageCollected<SimpleFontData>(
+ platform_data, nullptr, subpixel_ascent_descent);
+ }
+-
+- const SimpleFontData* result = add_result.stored_value->value;
+-
+- // Update our LRU to keep a strong reference to `result`.
+- strong_reference_lru_.PrependOrMoveToFirst(result);
+- while (strong_reference_lru_.size() > kMaxSize) {
+- strong_reference_lru_.pop_back();
+- }
+-
+- return result;
++ return add_result.stored_value->value;
+ }
+
+ } // namespace blink
+--- a/third_party/blink/renderer/platform/fonts/font_data_cache.h
++++ b/third_party/blink/renderer/platform/fonts/font_data_cache.h
+@@ -34,7 +34,6 @@
+ #include "third_party/blink/renderer/platform/fonts/font_platform_data.h"
+ #include "third_party/blink/renderer/platform/fonts/simple_font_data.h"
+ #include "third_party/blink/renderer/platform/heap/collection_support/heap_hash_map.h"
+-#include "third_party/blink/renderer/platform/heap/collection_support/heap_linked_hash_set.h"
+
+ namespace blink {
+
+@@ -59,29 +58,17 @@ class FontDataCache final {
+ FontDataCache(const FontDataCache&) = delete;
+ FontDataCache& operator=(const FontDataCache&) = delete;
+
+- void Trace(Visitor* visitor) const {
+- visitor->Trace(cache_);
+- visitor->Trace(strong_reference_lru_);
+- }
++ void Trace(Visitor* visitor) const { visitor->Trace(cache_); }
+
+ const SimpleFontData* Get(const FontPlatformData*,
+ bool subpixel_ascent_descent = false);
+- void Clear() {
+- cache_.clear();
+- strong_reference_lru_.clear();
+- }
++ void Clear() { cache_.clear(); }
+
+ private:
+ HeapHashMap<Member<const FontPlatformData>,
+ WeakMember<const SimpleFontData>,
+ FontDataCacheKeyHashTraits>
+ cache_;
+-
+- // The above `cache_` is weak, meaning its entries will potentially be
+- // cleared if no other references exist.
+- // This LRU keeps a small (limited) number of strong references alive so they
+- // won't be cleared in the above cache for performance reasons.
+- HeapLinkedHashSet<Member<const SimpleFontData>> strong_reference_lru_;
+ };
+
+ } // namespace blink