File chromium-125-debian-bad-font-gc000.patch of Package chromium.18386

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
openSUSE Build Service is sponsored by