[webkit-changes] [WebKit/WebKit] 0ccc45: [UI-side compositing] css3/masking/clip-path-overf...

Kimmo Kinnunen noreply at github.com
Thu Mar 9 11:37:33 PST 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 0ccc458e846190c097901782265d11d9631c234a
      https://github.com/WebKit/WebKit/commit/0ccc458e846190c097901782265d11d9631c234a
  Author: Kimmo Kinnunen <kkinnunen at apple.com>
  Date:   2023-03-09 (Thu, 09 Mar 2023)

  Changed paths:
    M Source/WebCore/platform/graphics/displaylists/DisplayList.cpp
    M Source/WebCore/platform/graphics/displaylists/DisplayList.h
    M Source/WebCore/platform/graphics/displaylists/DisplayListDrawingContext.cpp
    M Source/WebCore/platform/graphics/displaylists/DisplayListDrawingContext.h
    M Source/WebCore/platform/graphics/displaylists/DisplayListItems.cpp
    M Source/WebCore/platform/graphics/displaylists/DisplayListItems.h
    M Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.cpp
    M Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.h
    M Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
    A Tools/TestWebKitAPI/Tests/WebCore/DisplayListRecorderTests.cpp

  Log Message:
  -----------
  [UI-side compositing] css3/masking/clip-path-overflow-hidden-bounds.html fails
https://bugs.webkit.org/show_bug.cgi?id=253575
rdar://106115074

Reviewed by Said Abou-Hallawa.

Display list recorder would batch state changes and only emit a state
change item when a draw would need.  This algorithm would hoist state
changes made outside of save/restore blocks to be applied inside:
  ASSERT_TRUE(c.shouldAntialias());
  c.setShouldAntialias(false);
  c.save();
  c.fillRect({..});
  c.restore();

Would become:
  c.save();
  c.setShouldAntialias(false);
  c.fillRect({..});
  c.restore();

For tests like clip-path-overflow-hidden-bounds.html this would fail
on GPUP DOM rendering with layout tests.
The tests would not fail interactively.
This is because the browsers run with device scale > 1, and layout test
runner tests with device scale == 1.
The most noticeable errors due to state change problems were the antialias
toggles. Clipping, for example, toggles these when the device scale == 1
but not otherwise.

* Source/WebCore/platform/graphics/displaylists/DisplayList.h:
* Source/WebCore/platform/graphics/displaylists/DisplayListDrawingContext.cpp:
* Source/WebCore/platform/graphics/displaylists/DisplayListDrawingContext.h:
* Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.cpp:
(WebCore::DisplayList::Recorder::commitRecording):
(WebCore::DisplayList::Recorder::save):
(WebCore::DisplayList::Recorder::restore):
* Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.h:
* Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* Tools/TestWebKitAPI/Tests/WebCore/DisplayListRecorderTests.cpp: Added.
(TestWebKitAPI::createReferenceTarget):
(TestWebKitAPI::createDisplayListTarget):
(TestWebKitAPI::forBoth):
(TestWebKitAPI::checkEqualState):
(TestWebKitAPI::TYPED_TEST_P):

Canonical link: https://commits.webkit.org/261451@main




More information about the webkit-changes mailing list