Bug 261274 - [FreeType][GTK] leaking memory with cairo
Summary: [FreeType][GTK] leaking memory with cairo
Status: RESOLVED INVALID
Alias: None
Product: WebKit
Classification: Unclassified
Component: WebCore Misc. (show other bugs)
Version: Other
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Nobody
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2023-09-07 06:36 PDT by Christian Hesse
Modified: 2023-09-21 13:21 PDT (History)
5 users (show)

See Also:


Attachments
source code of reproducing application (2.39 KB, text/plain)
2023-09-07 07:14 PDT, Christian Hesse
no flags Details
missif log file (379.11 KB, text/plain)
2023-09-07 07:14 PDT, Christian Hesse
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Christian Hesse 2023-09-07 06:36:41 PDT
Calling `cairo_font_options_create()` returns a structure that contains an allocated property [0]. That used to be no problem when cairo font options were initialized just once, however this changed with commit 4fac13b14ab43258032797d51b868da33064af9e ("Network process shouldn't load Cairo ") [1] where the function is called when ever the data is used. Now the allocated property leaks, filling up all RAM over time.

[0] https://gitlab.freedesktop.org/cairo/cairo/-/blob/master/src/cairo-font-options.c?ref_type=heads#L97
[1] https://github.com/WebKit/WebKit/commit/4fac13b14ab43258032797d51b868da33064af9e
Comment 1 Christian Hesse 2023-09-07 07:12:38 PDT
Doing some more testing... I am not even sure my analysis is correct. :-/

Let me recap: I am running Arch Linux, and my application started leaking memory after the update from webkit2gtk 2.38.5-1 (ok) to 2.40.0-2 (bad).

I will attach my application source code and a massif log file which was generated with:

valgrind --tool=massif --trace-children=yes ./browse -u https://eworm.de/tmp/webkit.html
Comment 2 Christian Hesse 2023-09-07 07:14:10 PDT
Created attachment 467584 [details]
source code of reproducing application
Comment 3 Christian Hesse 2023-09-07 07:14:28 PDT
Created attachment 467585 [details]
missif log file
Comment 4 Fujii Hironori 2023-09-07 13:47:28 PDT
Weird. 261107@main seems to be innocent. The change doesn't create cairo_font_options repeatedly.
Did you confirm if your problem was fixed by reverting the change?
Comment 5 Christian Hesse 2023-09-08 02:50:20 PDT
You are right... It is not caused by 261107@main. After my initial doubt I just reverted the commit, and the issue still exists.

So anything I can tell is that it was fine with 2.38.5-1, was introduced with 2.40.0-2 and is still there with 2.40.5.

Any idea?
Comment 6 Ahmad Saleem 2023-09-08 02:52:22 PDT
Almost 5000+ commit between this range (using GitHub tags):

https://github.com/WebKit/WebKit/compare/webkitgtk-2.38.1...webkitgtk-2.40.2
Comment 7 Christian Hesse 2023-09-08 03:12:34 PDT
Yes, that's the problem...
(Btw, this is about 2.38.5 and 2.40.0, the appended number with dash is Arch Linux incremental package release).

I had thought about bisecting. Actually that failed, as I was suffering build issues. To date I can not even build 2.38.5 because of toolchain updates.
Comment 8 Christian Hesse 2023-09-12 16:50:00 PDT
I managed to finish a bisect... Took me a lot of time and did cost some extra grey hair. ðŸĪŠ

c0289be0b9ab80469106e8b06cf75b9c62f37ec9 is the first bad commit
commit c0289be0b9ab80469106e8b06cf75b9c62f37ec9
Author: Vitaly Dyachkov <vitaly@igalia.com>
Date:   Mon Mar 13 02:50:36 2023 -0700

    Cherry-pick 261566@main (2d385163e7ce). https://bugs.webkit.org/show_bug.cgi?id=177039
    
        [Freetype] Apply basic font properties as font variation settings
        https://bugs.webkit.org/show_bug.cgi?id=177039
    
        Reviewed by Carlos Garcia Campos.
    
        This patch makes sure that the basic font properties,
        such as `font-weight`, `font-width`, and `font-style`,
        are applied in the same way as `font-variation-settings`.
    
        * LayoutTests/fast/text/variations/basic-properties-expected.html: Added.
        * LayoutTests/fast/text/variations/basic-properties.html: Added.
        * LayoutTests/fast/text/variations/resources/AmstelvarAlpha-VF.woff2: Added.
        * LayoutTests/fast/text/variations/resources/Roboto-VF.woff2: Added.
        * LayoutTests/fast/text/variations/resources/jost-VF.woff2: Added.
        * Source/WebCore/platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::buildVariationSettings):
    
        Canonical link: https://commits.webkit.org/261566@main

 .../text/variations/basic-properties-expected.html |  33 ++++++++++++++++++++
 .../fast/text/variations/basic-properties.html     |  34 +++++++++++++++++++++
 .../variations/resources/AmstelvarAlpha-VF.woff2   | Bin 0 -> 76720 bytes
 .../fast/text/variations/resources/Roboto-VF.woff2 | Bin 0 -> 1475864 bytes
 .../fast/text/variations/resources/jost-VF.woff2   | Bin 0 -> 141636 bytes
 .../graphics/freetype/FontCacheFreeType.cpp        |  25 +++++++++++++--
 .../platform/graphics/freetype/FontCacheFreeType.h |   2 +-
 .../freetype/FontCustomPlatformDataFreeType.cpp    |   2 +-
 8 files changed, 92 insertions(+), 4 deletions(-)
 create mode 100644 LayoutTests/fast/text/variations/basic-properties-expected.html
 create mode 100644 LayoutTests/fast/text/variations/basic-properties.html
 create mode 100644 LayoutTests/fast/text/variations/resources/AmstelvarAlpha-VF.woff2
 create mode 100644 LayoutTests/fast/text/variations/resources/Roboto-VF.woff2
 create mode 100644 LayoutTests/fast/text/variations/resources/jost-VF.woff2
Comment 9 Christian Hesse 2023-09-21 00:26:26 PDT
All of the leaks happened in cairo, and issues are addressed there.
Closing as invalid.