<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:base="en">
	<title>Fujii&#39;s Blog</title>
	<subtitle>Igalian blog.</subtitle>
	<link href="https://blogs.igalia.com/fujii/feed/feed.xml" rel="self"/>
	<link href="https://blogs.igalia.com/fujii/fujii"/>
	<updated>2026-03-16T00:00:00Z</updated>
	<id>https://blogs.igalia.com/fujii</id>
	<author>
		<name>Hironori Fujii</name>
		<email>fujii@igalia.com</email>
	</author>
	
	<entry>
		<title>Async Scrolling Improvements</title>
		<link href="https://blogs.igalia.com/fujii/async-scrolling-improvements/"/>
		<updated>2026-03-16T00:00:00Z</updated>
		<id>https://blogs.igalia.com/fujii/async-scrolling-improvements/</id>
		<content type="html">&lt;p&gt;WPE WebKit and WebKitGTK support &lt;a href=&quot;https://docs.webkit.org/Ports/WebKitGTK%20and%20WPE%20WebKit/Graphics.html#async-scrolling&quot;&gt;async scrolling&lt;/a&gt; for wheel events.
I landed several improvements for the upcoming 2.52 release.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=305451&quot;&gt;Bug 305451&lt;/a&gt; – wheel event async scrolling doesn’t start while the main thread is blocked&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=305560&quot;&gt;Bug 305560&lt;/a&gt; – rendering glitches for unpainted tiles&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=305561&quot;&gt;Bug 305561&lt;/a&gt; – Paint scrollbars in the scrolling thread for async scrolling&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here are videos of before and after the changes.
This is &lt;a href=&quot;https://bug-305441-attachments.webkit.org/attachment.cgi?id=477989&quot;&gt;the test content&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;video src=&quot;https://blogs.igalia.com/fujii/video/async-scrolling-before.mp4&quot; controls=&quot;&quot; autoplay=&quot;&quot; muted=&quot;&quot; loop=&quot;&quot;&gt;&lt;/video&gt;
&lt;video src=&quot;https://blogs.igalia.com/fujii/video/async-scrolling-after.mp4&quot; controls=&quot;&quot; autoplay=&quot;&quot; muted=&quot;&quot; loop=&quot;&quot;&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;There is still room for further improvement.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The scrollbar hiding animation timer is still running in the main thread.
&lt;ul&gt;
&lt;li&gt;It can use CoordinatedPlatformLayer::setAnimations.&lt;/li&gt;
&lt;li&gt;Or CoordinatedPlatformLayer::setOpacity.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Add the showing animation and transition animations of mouse hover states like GTK Adwaita theme&lt;/li&gt;
&lt;li&gt;Support touch and gesture events async scrolling&lt;/li&gt;
&lt;/ul&gt;
</content>
	</entry>
	
	<entry>
		<title>Building WebKit and libsoup with AddressSanitizer (ASan)</title>
		<link href="https://blogs.igalia.com/fujii/building-webkit-and-libsoup-with-addresssanitizer-asan/"/>
		<updated>2026-03-11T00:00:00Z</updated>
		<id>https://blogs.igalia.com/fujii/building-webkit-and-libsoup-with-addresssanitizer-asan/</id>
		<content type="html">&lt;p&gt;I built libsoup and WebKit with ASan today.
It works almost out of the box.
I used Clang.
GCC also supports ASan, but WebKit has a problem with it.
&lt;a href=&quot;https://github.com/Igalia/webkit-container-sdk&quot;&gt;WebKit Container SDK&lt;/a&gt; is based on Ubuntu 20.04 LTS at the moment.
It contains clang 18 by default.&lt;/p&gt;
&lt;p&gt;Installed required packages.&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; libclang-rt-18-dev llvm-18-dev&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Set env vars.&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;CC&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;clang &lt;span class=&quot;token assign-left variable&quot;&gt;CXX&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;clang++&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Passed some flags to libsoup.&lt;/p&gt;
&lt;pre class=&quot;language-diff&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-diff&quot;&gt;&lt;span class=&quot;token coord&quot;&gt;--- /jhbuild/webkit-sdk-deps.modules.orig&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;token coord&quot;&gt;+++ /jhbuild/webkit-sdk-deps.modules&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;token coord&quot;&gt;@@ -149,7 +149,7 @@&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;token unchanged&quot;&gt;&lt;span class=&quot;token prefix unchanged&quot;&gt; &lt;/span&gt;&lt;span class=&quot;token line&quot;&gt;    &amp;lt;/dependencies&gt;&lt;br&gt;&lt;/span&gt;&lt;span class=&quot;token prefix unchanged&quot;&gt; &lt;/span&gt;&lt;span class=&quot;token line&quot;&gt;  &amp;lt;/meson&gt;&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;token deleted-sign deleted&quot;&gt;&lt;span class=&quot;token prefix deleted&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token line&quot;&gt;  &amp;lt;meson id=&quot;libsoup&quot; mesonargs=&quot;-Dtests=false&quot;&gt;&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token inserted-sign inserted&quot;&gt;&lt;span class=&quot;token prefix inserted&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;token line&quot;&gt;  &amp;lt;meson id=&quot;libsoup&quot; mesonargs=&quot;-Dtests=false -Db_sanitize=address -Db_lundef=false&quot;&gt;&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token unchanged&quot;&gt;&lt;span class=&quot;token prefix unchanged&quot;&gt; &lt;/span&gt;&lt;span class=&quot;token line&quot;&gt;    &amp;lt;branch repo=&quot;github.com&quot;&lt;br&gt;&lt;/span&gt;&lt;span class=&quot;token prefix unchanged&quot;&gt; &lt;/span&gt;&lt;span class=&quot;token line&quot;&gt;            checkoutdir=&quot;libsoup&quot;&lt;br&gt;&lt;/span&gt;&lt;span class=&quot;token prefix unchanged&quot;&gt; &lt;/span&gt;&lt;span class=&quot;token line&quot;&gt;            module=&quot;GNOME/libsoup.git&quot; tag=&quot;3.6.6&quot;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then, build and install libsoup.&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;jhbuild buildone &lt;span class=&quot;token parameter variable&quot;&gt;-f&lt;/span&gt; libsoup&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then, build WebKit with ASan.&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;./Tools/Scripts/build-webkit &lt;span class=&quot;token parameter variable&quot;&gt;--gtk&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--release&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--cmakeargs&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;-DENABLE_SANITIZERS&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;address&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;WebKit has a lot of memory leaks by design. Don’t detect leaks.&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;ASAN_OPTIONS&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;detect_leaks&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;For run-webkit-tests, I had to modify a script a bit.&lt;/p&gt;
&lt;pre class=&quot;language-diff&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-diff&quot;&gt;diff --git a/Tools/Scripts/webkitpy/port/driver.py b/Tools/Scripts/webkitpy/port/driver.py&lt;br&gt;index eb12801a455b..c9f74eeab4e2 100644&lt;br&gt;&lt;span class=&quot;token coord&quot;&gt;--- a/Tools/Scripts/webkitpy/port/driver.py&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;token coord&quot;&gt;+++ b/Tools/Scripts/webkitpy/port/driver.py&lt;/span&gt;&lt;br&gt;@@ -482,7 +482,7 @@ class Driver(object):&lt;br&gt;&lt;span class=&quot;token unchanged&quot;&gt;&lt;span class=&quot;token prefix unchanged&quot;&gt; &lt;/span&gt;&lt;span class=&quot;token line&quot;&gt;        else:&lt;br&gt;&lt;/span&gt;&lt;span class=&quot;token prefix unchanged&quot;&gt; &lt;/span&gt;&lt;span class=&quot;token line&quot;&gt;            environment[&#39;DUMPRENDERTREE_TEMP&#39;] = str(self._driver_tempdir)&lt;br&gt;&lt;/span&gt;&lt;span class=&quot;token prefix unchanged&quot;&gt; &lt;/span&gt;&lt;span class=&quot;token line&quot;&gt;        environment[&#39;LOCAL_RESOURCE_ROOT&#39;] = str(self._port.layout_tests_dir())&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token deleted-sign deleted&quot;&gt;&lt;span class=&quot;token prefix deleted&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token line&quot;&gt;        environment[&#39;ASAN_OPTIONS&#39;] = &quot;allocator_may_return_null=1&quot;&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token inserted-sign inserted&quot;&gt;&lt;span class=&quot;token prefix inserted&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;token line&quot;&gt;        environment[&#39;ASAN_OPTIONS&#39;] = &quot;allocator_may_return_null=1:detect_leaks=0&quot;&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token unchanged&quot;&gt;&lt;span class=&quot;token prefix unchanged&quot;&gt; &lt;/span&gt;&lt;span class=&quot;token line&quot;&gt;        environment[&#39;__XPC_ASAN_OPTIONS&#39;] = environment[&#39;ASAN_OPTIONS&#39;]&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;token unchanged&quot;&gt;&lt;span class=&quot;token prefix unchanged&quot;&gt; &lt;/span&gt;&lt;span class=&quot;token line&quot;&gt;        # Disable vnode-guard related simulated crashes for WKTR / DRT (rdar://problem/40674034).&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That’s it. Enjoy.&lt;/p&gt;
</content>
	</entry>
</feed>
