⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 277210 in webkit


Ignore:
Timestamp:
May 7, 2021, 4:46:04 PM (5 years ago)
Author:
timothy_horton@apple.com
Message:

Add an experimental alternative display-list-based RemoteLayerBackingStore implementation
​https://bugs.webkit.org/show_bug.cgi?id=225508

Reviewed by Sam Weinig.

Source/WebKit:

  • Shared/RemoteLayerTree/CGDisplayListImageBufferBackend.cpp: Added.

(WebKit::CGDisplayListImageBufferBackend::calculateMemoryCost):
(WebKit::CGDisplayListImageBufferBackend::create):
(WebKit::CGDisplayListImageBufferBackend::CGDisplayListImageBufferBackend):
(WebKit::CGDisplayListImageBufferBackend::createImageBufferBackendHandle const):
(WebKit::CGDisplayListImageBufferBackend::context const):
(WebKit::CGDisplayListImageBufferBackend::backendSize const):
(WebKit::CGDisplayListImageBufferBackend::bytesPerRow const):
(WebKit::CGDisplayListImageBufferBackend::copyNativeImage const):
(WebKit::CGDisplayListImageBufferBackend::toBGRAData const):
(WebKit::CGDisplayListImageBufferBackend::getImageData const):
(WebKit::CGDisplayListImageBufferBackend::putImageData):

  • Shared/RemoteLayerTree/CGDisplayListImageBufferBackend.h: Added.

Add an ImageBuffer backend backed by a CG display list.

  • Shared/RemoteLayerTree/RemoteLayerBackingStore.h:

Add a new RemoteLayerBackingStore type that uses CGDisplayListImageBufferBackend.

  • Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:

(WebKit::RemoteLayerBackingStore::encode const):
(WebKit::RemoteLayerBackingStore::swapToValidFrontBuffer):
(WebKit::RemoteLayerBackingStore::supportsPartialRepaint):
Disable partial repaint if using display-list-based backing store,
because we don't currently have any way to mutate display lists.

(WebKit::RemoteLayerBackingStore::display):
(WebKit::RemoteLayerBackingStore::applyBackingStoreToLayer):
When applying a display-list-based backing store to a layer, we just
pass the encodede data directly to the layer, and tell it to use the
display list to render.

  • SourcesCocoa.txt:
  • UIProcess/RemoteLayerTree/RemoteLayerTreeNode.mm:

(WebKit::RemoteLayerTreeNode::createWithPlainLayer):
(-[WKPlainRemoteLayer description]): Deleted.
Move WKPlainRemoteLayer to RemoteLayerTreeLayers, and rename it to WKCompositingLayer.
It will now back all WKCompositingViews.

  • UIProcess/RemoteLayerTree/cocoa/RemoteLayerTreeLayers.h: Added.
  • UIProcess/RemoteLayerTree/cocoa/RemoteLayerTreeLayers.mm: Added.

(-[WKCompositingLayer description]):
(-[WKCompositingLayer _setWKContentsDisplayList:]):
(-[WKCompositingLayer _wkContentsDisplayList]):
(-[WKCompositingLayer drawInContext:]):
Make WKCompositingLayer replay the given display list in drawRect
(just because we're currently missing API to actually directly pass
the encoded display list data to CA).

  • UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm:

(+[WKCompositingView layerClass]):
Use WKCompositingLayer as the layer class for all WKCompositingViews.

  • WebKit.xcodeproj/project.pbxproj:
  • WebProcess/GPU/graphics/ImageBufferBackendHandle.h:
  • WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp:

(WebKit::PlatformCALayerRemote::updateBackingStore):

  • WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.h:

(WebKit::RemoteLayerTreeContext::useCGDisplayListsForDOMRendering const):
(WebKit::RemoteLayerTreeContext::setUseCGDisplayListsForDOMRendering):

  • WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:

(WebKit::RemoteLayerTreeDrawingArea::updatePreferences):
Plumb the internal feature flag from WebPreferences to RemoteLayerTreeContext
to PlatformCALayerRemote to RemoteLayerBackingStore; if the preference is
on and the feature is available, we'll always prefer display-list backed
surfaces over either of the bitmap types.

Source/WTF:

  • Scripts/Preferences/WebPreferencesInternal.yaml:
Location:
trunk/Source
Files:
3 added
13 edited
2 copied

Legend:

Unmodified
Added
Removed
  • trunk/Source/WTF/ChangeLog

    r277168 r277210  
     12021-05-07  Tim Horton  <timothy_horton@apple.com>
     2
     3        Add an experimental alternative display-list-based RemoteLayerBackingStore implementation
     4        https://bugs.webkit.org/show_bug.cgi?id=225508
     5
     6        Reviewed by Sam Weinig.
     7
     8        * Scripts/Preferences/WebPreferencesInternal.yaml:
     9
    1102021-05-07  Philippe Normand  <pnormand@igalia.com>
    211
  • trunk/Source/WTF/Scripts/Preferences/WebPreferencesInternal.yaml

    r276948 r277210  
    739739      default: true
    740740
     741UseCGDisplayListsForDOMRendering:
     742  type: bool
     743  humanReadableName: "Use CG Display Lists for DOM rendering"
     744  humanReadableDescription: "Use CG Display Lists for DOM rendering"
     745  webcoreBinding: none
     746  condition: ENABLE(CG_DISPLAY_LIST_BACKED_IMAGE_BUFFER)
     747  exposed: [ WebKit ]
     748  defaultValue:
     749    WebKit:
     750      default: false
     751
    741752UseGPUProcessForDOMRenderingEnabled:
    742753  type: bool
  • trunk/Source/WebKit/ChangeLog

    r277209 r277210  
     12021-05-07  Tim Horton  <timothy_horton@apple.com>
     2
     3        Add an experimental alternative display-list-based RemoteLayerBackingStore implementation
     4        https://bugs.webkit.org/show_bug.cgi?id=225508
     5
     6        Reviewed by Sam Weinig.
     7
     8        * Shared/RemoteLayerTree/CGDisplayListImageBufferBackend.cpp: Added.
     9        (WebKit::CGDisplayListImageBufferBackend::calculateMemoryCost):
     10        (WebKit::CGDisplayListImageBufferBackend::create):
     11        (WebKit::CGDisplayListImageBufferBackend::CGDisplayListImageBufferBackend):
     12        (WebKit::CGDisplayListImageBufferBackend::createImageBufferBackendHandle const):
     13        (WebKit::CGDisplayListImageBufferBackend::context const):
     14        (WebKit::CGDisplayListImageBufferBackend::backendSize const):
     15        (WebKit::CGDisplayListImageBufferBackend::bytesPerRow const):
     16        (WebKit::CGDisplayListImageBufferBackend::copyNativeImage const):
     17        (WebKit::CGDisplayListImageBufferBackend::toBGRAData const):
     18        (WebKit::CGDisplayListImageBufferBackend::getImageData const):
     19        (WebKit::CGDisplayListImageBufferBackend::putImageData):
     20        * Shared/RemoteLayerTree/CGDisplayListImageBufferBackend.h: Added.
     21        Add an ImageBuffer backend backed by a CG display list.
     22
     23        * Shared/RemoteLayerTree/RemoteLayerBackingStore.h:
     24        Add a new RemoteLayerBackingStore type that uses CGDisplayListImageBufferBackend.
     25
     26        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
     27        (WebKit::RemoteLayerBackingStore::encode const):
     28        (WebKit::RemoteLayerBackingStore::swapToValidFrontBuffer):
     29        (WebKit::RemoteLayerBackingStore::supportsPartialRepaint):
     30        Disable partial repaint if using display-list-based backing store,
     31        because we don't currently have any way to mutate display lists.
     32
     33        (WebKit::RemoteLayerBackingStore::display):
     34        (WebKit::RemoteLayerBackingStore::applyBackingStoreToLayer):
     35        When applying a display-list-based backing store to a layer, we just
     36        pass the encodede data directly to the layer, and tell it to use the
     37        display list to render.
     38
     39        * SourcesCocoa.txt:
     40        * UIProcess/RemoteLayerTree/RemoteLayerTreeNode.mm:
     41        (WebKit::RemoteLayerTreeNode::createWithPlainLayer):
     42        (-[WKPlainRemoteLayer description]): Deleted.
     43        Move WKPlainRemoteLayer to RemoteLayerTreeLayers, and rename it to WKCompositingLayer.
     44        It will now back all WKCompositingViews.
     45
     46        * UIProcess/RemoteLayerTree/cocoa/RemoteLayerTreeLayers.h: Added.
     47        * UIProcess/RemoteLayerTree/cocoa/RemoteLayerTreeLayers.mm: Added.
     48        (-[WKCompositingLayer description]):
     49        (-[WKCompositingLayer _setWKContentsDisplayList:]):
     50        (-[WKCompositingLayer _wkContentsDisplayList]):
     51        (-[WKCompositingLayer drawInContext:]):
     52        Make WKCompositingLayer replay the given display list in drawRect
     53        (just because we're currently missing API to actually directly pass
     54        the encoded display list data to CA).
     55
     56        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm:
     57        (+[WKCompositingView layerClass]):
     58        Use WKCompositingLayer as the layer class for all WKCompositingViews.
     59
     60        * WebKit.xcodeproj/project.pbxproj:
     61        * WebProcess/GPU/graphics/ImageBufferBackendHandle.h:
     62        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp:
     63        (WebKit::PlatformCALayerRemote::updateBackingStore):
     64        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.h:
     65        (WebKit::RemoteLayerTreeContext::useCGDisplayListsForDOMRendering const):
     66        (WebKit::RemoteLayerTreeContext::setUseCGDisplayListsForDOMRendering):
     67        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
     68        (WebKit::RemoteLayerTreeDrawingArea::updatePreferences):
     69        Plumb the internal feature flag from WebPreferences to RemoteLayerTreeContext
     70        to PlatformCALayerRemote to RemoteLayerBackingStore; if the preference is
     71        on and the feature is available, we'll always prefer display-list backed
     72        surfaces over either of the bitmap types.
     73
    1742021-05-07  Brent Fulgham  <bfulgham@apple.com>
    275
  • trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.h

    r277033 r277210  
    5656        IOSurface,
    5757        Bitmap,
     58#if ENABLE(CG_DISPLAY_LIST_BACKED_IMAGE_BUFFER)
     59        CGDisplayList,
     60#endif
    5861    };
    5962
    … …  
    104107    void swapToValidFrontBuffer();
    105108
     109    bool supportsPartialRepaint();
     110
    106111    WebCore::PixelFormat pixelFormat() const;
    107112
    … …  
    147152template<> struct EnumTraits<WebKit::RemoteLayerBackingStore::Type> {
    148153    using values = EnumValues<
    149         WebKit::RemoteLayerBackingStore::Type,
    150         WebKit::RemoteLayerBackingStore::Type::IOSurface,
    151         WebKit::RemoteLayerBackingStore::Type::Bitmap
     154        WebKit::RemoteLayerBackingStore::Type
     155        , WebKit::RemoteLayerBackingStore::Type::IOSurface
     156        , WebKit::RemoteLayerBackingStore::Type::Bitmap
     157#if ENABLE(CG_DISPLAY_LIST_BACKED_IMAGE_BUFFER)
     158        , WebKit::RemoteLayerBackingStore::Type::CGDisplayList
     159#endif
    152160    >;
    153161};
  • trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.mm

    r277033 r277210  
    11 /*
    2  * Copyright (C) 2013-2018 Apple Inc. All rights reserved.
     2 * Copyright (C) 2013-2021 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
    … …  
    2828
    2929#import "ArgumentCoders.h"
     30#import "CGDisplayListImageBufferBackend.h"
    3031#import "MachPort.h"
    3132#import "PlatformCALayerRemote.h"
    … …  
    3334#import "RemoteLayerBackingStoreCollection.h"
    3435#import "RemoteLayerTreeContext.h"
     36#import "RemoteLayerTreeLayers.h"
    3537#import "ShareableBitmap.h"
    3638#import "WebCoreArgumentCoders.h"
    … …  
    4648#import <pal/spi/cocoa/QuartzCoreSPI.h>
    4749
     50#if ENABLE(CG_DISPLAY_LIST_BACKED_IMAGE_BUFFER)
     51#import <WebKitAdditions/CGDisplayListImageBufferAdditions.h>
     52#endif
     53
    4854namespace WebKit {
    4955
    … …  
    116122            handle = static_cast<UnacceleratedImageBufferShareableBackend&>(*m_frontBuffer.imageBuffer->ensureBackendCreated()).createImageBufferBackendHandle();
    117123            break;
     124#if ENABLE(CG_DISPLAY_LIST_BACKED_IMAGE_BUFFER)
     125        case Type::CGDisplayList:
     126            handle = static_cast<CGDisplayListImageBufferBackend&>(*m_frontBuffer.imageBuffer->ensureBackendCreated()).createImageBufferBackendHandle();
     127            break;
     128#endif
    118129        }
    119130    }
    … …  
    210221            m_frontBuffer.imageBuffer = WebCore::ConcreteImageBuffer<UnacceleratedImageBufferShareableBackend>::create(m_size, m_scale, WebCore::DestinationColorSpace::SRGB, pixelFormat(), nullptr);
    211222        break;
    212     }
     223#if ENABLE(CG_DISPLAY_LIST_BACKED_IMAGE_BUFFER)
     224    case Type::CGDisplayList:
     225        m_frontBuffer.imageBuffer = WebCore::ConcreteImageBuffer<CGDisplayListImageBufferBackend>::create(m_size, m_scale, WebCore::DestinationColorSpace::SRGB, pixelFormat(), nullptr);
     226        break;
     227#endif
     228    }
     229}
     230
     231bool RemoteLayerBackingStore::supportsPartialRepaint()
     232{
     233    switch (m_type) {
     234    case Type::IOSurface:
     235    case Type::Bitmap:
     236        return true;
     237#if ENABLE(CG_DISPLAY_LIST_BACKED_IMAGE_BUFFER)
     238    case Type::CGDisplayList:
     239        return false;
     240#endif
     241    }
     242
     243    return true;
    213244}
    214245
    … …  
    230261
    231262    WebCore::IntRect layerBounds(WebCore::IntPoint(), WebCore::expandedIntSize(m_size));
    232     if (!hasFrontBuffer())
     263    if (!hasFrontBuffer() || !supportsPartialRepaint())
    233264        m_dirtyRegion.unite(layerBounds);
    234265
    … …  
    355386    layer.contentsOpaque = m_isOpaque;
    356387
    357     switch (m_type) {
    358     case Type::IOSurface:
    359         switch (contentsType) {
    360         case LayerContentsType::IOSurface: {
    361             auto surface = WebCore::IOSurface::createFromSendRight(WTFMove(WTF::get<MachSendRight>(*m_bufferHandle)), WebCore::sRGBColorSpaceRef());
    362             layer.contents = surface ? surface->asLayerContents() : nil;
    363             break;
     388    WTF::switchOn(*m_bufferHandle,
     389        [&] (ShareableBitmap::Handle& handle) {
     390            ASSERT(m_type == Type::Bitmap);
     391            auto bitmap = ShareableBitmap::create(handle);
     392            layer.contents = (__bridge id)bitmap->makeCGImageCopy().get();
     393        },
     394        [&] (MachSendRight& machSendRight) {
     395            ASSERT(m_type == Type::IOSurface);
     396            switch (contentsType) {
     397            case LayerContentsType::IOSurface: {
     398                auto surface = WebCore::IOSurface::createFromSendRight(WTFMove(machSendRight), WebCore::sRGBColorSpaceRef());
     399                layer.contents = surface ? surface->asLayerContents() : nil;
     400                break;
     401            }
     402            case LayerContentsType::CAMachPort:
     403                layer.contents = (__bridge id)adoptCF(CAMachPortCreate(machSendRight.leakSendRight())).get();
     404                break;
     405            }
    364406        }
    365         case LayerContentsType::CAMachPort:
    366             layer.contents = (__bridge id)adoptCF(CAMachPortCreate(WTF::get<MachSendRight>(*m_bufferHandle).leakSendRight())).get();
    367             break;
     407#if ENABLE(CG_DISPLAY_LIST_BACKED_IMAGE_BUFFER)
     408        , [&] (IPC::SharedBufferCopy& buffer) {
     409            ASSERT(m_type == Type::CGDisplayList);
     410            ASSERT([layer isKindOfClass:[WKCompositingLayer class]]);
     411            if (![layer isKindOfClass:[WKCompositingLayer class]])
     412                return;
     413            [layer setValue:@1 forKeyPath:WKCGDisplayListEnabledKey];
     414            auto data = buffer.buffer()->createCFData();
     415            [(WKCompositingLayer *)layer _setWKContentsDisplayList:data.get()];
    368416        }
    369         break;
    370     case Type::Bitmap:
    371         auto bitmap = ShareableBitmap::create(WTF::get<ShareableBitmap::Handle>(*m_bufferHandle));
    372         layer.contents = (__bridge id)bitmap->makeCGImageCopy().get();
    373         break;
    374     }
     417#endif
     418    );
    375419}
    376420
  • trunk/Source/WebKit/SourcesCocoa.txt

    r277171 r277210  
    541541UIProcess/Plugins/mac/PluginProcessProxyMac.mm
    542542
     543UIProcess/RemoteLayerTree/cocoa/RemoteLayerTreeLayers.mm
     544
    543545UIProcess/RemoteLayerTree/mac/ScrollerMac.mm
    544546UIProcess/RemoteLayerTree/mac/ScrollerPairMac.mm
  • trunk/Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeNode.mm

    r248846 r277210  
    2727#import "RemoteLayerTreeNode.h"
    2828
     29#import "RemoteLayerTreeLayers.h"
    2930#import <QuartzCore/CALayer.h>
    3031#import <WebCore/WebActionDisablingCALayerDelegate.h>
    … …  
    3334#import <UIKit/UIView.h>
    3435#endif
    35 
    36 @interface WKPlainRemoteLayer : CALayer
    37 @end
    38 
    39 @implementation WKPlainRemoteLayer
    40 - (NSString *)description
    41 {
    42     return WebKit::RemoteLayerTreeNode::appendLayerDescription(super.description, self);
    43 }
    44 @end
    4536
    4637namespace WebKit {
    … …  
    7364std::unique_ptr<RemoteLayerTreeNode> RemoteLayerTreeNode::createWithPlainLayer(WebCore::GraphicsLayer::PlatformLayerID layerID)
    7465{
    75     RetainPtr<CALayer> layer = adoptNS([[WKPlainRemoteLayer alloc] init]);
     66    RetainPtr<CALayer> layer = adoptNS([[WKCompositingLayer alloc] init]);
    7667    return makeUnique<RemoteLayerTreeNode>(layerID, WTFMove(layer));
    7768}
  • trunk/Source/WebKit/UIProcess/RemoteLayerTree/cocoa/RemoteLayerTreeLayers.h

    r277209 r277210  
    11/*
    2  * Copyright (C) 2020 Apple Inc. All rights reserved.
     2 * Copyright (C) 2021 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
    … …  
    2626#pragma once
    2727
    28 #if ENABLE(GPU_PROCESS)
     28#if PLATFORM(COCOA)
    2929
    30 #include "ShareableBitmap.h"
    31 #include <wtf/MachSendRight.h>
    32 #include <wtf/Variant.h>
     30#import <Foundation/Foundation.h>
     31#import <QuartzCore/QuartzCore.h>
    3332
    34 namespace WebKit {
     33@interface WKCompositingLayer : CALayer
    3534
    36 using ImageBufferBackendHandle = Variant<
    37 #if PLATFORM(COCOA) // FIXME: This is really about IOSurface.
    38     MachSendRight,
     35#if ENABLE(CG_DISPLAY_LIST_BACKED_IMAGE_BUFFER)
     36@property (nonatomic, retain, setter=_setWKContentsDisplayList:) __attribute__((NSObject)) CFDataRef _wkContentsDisplayList;
    3937#endif
    40     ShareableBitmap::Handle
    41 >;
    4238
    43 } // namespace WebKit
     39@end
    4440
    45 #endif // ENABLE(GPU_PROCESS)
     41#endif // PLATFORM(COCOA)
  • trunk/Source/WebKit/UIProcess/RemoteLayerTree/cocoa/RemoteLayerTreeLayers.mm

    r277209 r277210  
    11/*
    2  * Copyright (C) 2020 Apple Inc. All rights reserved.
     2 * Copyright (C) 2021 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
    … …  
    2424 */
    2525
    26 #pragma once
     26#import "config.h"
     27#import "RemoteLayerTreeLayers.h"
    2728
    28 #if ENABLE(GPU_PROCESS)
     29#if PLATFORM(COCOA)
    2930
    30 #include "ShareableBitmap.h"
    31 #include <wtf/MachSendRight.h>
    32 #include <wtf/Variant.h>
     31#import "Logging.h"
     32#import "RemoteLayerTreeNode.h"
     33#import <pal/spi/cocoa/QuartzCoreSPI.h>
    3334
    34 namespace WebKit {
     35#if ENABLE(CG_DISPLAY_LIST_BACKED_IMAGE_BUFFER)
     36#import <WebKitAdditions/CGDisplayListImageBufferAdditions.h>
     37#endif
    3538
    36 using ImageBufferBackendHandle = Variant<
    37 #if PLATFORM(COCOA) // FIXME: This is really about IOSurface.
    38     MachSendRight,
     39@implementation WKCompositingLayer {
     40#if ENABLE(CG_DISPLAY_LIST_BACKED_IMAGE_BUFFER)
     41    RetainPtr<CFDataRef> _contentsDisplayList;
    3942#endif
    40     ShareableBitmap::Handle
    41 >;
     43}
    4244
    43 } // namespace WebKit
     45- (NSString *)description
     46{
     47    return WebKit::RemoteLayerTreeNode::appendLayerDescription(super.description, self);
     48}
    4449
    45 #endif // ENABLE(GPU_PROCESS)
     50#if ENABLE(CG_DISPLAY_LIST_BACKED_IMAGE_BUFFER)
     51- (void)_setWKContentsDisplayList:(CFDataRef)data
     52{
     53    _contentsDisplayList = data;
     54    [self setNeedsDisplay];
     55}
     56
     57- (CFDataRef)_wkContentsDisplayList
     58{
     59    return _contentsDisplayList.get();
     60}
     61
     62- (void)drawInContext:(CGContextRef)context
     63{
     64    if (!_contentsDisplayList)
     65        return;
     66    WKCGContextDrawCGCommandsEncodedData(context, _contentsDisplayList.get(), nullptr);
     67}
     68#endif // ENABLE(CG_DISPLAY_LIST_BACKED_IMAGE_BUFFER)
     69
     70@end
     71
     72#endif // PLATFORM(COCOA)
  • trunk/Source/WebKit/UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm

    r270712 r277210  
    3131#import "Logging.h"
    3232#import "RemoteLayerTreeHost.h"
     33#import "RemoteLayerTreeLayers.h"
    3334#import "RemoteLayerTreeNode.h"
    3435#import "UIKitSPI.h"
    … …  
    314315@implementation WKCompositingView
    315316
     317+ (Class)layerClass
     318{
     319    return [WKCompositingLayer class];
     320}
     321
    316322- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
    317323{
  • trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj

    r277171 r277210  
    668668                2D54C31B212F4DA60049C174 /* ProcessLauncher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AE117F511DBB30900981615 /* ProcessLauncher.cpp */; };
    669669                2D5C9D0619C81D8F00B3C5C1 /* WebPageOverlay.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D5C9D0419C81D8F00B3C5C1 /* WebPageOverlay.h */; };
     670                2D64824B2644B1AB00030335 /* RemoteLayerTreeLayers.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D6482492644B1AB00030335 /* RemoteLayerTreeLayers.h */; };
    670671                2D6AB541192B1C4A003A9FD1 /* WKPDFPageNumberIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D6AB53F192B1C4A003A9FD1 /* WKPDFPageNumberIndicator.h */; };
    671672                2D6B371B18A967AD0042AE80 /* _WKThumbnailView.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D6B371918A967AD0042AE80 /* _WKThumbnailView.h */; settings = {ATTRIBUTES = (Private, ); }; };
    … …  
    18291830                BCE469561214E6CB000B98EB /* WebFormSubmissionListenerProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = BCE469521214E6CB000B98EB /* WebFormSubmissionListenerProxy.h */; };
    18301831                BCE4695A1214EDF4000B98EB /* WKFormSubmissionListener.h in Headers */ = {isa = PBXBuildFile; fileRef = BCE469581214EDF4000B98EB /* WKFormSubmissionListener.h */; settings = {ATTRIBUTES = (Private, ); }; };
     1832                BCE579A62634836700F5C5E9 /* CGDisplayListImageBufferBackend.h in Headers */ = {isa = PBXBuildFile; fileRef = BCE579A42634836700F5C5E9 /* CGDisplayListImageBufferBackend.h */; };
     1833                BCE579A72634836700F5C5E9 /* CGDisplayListImageBufferBackend.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCE579A52634836700F5C5E9 /* CGDisplayListImageBufferBackend.cpp */; };
    18311834                BCE81D8D1319F7EF00241910 /* FontInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = BCE81D8B1319F7EF00241910 /* FontInfo.h */; };
    18321835                BCEE7AD012817988009827DA /* WebProcessProxyMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCEE7ACC12817988009827DA /* WebProcessProxyMessageReceiver.cpp */; };
    … …  
    32283231                2D5C9D0319C81D8F00B3C5C1 /* WebPageOverlay.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebPageOverlay.cpp; sourceTree = "<group>"; };
    32293232                2D5C9D0419C81D8F00B3C5C1 /* WebPageOverlay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebPageOverlay.h; sourceTree = "<group>"; };
     3233                2D6482492644B1AB00030335 /* RemoteLayerTreeLayers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RemoteLayerTreeLayers.h; sourceTree = "<group>"; };
     3234                2D64824A2644B1AB00030335 /* RemoteLayerTreeLayers.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RemoteLayerTreeLayers.mm; sourceTree = "<group>"; };
    32303235                2D6AB53F192B1C4A003A9FD1 /* WKPDFPageNumberIndicator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WKPDFPageNumberIndicator.h; path = ios/WKPDFPageNumberIndicator.h; sourceTree = "<group>"; };
    32313236                2D6AB540192B1C4A003A9FD1 /* WKPDFPageNumberIndicator.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = WKPDFPageNumberIndicator.mm; path = ios/WKPDFPageNumberIndicator.mm; sourceTree = "<group>"; };
    … …  
    55095514                BCE469571214EDF4000B98EB /* WKFormSubmissionListener.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKFormSubmissionListener.cpp; sourceTree = "<group>"; };
    55105515                BCE469581214EDF4000B98EB /* WKFormSubmissionListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKFormSubmissionListener.h; sourceTree = "<group>"; };
     5516                BCE579A42634836700F5C5E9 /* CGDisplayListImageBufferBackend.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CGDisplayListImageBufferBackend.h; sourceTree = "<group>"; };
     5517                BCE579A52634836700F5C5E9 /* CGDisplayListImageBufferBackend.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CGDisplayListImageBufferBackend.cpp; sourceTree = "<group>"; };
    55115518                BCE81D8A1319F7EF00241910 /* FontInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FontInfo.cpp; sourceTree = "<group>"; };
    55125519                BCE81D8B1319F7EF00241910 /* FontInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FontInfo.h; sourceTree = "<group>"; };
    … …  
    72927299                        isa = PBXGroup;
    72937300                        children = (
     7301                                2D6482482644B1AB00030335 /* cocoa */,
    72947302                                2D1551AA1F5A9BA70006E3FE /* ios */,
    72957303                                E404906F21DE65D70037F0DB /* mac */,
    … …  
    73597367                        isa = PBXGroup;
    73607368                        children = (
     7369                                BCE579A52634836700F5C5E9 /* CGDisplayListImageBufferBackend.cpp */,
     7370                                BCE579A42634836700F5C5E9 /* CGDisplayListImageBufferBackend.h */,
    73617371                                2D47B56B1810714E003A3AEE /* RemoteLayerBackingStore.h */,
    73627372                                2D47B56A1810714E003A3AEE /* RemoteLayerBackingStore.mm */,
    … …  
    73747384                        );
    73757385                        path = RemoteLayerTree;
     7386                        sourceTree = "<group>";
     7387                };
     7388                2D6482482644B1AB00030335 /* cocoa */ = {
     7389                        isa = PBXGroup;
     7390                        children = (
     7391                                2D6482492644B1AB00030335 /* RemoteLayerTreeLayers.h */,
     7392                                2D64824A2644B1AB00030335 /* RemoteLayerTreeLayers.mm */,
     7393                        );
     7394                        path = cocoa;
    73767395                        sourceTree = "<group>";
    73777396                };
    … …  
    1187111890                                41FABD2A1F4DE001006A6C97 /* CacheStorageEngineCache.h in Headers */,
    1187211891                                41897EDA1F415D8A0016FA42 /* CacheStorageEngineConnection.h in Headers */,
     11892                                BCE579A62634836700F5C5E9 /* CGDisplayListImageBufferBackend.h in Headers */,
    1187311893                                57B4B46020B504AC00D4AD79 /* ClientCertificateAuthenticationXPCConstants.h in Headers */,
    1187411894                                F4FE0A3B24632B60002631E1 /* CocoaColor.h in Headers */,
    … …  
    1220812228                                0FF24A2E1879E4BC003ABF0C /* RemoteLayerTreeDrawingAreaProxyMessages.h in Headers */,
    1220912229                                1AA3D75C1651B44F008713D0 /* RemoteLayerTreeHost.h in Headers */,
     12230                                2D64824B2644B1AB00030335 /* RemoteLayerTreeLayers.h in Headers */,
    1221012231                                E4E57F6B21A83B1200345F3C /* RemoteLayerTreeNode.h in Headers */,
    1221112232                                2DDE0AFA18298CC900F97EAA /* RemoteLayerTreePropertyApplier.h in Headers */,
    … …  
    1409314114                                2D92A785212B6AB100F493FD /* BlobDataFileReferenceWithSandboxExtension.cpp in Sources */,
    1409414115                                517CF0E3163A486C00C2950F /* CacheStorageEngineConnectionMessageReceiver.cpp in Sources */,
     14116                                BCE579A72634836700F5C5E9 /* CGDisplayListImageBufferBackend.cpp in Sources */,
    1409514117                                2D92A77D212B6A7100F493FD /* Connection.cpp in Sources */,
    1409614118                                2D92A77F212B6A7100F493FD /* Decoder.cpp in Sources */,
  • trunk/Source/WebKit/WebProcess/GPU/graphics/ImageBufferBackendHandle.h

    r269824 r277210  
    2929
    3030#include "ShareableBitmap.h"
     31#include "SharedBufferCopy.h"
    3132#include <wtf/MachSendRight.h>
    3233#include <wtf/Variant.h>
    … …  
    3536
    3637using ImageBufferBackendHandle = Variant<
     38    ShareableBitmap::Handle
    3739#if PLATFORM(COCOA) // FIXME: This is really about IOSurface.
    38     MachSendRight,
     40    , MachSendRight
    3941#endif
    40     ShareableBitmap::Handle
     42#if ENABLE(CG_DISPLAY_LIST_BACKED_IMAGE_BUFFER)
     43    , IPC::SharedBufferCopy
     44#endif
    4145>;
    4246
  • trunk/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp

    r277033 r277210  
    235235
    236236    auto type = m_acceleratesDrawing ? RemoteLayerBackingStore::Type::IOSurface : RemoteLayerBackingStore::Type::Bitmap;
     237#if ENABLE(CG_DISPLAY_LIST_BACKED_IMAGE_BUFFER)
     238    if (m_context->useCGDisplayListsForDOMRendering())
     239        type = RemoteLayerBackingStore::Type::CGDisplayList;
     240#endif
    237241    m_properties.backingStore->ensureBackingStore(type, m_properties.bounds.size(), m_properties.contentsScale, m_wantsDeepColorBackingStore, m_properties.opaque);
    238242}
  • trunk/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.h

    r269824 r277210  
    8181
    8282    RemoteRenderingBackendProxy& ensureRemoteRenderingBackendProxy();
     83
     84    bool useCGDisplayListsForDOMRendering() const { return m_useCGDisplayListsForDOMRendering; }
     85    void setUseCGDisplayListsForDOMRendering(bool useCGDisplayLists) { m_useCGDisplayListsForDOMRendering = useCGDisplayLists; }
    8386   
    8487#if PLATFORM(IOS_FAMILY)
    … …  
    107110   
    108111    bool m_nextRenderingUpdateRequiresSynchronousImageDecoding { false };
     112
     113    bool m_useCGDisplayListsForDOMRendering { false };
    109114};
    110115
  • trunk/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm

    r275792 r277210  
    3939#import "WebPageCreationParameters.h"
    4040#import "WebPageProxyMessages.h"
     41#import "WebPreferencesKeys.h"
    4142#import "WebProcess.h"
    4243#import <QuartzCore/QuartzCore.h>
    … …  
    162163}
    163164
    164 void RemoteLayerTreeDrawingArea::updatePreferences(const WebPreferencesStore&)
     165void RemoteLayerTreeDrawingArea::updatePreferences(const WebPreferencesStore& preferences)
    165166{
    166167    Settings& settings = m_webPage.corePage()->settings();
    … …  
    171172
    172173    m_rootLayer->setShowDebugBorder(settings.showDebugBorders());
     174
     175    m_remoteLayerTreeContext->setUseCGDisplayListsForDOMRendering(preferences.getBoolValueForKey(WebPreferencesKey::useCGDisplayListsForDOMRenderingKey()));
    173176
    174177    DebugPageOverlays::settingsChanged(*m_webPage.corePage());
Note: See TracChangeset for help on using the changeset viewer.