Changeset 238476 in webkit
- Timestamp:
- Nov 25, 2018, 4:19:02 AM (8 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 8 edited
-
ChangeLog (modified) (1 diff)
-
UIProcess/RemoteLayerTree/RemoteLayerTreeHost.h (modified) (2 diffs)
-
UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm (modified) (5 diffs)
-
UIProcess/RemoteLayerTree/RemoteLayerTreeNode.h (modified) (3 diffs)
-
UIProcess/RemoteLayerTree/RemoteLayerTreeNode.mm (modified) (2 diffs)
-
UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm (modified) (3 diffs)
-
UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm (modified) (3 diffs)
-
WebProcess/WebPage/RemoteLayerTree/PlatformCAAnimationRemote.mm (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r238475 r238476 1 2018-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 1 45 2018-11-25 Tim Horton <timothy_horton@apple.com> 2 46 -
trunk/Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeHost.h
r238468 r238476 44 44 public: 45 45 explicit RemoteLayerTreeHost(RemoteLayerTreeDrawingAreaProxy&); 46 virtual~RemoteLayerTreeHost();46 ~RemoteLayerTreeHost(); 47 47 48 48 RemoteLayerTreeNode* nodeForID(WebCore::GraphicsLayer::PlatformLayerID) const; 49 49 RemoteLayerTreeNode* rootNode() const { return m_rootNode; } 50 51 static WebCore::GraphicsLayer::PlatformLayerID layerID(CALayer*);52 50 53 51 CALayer *layerForID(WebCore::GraphicsLayer::PlatformLayerID) const; … … 79 77 80 78 private: 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&); 84 83 85 84 void layerWillBeRemoved(WebCore::GraphicsLayer::PlatformLayerID); -
trunk/Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm
r238468 r238476 39 39 #import <WebCore/IOSurface.h> 40 40 #import <WebCore/PlatformLayer.h> 41 #import <WebCore/WebActionDisablingCALayerDelegate.h>42 41 #import <WebCore/WebCoreCALayerExtras.h> 43 42 #import <pal/spi/cocoa/QuartzCoreSPI.h> … … 70 69 return false; 71 70 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); 76 73 77 74 bool rootLayerChanged = false; … … 232 229 } 233 230 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 246 231 CALayer *RemoteLayerTreeHost::layerForID(WebCore::GraphicsLayer::PlatformLayerID layerID) const 247 232 { … … 259 244 } 260 245 246 void 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 261 255 #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; 256 std::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 }; 267 264 268 265 switch (properties.type) { … … 276 273 case PlatformCALayer::LayerTypeScrollingLayer: 277 274 case PlatformCALayer::LayerTypeEditableImageLayer: 278 layer = adoptNS([[CALayer alloc] init]);279 break; 275 return makeAdoptingLayer([[CALayer alloc] init]); 276 280 277 case PlatformCALayer::LayerTypeTransformLayer: 281 layer = adoptNS([[CATransformLayer alloc] init]);282 break; 278 return makeAdoptingLayer([[CATransformLayer alloc] init]); 279 283 280 case PlatformCALayer::LayerTypeBackdropLayer: 284 281 case PlatformCALayer::LayerTypeLightSystemBackdropLayer: 285 282 case PlatformCALayer::LayerTypeDarkSystemBackdropLayer: 286 283 #if ENABLE(FILTERS_LEVEL_2) 287 layer = adoptNS([[CABackdropLayer alloc] init]);284 return makeAdoptingLayer([[CABackdropLayer alloc] init]); 288 285 #else 289 286 ASSERT_NOT_REACHED(); 290 layer = adoptNS([[CALayer alloc] init]); 291 #endif 292 break; 287 return makeAdoptingLayer([[CALayer alloc] init]); 288 #endif 293 289 case PlatformCALayer::LayerTypeCustom: 294 290 case PlatformCALayer::LayerTypeAVPlayerLayer: 295 291 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 301 296 case PlatformCALayer::LayerTypeShapeLayer: 302 layer = adoptNS([[CAShapeLayer alloc] init]);303 break;297 return makeAdoptingLayer([[CAShapeLayer alloc] init]); 298 304 299 default: 305 300 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 } 312 303 } 313 304 #endif -
trunk/Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeNode.h
r238468 r238476 26 26 #pragma once 27 27 28 #include <WebCore/GraphicsLayer.h> 28 29 #include <wtf/RetainPtr.h> 29 30 … … 38 39 WTF_MAKE_FAST_ALLOCATED; 39 40 public: 40 RemoteLayerTreeNode( RetainPtr<CALayer>);41 RemoteLayerTreeNode(WebCore::GraphicsLayer::PlatformLayerID, RetainPtr<CALayer>); 41 42 #if PLATFORM(IOS_FAMILY) 42 RemoteLayerTreeNode( RetainPtr<UIView>);43 RemoteLayerTreeNode(WebCore::GraphicsLayer::PlatformLayerID, RetainPtr<UIView>); 43 44 #endif 44 45 … … 52 53 void detachFromParent(); 53 54 55 static WebCore::GraphicsLayer::PlatformLayerID layerID(CALayer*); 56 54 57 private: 58 void setLayerID(WebCore::GraphicsLayer::PlatformLayerID); 59 55 60 RetainPtr<CALayer> m_layer; 56 61 #if PLATFORM(IOS_FAMILY) -
trunk/Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeNode.mm
r238468 r238476 27 27 #include "RemoteLayerTreeNode.h" 28 28 29 #import <WebCore/WebActionDisablingCALayerDelegate.h> 30 29 31 namespace WebKit { 30 32 31 RemoteLayerTreeNode::RemoteLayerTreeNode( RetainPtr<CALayer> layer)33 RemoteLayerTreeNode::RemoteLayerTreeNode(WebCore::GraphicsLayer::PlatformLayerID layerID, RetainPtr<CALayer> layer) 32 34 : m_layer(WTFMove(layer)) 33 35 { 36 setLayerID(layerID); 37 [m_layer setDelegate:[WebActionDisablingCALayerDelegate shared]]; 34 38 } 35 39 36 40 #if PLATFORM(IOS_FAMILY) 37 RemoteLayerTreeNode::RemoteLayerTreeNode( RetainPtr<UIView> uiView)41 RemoteLayerTreeNode::RemoteLayerTreeNode(WebCore::GraphicsLayer::PlatformLayerID layerID, RetainPtr<UIView> uiView) 38 42 : m_layer([uiView.get() layer]) 39 43 , m_uiView(WTFMove(uiView)) 40 44 { 45 setLayerID(layerID); 41 46 } 42 47 #endif … … 53 58 } 54 59 60 static NSString* const WKLayerIDPropertyKey = @"WKLayerID"; 61 62 void RemoteLayerTreeNode::setLayerID(WebCore::GraphicsLayer::PlatformLayerID layerID) 63 { 64 [layer() setValue:@(layerID) forKey:WKLayerIDPropertyKey]; 55 65 } 66 67 WebCore::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 59 59 } 60 60 61 void RemoteLayerTreeHost::createLayer(const RemoteLayerTreeTransaction::LayerCreationProperties& properties, const RemoteLayerTreeTransaction::LayerProperties* layerProperties)61 std::unique_ptr<RemoteLayerTreeNode> RemoteLayerTreeHost::makeNode(const RemoteLayerTreeTransaction::LayerCreationProperties& properties) 62 62 { 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 }; 66 69 67 70 switch (properties.type) { … … 73 76 case PlatformCALayer::LayerTypePageTiledBackingLayer: 74 77 case PlatformCALayer::LayerTypeTiledBackingTileLayer: 75 view = adoptNS([[WKCompositingView alloc] init]);76 break; 78 return makeAdoptingView([[WKCompositingView alloc] init]); 79 77 80 case PlatformCALayer::LayerTypeBackdropLayer: 78 view = adoptNS([[WKSimpleBackdropView alloc] init]);79 break; 81 return makeAdoptingView([[WKSimpleBackdropView alloc] init]); 82 80 83 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 83 86 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 86 89 case PlatformCALayer::LayerTypeTransformLayer: 87 view = adoptNS([[WKTransformView alloc] init]);88 break; 90 return makeAdoptingView([[WKTransformView alloc] init]); 91 89 92 case PlatformCALayer::LayerTypeCustom: 90 93 case PlatformCALayer::LayerTypeAVPlayerLayer: 91 94 case PlatformCALayer::LayerTypeContentsProvidedLayer: 92 95 if (!m_isDebugLayerTreeHost) { 93 view = createRemoteView(m_drawingArea->page().processIdentifier(), properties.hostingContextID);96 auto view = createRemoteView(m_drawingArea->page().processIdentifier(), properties.hostingContextID); 94 97 if (properties.type == PlatformCALayer::LayerTypeAVPlayerLayer) { 95 98 // Invert the scale transform added in the WebProcess to fix <rdar://problem/18316542>. … … 97 100 [[view layer] setTransform:CATransform3DMakeScale(inverseScale, inverseScale, 1)]; 98 101 } 99 } else 100 view = adoptNS([[WKCompositingView alloc] init]); 101 break; 102 return makeWithView(WTFMove(view)); 103 } 104 return makeAdoptingView([[WKCompositingView alloc] init]); 105 102 106 case PlatformCALayer::LayerTypeShapeLayer: 103 view = adoptNS([[WKShapeView alloc] init]);104 break; 107 return makeAdoptingView([[WKShapeView alloc] init]); 108 105 109 case PlatformCALayer::LayerTypeScrollingLayer: 106 110 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 111 115 case PlatformCALayer::LayerTypeEditableImageLayer: 112 view = createEmbeddedView(properties, layerProperties);113 break; 116 return makeWithView(createEmbeddedView(properties)); 117 114 118 default: 115 119 ASSERT_NOT_REACHED(); 120 return nullptr; 116 121 } 117 118 setLayerID([view layer], properties.layerID);119 120 m_nodes.add(properties.layerID, std::make_unique<RemoteLayerTreeNode>(WTFMove(view)));121 122 } 122 123 123 RetainPtr<WKEmbeddedView> RemoteLayerTreeHost::createEmbeddedView(const RemoteLayerTreeTransaction::LayerCreationProperties& properties , const RemoteLayerTreeTransaction::LayerProperties* layerProperties)124 RetainPtr<WKEmbeddedView> RemoteLayerTreeHost::createEmbeddedView(const RemoteLayerTreeTransaction::LayerCreationProperties& properties) 124 125 { 125 126 Class embeddedViewClass = nil; -
trunk/Source/WebKit/UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm
r238108 r238476 93 93 { 94 94 NSString *viewDescription = [super description]; 95 NSString *webKitDetails = [NSString stringWithFormat:@" layerID = %llu \"%@\"", WebKit::RemoteLayerTree Host::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 : @""]; 96 96 return [viewDescription stringByAppendingString:webKitDetails]; 97 97 } … … 162 162 { 163 163 NSString *viewDescription = [super description]; 164 NSString *webKitDetails = [NSString stringWithFormat:@" layerID = %llu \"%@\"", WebKit::RemoteLayerTree Host::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 : @""]; 165 165 return [viewDescription stringByAppendingString:webKitDetails]; 166 166 } … … 179 179 { 180 180 NSString *viewDescription = [super description]; 181 NSString *webKitDetails = [NSString stringWithFormat:@" layerID = %llu \"%@\"", WebKit::RemoteLayerTree Host::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 : @""]; 182 182 return [viewDescription stringByAppendingString:webKitDetails]; 183 183 } -
trunk/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCAAnimationRemote.mm
r236998 r238476 804 804 805 805 if (layerTreeHost) { 806 GraphicsLayer::PlatformLayerID layerID = RemoteLayerTree Host::layerID(layer);806 GraphicsLayer::PlatformLayerID layerID = RemoteLayerTreeNode::layerID(layer); 807 807 808 808 RetainPtr<WKAnimationDelegate>& delegate = layerTreeHost->animationDelegates().add(layerID, nullptr).iterator->value;
Note:
See TracChangeset
for help on using the changeset viewer.