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

Changeset 238476 in webkit


Ignore:
Timestamp:
Nov 25, 2018, 4:19:02 AM (8 years ago)
Author:
Antti Koivisto
Message:

RemoteLayerTreeNode construction cleanups
https://bugs.webkit.org/show_bug.cgi?id=191951

Reviewed by Tim Horton.

  • UIProcess/RemoteLayerTree/RemoteLayerTreeHost.h:
  • UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm:

(WebKit::RemoteLayerTreeHost::updateLayerTree):

Drop unused LayerProperties argument.

(WebKit::RemoteLayerTreeHost::createLayer):

Split the actual construction out to makeNode.
Map updating is shared between platforms.
Move setting of layerID and clearing default actions to RemoteLayerTreeNode.

(WebKit::RemoteLayerTreeHost::makeNode):

Returns RemoteLayerTreeNode.

(WebKit::RemoteLayerTreeHost::setLayerID): Deleted.
(WebKit::RemoteLayerTreeHost::layerID): Deleted.

Move to RemoteLayerTreeNode.

  • UIProcess/RemoteLayerTree/RemoteLayerTreeNode.h:
  • UIProcess/RemoteLayerTree/RemoteLayerTreeNode.mm:

(WebKit::RemoteLayerTreeNode::RemoteLayerTreeNode):
(WebKit::RemoteLayerTreeNode::setLayerID):
(WebKit::RemoteLayerTreeNode::layerID):

  • UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:

(WebKit::RemoteLayerTreeHost::makeNode):
(WebKit::RemoteLayerTreeHost::createEmbeddedView):
(WebKit::RemoteLayerTreeHost::createLayer): Deleted.

  • UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm:

(-[WKCompositingView description]):
(-[WKUIRemoteView description]):
(-[WKBackdropView description]):

  • WebProcess/WebPage/RemoteLayerTree/PlatformCAAnimationRemote.mm:

(WebKit::addAnimationToLayer):

Location:
trunk/Source/WebKit
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r238475 r238476  
     12018-11-25  Antti Koivisto  <antti@apple.com>
     2
     3        RemoteLayerTreeNode construction cleanups
     4        https://bugs.webkit.org/show_bug.cgi?id=191951
     5
     6        Reviewed by Tim Horton.
     7
     8        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.h:
     9        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm:
     10        (WebKit::RemoteLayerTreeHost::updateLayerTree):
     11
     12            Drop unused LayerProperties argument.
     13
     14        (WebKit::RemoteLayerTreeHost::createLayer):
     15
     16            Split the actual construction out to makeNode.
     17            Map updating is shared between platforms.
     18            Move setting of layerID and clearing default actions to RemoteLayerTreeNode.
     19
     20        (WebKit::RemoteLayerTreeHost::makeNode):
     21
     22            Returns RemoteLayerTreeNode.
     23
     24        (WebKit::RemoteLayerTreeHost::setLayerID): Deleted.
     25        (WebKit::RemoteLayerTreeHost::layerID): Deleted.
     26
     27            Move to RemoteLayerTreeNode.
     28
     29        * UIProcess/RemoteLayerTree/RemoteLayerTreeNode.h:
     30        * UIProcess/RemoteLayerTree/RemoteLayerTreeNode.mm:
     31        (WebKit::RemoteLayerTreeNode::RemoteLayerTreeNode):
     32        (WebKit::RemoteLayerTreeNode::setLayerID):
     33        (WebKit::RemoteLayerTreeNode::layerID):
     34        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:
     35        (WebKit::RemoteLayerTreeHost::makeNode):
     36        (WebKit::RemoteLayerTreeHost::createEmbeddedView):
     37        (WebKit::RemoteLayerTreeHost::createLayer): Deleted.
     38        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm:
     39        (-[WKCompositingView description]):
     40        (-[WKUIRemoteView description]):
     41        (-[WKBackdropView description]):
     42        * WebProcess/WebPage/RemoteLayerTree/PlatformCAAnimationRemote.mm:
     43        (WebKit::addAnimationToLayer):
     44
    1452018-11-25  Tim Horton  <timothy_horton@apple.com>
    246
  • trunk/Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeHost.h

    r238468 r238476  
    4444public:
    4545    explicit RemoteLayerTreeHost(RemoteLayerTreeDrawingAreaProxy&);
    46     virtual ~RemoteLayerTreeHost();
     46    ~RemoteLayerTreeHost();
    4747
    4848    RemoteLayerTreeNode* nodeForID(WebCore::GraphicsLayer::PlatformLayerID) const;
    4949    RemoteLayerTreeNode* rootNode() const { return m_rootNode; }
    50 
    51     static WebCore::GraphicsLayer::PlatformLayerID layerID(CALayer*);
    5250
    5351    CALayer *layerForID(WebCore::GraphicsLayer::PlatformLayerID) const;
     
    7977
    8078private:
    81     void createLayer(const RemoteLayerTreeTransaction::LayerCreationProperties&, const RemoteLayerTreeTransaction::LayerProperties*);
    82     RetainPtr<WKEmbeddedView> createEmbeddedView(const RemoteLayerTreeTransaction::LayerCreationProperties&, const RemoteLayerTreeTransaction::LayerProperties*);
    83     static void setLayerID(CALayer *, WebCore::GraphicsLayer::PlatformLayerID);
     79    void createLayer(const RemoteLayerTreeTransaction::LayerCreationProperties&);
     80    std::unique_ptr<RemoteLayerTreeNode> makeNode(const RemoteLayerTreeTransaction::LayerCreationProperties&);
     81
     82    RetainPtr<WKEmbeddedView> createEmbeddedView(const RemoteLayerTreeTransaction::LayerCreationProperties&);
    8483
    8584    void layerWillBeRemoved(WebCore::GraphicsLayer::PlatformLayerID);
  • trunk/Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm

    r238468 r238476  
    3939#import <WebCore/IOSurface.h>
    4040#import <WebCore/PlatformLayer.h>
    41 #import <WebCore/WebActionDisablingCALayerDelegate.h>
    4241#import <WebCore/WebCoreCALayerExtras.h>
    4342#import <pal/spi/cocoa/QuartzCoreSPI.h>
     
    7069        return false;
    7170
    72     for (const auto& createdLayer : transaction.createdLayers()) {
    73         const RemoteLayerTreeTransaction::LayerProperties* properties = transaction.changedLayerProperties().get(createdLayer.layerID);
    74         createLayer(createdLayer, properties);
    75     }
     71    for (const auto& createdLayer : transaction.createdLayers())
     72        createLayer(createdLayer);
    7673
    7774    bool rootLayerChanged = false;
     
    232229}
    233230
    234 static NSString* const WKLayerIDPropertyKey = @"WKLayerID";
    235 
    236 void RemoteLayerTreeHost::setLayerID(CALayer *layer, WebCore::GraphicsLayer::PlatformLayerID layerID)
    237 {
    238     [layer setValue:[NSNumber numberWithUnsignedLongLong:layerID] forKey:WKLayerIDPropertyKey];
    239 }
    240 
    241 WebCore::GraphicsLayer::PlatformLayerID RemoteLayerTreeHost::layerID(CALayer* layer)
    242 {
    243     return [[layer valueForKey:WKLayerIDPropertyKey] unsignedLongLongValue];
    244 }
    245 
    246231CALayer *RemoteLayerTreeHost::layerForID(WebCore::GraphicsLayer::PlatformLayerID layerID) const
    247232{
     
    259244}
    260245
     246void RemoteLayerTreeHost::createLayer(const RemoteLayerTreeTransaction::LayerCreationProperties& properties)
     247{
     248    ASSERT(!m_nodes.contains(properties.layerID));
     249
     250    auto node = makeNode(properties);
     251
     252    m_nodes.add(properties.layerID, WTFMove(node));
     253}
     254
    261255#if !PLATFORM(IOS_FAMILY)
    262 void RemoteLayerTreeHost::createLayer(const RemoteLayerTreeTransaction::LayerCreationProperties& properties, const RemoteLayerTreeTransaction::LayerProperties*)
    263 {
    264     ASSERT(!m_nodes.contains(properties.layerID));
    265 
    266     RetainPtr<CALayer> layer;
     256std::unique_ptr<RemoteLayerTreeNode> RemoteLayerTreeHost::makeNode(const RemoteLayerTreeTransaction::LayerCreationProperties& properties)
     257{
     258    auto makeWithLayer = [&] (RetainPtr<CALayer> layer) {
     259        return std::make_unique<RemoteLayerTreeNode>(properties.layerID, WTFMove(layer));
     260    };
     261    auto makeAdoptingLayer = [&] (CALayer* layer) {
     262        return makeWithLayer(adoptNS(layer));
     263    };
    267264
    268265    switch (properties.type) {
     
    276273    case PlatformCALayer::LayerTypeScrollingLayer:
    277274    case PlatformCALayer::LayerTypeEditableImageLayer:
    278         layer = adoptNS([[CALayer alloc] init]);
    279         break;
     275        return makeAdoptingLayer([[CALayer alloc] init]);
     276
    280277    case PlatformCALayer::LayerTypeTransformLayer:
    281         layer = adoptNS([[CATransformLayer alloc] init]);
    282         break;
     278        return makeAdoptingLayer([[CATransformLayer alloc] init]);
     279
    283280    case PlatformCALayer::LayerTypeBackdropLayer:
    284281    case PlatformCALayer::LayerTypeLightSystemBackdropLayer:
    285282    case PlatformCALayer::LayerTypeDarkSystemBackdropLayer:
    286283#if ENABLE(FILTERS_LEVEL_2)
    287         layer = adoptNS([[CABackdropLayer alloc] init]);
     284        return makeAdoptingLayer([[CABackdropLayer alloc] init]);
    288285#else
    289286        ASSERT_NOT_REACHED();
    290         layer = adoptNS([[CALayer alloc] init]);
    291 #endif
    292         break;
     287        return makeAdoptingLayer([[CALayer alloc] init]);
     288#endif
    293289    case PlatformCALayer::LayerTypeCustom:
    294290    case PlatformCALayer::LayerTypeAVPlayerLayer:
    295291    case PlatformCALayer::LayerTypeContentsProvidedLayer:
    296         if (!m_isDebugLayerTreeHost)
    297             layer = [CALayer _web_renderLayerWithContextID:properties.hostingContextID];
    298         else
    299             layer = adoptNS([[CALayer alloc] init]);
    300         break;
     292        if (m_isDebugLayerTreeHost)
     293            return makeAdoptingLayer([[CALayer alloc] init]);
     294        return makeWithLayer([CALayer _web_renderLayerWithContextID:properties.hostingContextID]);
     295
    301296    case PlatformCALayer::LayerTypeShapeLayer:
    302         layer = adoptNS([[CAShapeLayer alloc] init]);
    303         break;
     297        return makeAdoptingLayer([[CAShapeLayer alloc] init]);
     298           
    304299    default:
    305300        ASSERT_NOT_REACHED();
    306     }
    307 
    308     [layer setDelegate:[WebActionDisablingCALayerDelegate shared]];
    309     setLayerID(layer.get(), properties.layerID);
    310 
    311     m_nodes.add(properties.layerID, std::make_unique<RemoteLayerTreeNode>(WTFMove(layer)));
     301        return nullptr;
     302    }
    312303}
    313304#endif
  • trunk/Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeNode.h

    r238468 r238476  
    2626#pragma once
    2727
     28#include <WebCore/GraphicsLayer.h>
    2829#include <wtf/RetainPtr.h>
    2930
     
    3839    WTF_MAKE_FAST_ALLOCATED;
    3940public:
    40     RemoteLayerTreeNode(RetainPtr<CALayer>);
     41    RemoteLayerTreeNode(WebCore::GraphicsLayer::PlatformLayerID, RetainPtr<CALayer>);
    4142#if PLATFORM(IOS_FAMILY)
    42     RemoteLayerTreeNode(RetainPtr<UIView>);
     43    RemoteLayerTreeNode(WebCore::GraphicsLayer::PlatformLayerID, RetainPtr<UIView>);
    4344#endif
    4445
     
    5253    void detachFromParent();
    5354
     55    static WebCore::GraphicsLayer::PlatformLayerID layerID(CALayer*);
     56
    5457private:
     58    void setLayerID(WebCore::GraphicsLayer::PlatformLayerID);
     59
    5560    RetainPtr<CALayer> m_layer;
    5661#if PLATFORM(IOS_FAMILY)
  • trunk/Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeNode.mm

    r238468 r238476  
    2727#include "RemoteLayerTreeNode.h"
    2828
     29#import <WebCore/WebActionDisablingCALayerDelegate.h>
     30
    2931namespace WebKit {
    3032
    31 RemoteLayerTreeNode::RemoteLayerTreeNode(RetainPtr<CALayer> layer)
     33RemoteLayerTreeNode::RemoteLayerTreeNode(WebCore::GraphicsLayer::PlatformLayerID layerID, RetainPtr<CALayer> layer)
    3234    : m_layer(WTFMove(layer))
    3335{
     36    setLayerID(layerID);
     37    [m_layer setDelegate:[WebActionDisablingCALayerDelegate shared]];
    3438}
    3539
    3640#if PLATFORM(IOS_FAMILY)
    37 RemoteLayerTreeNode::RemoteLayerTreeNode(RetainPtr<UIView> uiView)
     41RemoteLayerTreeNode::RemoteLayerTreeNode(WebCore::GraphicsLayer::PlatformLayerID layerID, RetainPtr<UIView> uiView)
    3842    : m_layer([uiView.get() layer])
    3943    , m_uiView(WTFMove(uiView))
    4044{
     45    setLayerID(layerID);
    4146}
    4247#endif
     
    5358}
    5459
     60static NSString* const WKLayerIDPropertyKey = @"WKLayerID";
     61
     62void RemoteLayerTreeNode::setLayerID(WebCore::GraphicsLayer::PlatformLayerID layerID)
     63{
     64    [layer() setValue:@(layerID) forKey:WKLayerIDPropertyKey];
    5565}
     66
     67WebCore::GraphicsLayer::PlatformLayerID RemoteLayerTreeNode::layerID(CALayer* layer)
     68{
     69    return [[layer valueForKey:WKLayerIDPropertyKey] unsignedLongLongValue];
     70}
     71
     72}
  • trunk/Source/WebKit/UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm

    r238468 r238476  
    5959}
    6060
    61 void RemoteLayerTreeHost::createLayer(const RemoteLayerTreeTransaction::LayerCreationProperties& properties, const RemoteLayerTreeTransaction::LayerProperties* layerProperties)
     61std::unique_ptr<RemoteLayerTreeNode> RemoteLayerTreeHost::makeNode(const RemoteLayerTreeTransaction::LayerCreationProperties& properties)
    6262{
    63     ASSERT(!m_nodes.contains(properties.layerID));
    64 
    65     RetainPtr<UIView> view;
     63    auto makeWithView = [&] (RetainPtr<UIView> view) {
     64        return std::make_unique<RemoteLayerTreeNode>(properties.layerID, WTFMove(view));
     65    };
     66    auto makeAdoptingView = [&] (UIView* view) {
     67        return makeWithView(adoptNS(view));
     68    };
    6669
    6770    switch (properties.type) {
     
    7376    case PlatformCALayer::LayerTypePageTiledBackingLayer:
    7477    case PlatformCALayer::LayerTypeTiledBackingTileLayer:
    75         view = adoptNS([[WKCompositingView alloc] init]);
    76         break;
     78        return makeAdoptingView([[WKCompositingView alloc] init]);
     79
    7780    case PlatformCALayer::LayerTypeBackdropLayer:
    78         view = adoptNS([[WKSimpleBackdropView alloc] init]);
    79         break;
     81        return makeAdoptingView([[WKSimpleBackdropView alloc] init]);
     82
    8083    case PlatformCALayer::LayerTypeLightSystemBackdropLayer:
    81         view = adoptNS([[WKBackdropView alloc] initWithFrame:CGRectZero privateStyle:_UIBackdropViewStyle_Light]);
    82         break;
     84        return makeAdoptingView([[WKBackdropView alloc] initWithFrame:CGRectZero privateStyle:_UIBackdropViewStyle_Light]);
     85
    8386    case PlatformCALayer::LayerTypeDarkSystemBackdropLayer:
    84         view = adoptNS([[WKBackdropView alloc] initWithFrame:CGRectZero privateStyle:_UIBackdropViewStyle_Dark]);
    85         break;
     87        return makeAdoptingView([[WKBackdropView alloc] initWithFrame:CGRectZero privateStyle:_UIBackdropViewStyle_Dark]);
     88
    8689    case PlatformCALayer::LayerTypeTransformLayer:
    87         view = adoptNS([[WKTransformView alloc] init]);
    88         break;
     90        return makeAdoptingView([[WKTransformView alloc] init]);
     91
    8992    case PlatformCALayer::LayerTypeCustom:
    9093    case PlatformCALayer::LayerTypeAVPlayerLayer:
    9194    case PlatformCALayer::LayerTypeContentsProvidedLayer:
    9295        if (!m_isDebugLayerTreeHost) {
    93             view = createRemoteView(m_drawingArea->page().processIdentifier(), properties.hostingContextID);
     96            auto view = createRemoteView(m_drawingArea->page().processIdentifier(), properties.hostingContextID);
    9497            if (properties.type == PlatformCALayer::LayerTypeAVPlayerLayer) {
    9598                // Invert the scale transform added in the WebProcess to fix <rdar://problem/18316542>.
     
    97100                [[view layer] setTransform:CATransform3DMakeScale(inverseScale, inverseScale, 1)];
    98101            }
    99         } else
    100             view = adoptNS([[WKCompositingView alloc] init]);
    101         break;
     102            return makeWithView(WTFMove(view));
     103        }
     104        return makeAdoptingView([[WKCompositingView alloc] init]);
     105
    102106    case PlatformCALayer::LayerTypeShapeLayer:
    103         view = adoptNS([[WKShapeView alloc] init]);
    104         break;
     107        return makeAdoptingView([[WKShapeView alloc] init]);
     108
    105109    case PlatformCALayer::LayerTypeScrollingLayer:
    106110        if (!m_isDebugLayerTreeHost)
    107             view = adoptNS([[WKChildScrollView alloc] init]);
    108         else // The debug indicator parents views under layers, which can cause crashes with UIScrollView.
    109             view = adoptNS([[UIView alloc] init]);
    110         break;
     111            return makeAdoptingView([[WKChildScrollView alloc] init]);
     112        // The debug indicator parents views under layers, which can cause crashes with UIScrollView.
     113        return makeAdoptingView([[UIView alloc] init]);
     114
    111115    case PlatformCALayer::LayerTypeEditableImageLayer:
    112         view = createEmbeddedView(properties, layerProperties);
    113         break;
     116        return makeWithView(createEmbeddedView(properties));
     117
    114118    default:
    115119        ASSERT_NOT_REACHED();
     120        return nullptr;
    116121    }
    117 
    118     setLayerID([view layer], properties.layerID);
    119 
    120     m_nodes.add(properties.layerID, std::make_unique<RemoteLayerTreeNode>(WTFMove(view)));
    121122}
    122123
    123 RetainPtr<WKEmbeddedView> RemoteLayerTreeHost::createEmbeddedView(const RemoteLayerTreeTransaction::LayerCreationProperties& properties, const RemoteLayerTreeTransaction::LayerProperties* layerProperties)
     124RetainPtr<WKEmbeddedView> RemoteLayerTreeHost::createEmbeddedView(const RemoteLayerTreeTransaction::LayerCreationProperties& properties)
    124125{
    125126    Class embeddedViewClass = nil;
  • trunk/Source/WebKit/UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm

    r238108 r238476  
    9393{
    9494    NSString *viewDescription = [super description];
    95     NSString *webKitDetails = [NSString stringWithFormat:@" layerID = %llu \"%@\"", WebKit::RemoteLayerTreeHost::layerID(self.layer), self.layer.name ? self.layer.name : @""];
     95    NSString *webKitDetails = [NSString stringWithFormat:@" layerID = %llu \"%@\"", WebKit::RemoteLayerTreeNode::layerID(self.layer), self.layer.name ? self.layer.name : @""];
    9696    return [viewDescription stringByAppendingString:webKitDetails];
    9797}
     
    162162{
    163163    NSString *viewDescription = [super description];
    164     NSString *webKitDetails = [NSString stringWithFormat:@" layerID = %llu \"%@\"", WebKit::RemoteLayerTreeHost::layerID(self.layer), self.layer.name ? self.layer.name : @""];
     164    NSString *webKitDetails = [NSString stringWithFormat:@" layerID = %llu \"%@\"", WebKit::RemoteLayerTreeNode::layerID(self.layer), self.layer.name ? self.layer.name : @""];
    165165    return [viewDescription stringByAppendingString:webKitDetails];
    166166}
     
    179179{
    180180    NSString *viewDescription = [super description];
    181     NSString *webKitDetails = [NSString stringWithFormat:@" layerID = %llu \"%@\"", WebKit::RemoteLayerTreeHost::layerID(self.layer), self.layer.name ? self.layer.name : @""];
     181    NSString *webKitDetails = [NSString stringWithFormat:@" layerID = %llu \"%@\"", WebKit::RemoteLayerTreeNode::layerID(self.layer), self.layer.name ? self.layer.name : @""];
    182182    return [viewDescription stringByAppendingString:webKitDetails];
    183183}
  • trunk/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCAAnimationRemote.mm

    r236998 r238476  
    804804   
    805805    if (layerTreeHost) {
    806         GraphicsLayer::PlatformLayerID layerID = RemoteLayerTreeHost::layerID(layer);
     806        GraphicsLayer::PlatformLayerID layerID = RemoteLayerTreeNode::layerID(layer);
    807807   
    808808        RetainPtr<WKAnimationDelegate>& delegate = layerTreeHost->animationDelegates().add(layerID, nullptr).iterator->value;
Note: See TracChangeset for help on using the changeset viewer.