Changeset 238547 in webkit
- Timestamp:
- Nov 27, 2018, 1:12:03 AM (8 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 8 edited
-
ChangeLog (modified) (1 diff)
-
Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.h (modified) (1 diff)
-
Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm (modified) (3 diffs)
-
UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm (modified) (3 diffs)
-
UIProcess/RemoteLayerTree/RemoteLayerTreeNode.h (modified) (2 diffs)
-
UIProcess/RemoteLayerTree/RemoteLayerTreeNode.mm (modified) (3 diffs)
-
UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm (modified) (1 diff)
-
UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r238546 r238547 1 2018-11-27 Antti Koivisto <antti@apple.com> 2 3 Remote tile layers shouldn't be UIViews 4 https://bugs.webkit.org/show_bug.cgi?id=191953 5 6 Reviewed by Tim Horton. 7 8 They don't need any UIView functionality, nor do they ever have UIView descendants. 9 We can use lighter weight objects. 10 11 * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.h: 12 * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm: 13 (WebKit::RemoteLayerTreePropertyApplier::applyProperties): 14 (WebKit::RemoteLayerTreePropertyApplier::updateChildren): 15 16 Factor to a function shared between platforms. 17 Support having both views and plain layers in the same tree. 18 Assert that all siblings are of the same type and that we don't attempt to add views to layers. 19 20 (WebKit::RemoteLayerTreePropertyApplier::applyPropertiesToUIView): 21 * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm: 22 (WebKit::RemoteLayerTreeHost::makeNode): 23 24 Use new plain layer on Mac too. 25 26 * UIProcess/RemoteLayerTree/RemoteLayerTreeNode.h: 27 * UIProcess/RemoteLayerTree/RemoteLayerTreeNode.mm: 28 (-[WKPlainRemoteLayer description]): 29 30 Add a CALayer subclass so we can have a description, similar to WKCompositingView and pals. 31 32 (WebKit::RemoteLayerTreeNode::createWithPlainLayer): 33 (WebKit::RemoteLayerTreeNode::detachFromParent): 34 35 Support having null view. 36 37 (WebKit::RemoteLayerTreeNode::appendLayerDescription): 38 39 Helper for layer descriptions. 40 41 * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm: 42 (WebKit::RemoteLayerTreeHost::makeNode): 43 44 Construct plain layers for tiles. 45 46 * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm: 47 (-[WKCompositingView description]): 48 (-[WKUIRemoteView description]): 49 (-[WKBackdropView description]): 50 1 51 2018-11-27 Fujii Hironori <Hironori.Fujii@sony.com> 2 52 -
trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.h
r238468 r238547 41 41 42 42 private: 43 static void updateChildren(RemoteLayerTreeNode&, const RemoteLayerTreeTransaction::LayerProperties&, const RelatedLayerMap&); 43 44 #if PLATFORM(IOS_FAMILY) 44 45 static void applyPropertiesToUIView(UIView *, const RemoteLayerTreeTransaction::LayerProperties&, const RelatedLayerMap&); -
trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm
r238468 r238547 262 262 263 263 applyPropertiesToLayer(layer, layerTreeHost, properties, layerContentsType); 264 updateChildren(node, properties, relatedLayers); 264 265 265 266 #if PLATFORM(IOS_FAMILY) 266 267 applyPropertiesToUIView(node.uiView(), properties, relatedLayers); 267 268 #else 268 if (properties.changedProperties & RemoteLayerTreeTransaction::ChildrenChanged) {269 RetainPtr<NSMutableArray> children = adoptNS([[NSMutableArray alloc] initWithCapacity:properties.children.size()]);270 for (auto& child : properties.children) {271 ASSERT(relatedLayers.contains(child));272 [children addObject:relatedLayers.get(child)->layer()];273 }274 275 layer.sublayers = children.get();276 }277 278 269 if (properties.changedProperties & RemoteLayerTreeTransaction::MaskLayerChanged) { 279 270 if (!properties.maskLayerID) … … 290 281 } 291 282 292 #if PLATFORM(IOS_FAMILY) 293 void RemoteLayerTreePropertyApplier::applyPropertiesToUIView(UIView *view, const RemoteLayerTreeTransaction::LayerProperties& properties, const RelatedLayerMap& relatedLayers) 294 { 295 if (properties.changedProperties & RemoteLayerTreeTransaction::ChildrenChanged) { 296 RetainPtr<NSMutableArray> children = adoptNS([[NSMutableArray alloc] initWithCapacity:properties.children.size()]); 297 for (auto& child : properties.children) { 298 ASSERT(relatedLayers.contains(child)); 299 [children addObject:relatedLayers.get(child)->uiView()]; 300 } 301 283 void RemoteLayerTreePropertyApplier::updateChildren(RemoteLayerTreeNode& node, const RemoteLayerTreeTransaction::LayerProperties& properties, const RelatedLayerMap& relatedLayers) 284 { 285 if (!properties.changedProperties.contains(RemoteLayerTreeTransaction::ChildrenChanged)) 286 return; 287 288 #if PLATFORM(IOS_FAMILY) 289 auto hasViewChildren = [&] { 290 if (node.uiView() && [[node.uiView() subviews] count]) 291 return true; 292 return !properties.children.isEmpty() && relatedLayers.get(properties.children.first())->uiView(); 293 }; 294 295 auto contentView = [&] { 302 296 if (properties.customAppearance == GraphicsLayer::CustomAppearance::LightBackdrop || properties.customAppearance == GraphicsLayer::CustomAppearance::DarkBackdrop) { 303 297 // This is a UIBackdropView, which should have children attached to 304 298 // its content view, not directly on its layers. 305 [[(_UIBackdropView*)view contentView] _web_setSubviews:children.get()]; 306 } else 307 [view _web_setSubviews:children.get()]; 308 } 309 310 if (properties.changedProperties & RemoteLayerTreeTransaction::MaskLayerChanged) { 299 return [(_UIBackdropView *)node.uiView() contentView]; 300 } 301 return node.uiView(); 302 }; 303 304 if (hasViewChildren()) { 305 ASSERT(node.uiView()); 306 307 RetainPtr<NSMutableArray> subviews = adoptNS([[NSMutableArray alloc] initWithCapacity:properties.children.size()]); 308 for (auto& child : properties.children) { 309 auto* childNode = relatedLayers.get(child); 310 ASSERT(childNode->uiView()); 311 [subviews addObject:childNode->uiView()]; 312 } 313 314 [contentView() _web_setSubviews:subviews.get()]; 315 return; 316 } 317 #endif 318 319 RetainPtr<NSMutableArray> sublayers = adoptNS([[NSMutableArray alloc] initWithCapacity:properties.children.size()]); 320 for (auto& child : properties.children) { 321 auto* childNode = relatedLayers.get(child); 322 #if PLATFORM(IOS_FAMILY) 323 ASSERT(!childNode->uiView()); 324 #endif 325 [sublayers addObject:childNode->layer()]; 326 } 327 328 node.layer().sublayers = sublayers.get(); 329 } 330 331 #if PLATFORM(IOS_FAMILY) 332 void RemoteLayerTreePropertyApplier::applyPropertiesToUIView(UIView *view, const RemoteLayerTreeTransaction::LayerProperties& properties, const RelatedLayerMap& relatedLayers) 333 { 334 if (properties.changedProperties.contains(RemoteLayerTreeTransaction::MaskLayerChanged)) { 311 335 CALayer *maskOwnerLayer = view.layer; 312 336 … … 331 355 if (properties.changedProperties.containsAny({ RemoteLayerTreeTransaction::ContentsHiddenChanged, RemoteLayerTreeTransaction::UserInteractionEnabledChanged })) 332 356 view.userInteractionEnabled = !properties.contentsHidden && properties.userInteractionEnabled; 333 334 357 } 335 358 #endif -
trunk/Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm
r238476 r238547 273 273 case PlatformCALayer::LayerTypeScrollingLayer: 274 274 case PlatformCALayer::LayerTypeEditableImageLayer: 275 return makeAdoptingLayer([[CALayer alloc] init]);275 return RemoteLayerTreeNode::createWithPlainLayer(properties.layerID); 276 276 277 277 case PlatformCALayer::LayerTypeTransformLayer: … … 285 285 #else 286 286 ASSERT_NOT_REACHED(); 287 return makeAdoptingLayer([[CALayer alloc] init]);287 return RemoteLayerTreeNode::createWithPlainLayer(properties.layerID); 288 288 #endif 289 289 case PlatformCALayer::LayerTypeCustom: … … 291 291 case PlatformCALayer::LayerTypeContentsProvidedLayer: 292 292 if (m_isDebugLayerTreeHost) 293 return makeAdoptingLayer([[CALayer alloc] init]);293 return RemoteLayerTreeNode::createWithPlainLayer(properties.layerID); 294 294 return makeWithLayer([CALayer _web_renderLayerWithContextID:properties.hostingContextID]); 295 295 -
trunk/Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeNode.h
r238476 r238547 43 43 RemoteLayerTreeNode(WebCore::GraphicsLayer::PlatformLayerID, RetainPtr<UIView>); 44 44 #endif 45 ~RemoteLayerTreeNode(); 45 46 46 ~RemoteLayerTreeNode();47 static std::unique_ptr<RemoteLayerTreeNode> createWithPlainLayer(WebCore::GraphicsLayer::PlatformLayerID); 47 48 48 49 CALayer *layer() const { return m_layer.get(); } … … 53 54 void detachFromParent(); 54 55 55 static WebCore::GraphicsLayer::PlatformLayerID layerID(CALayer*); 56 static WebCore::GraphicsLayer::PlatformLayerID layerID(CALayer *); 57 static NSString *appendLayerDescription(NSString *description, CALayer *); 56 58 57 59 private: -
trunk/Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeNode.mm
r238476 r238547 24 24 */ 25 25 26 #i nclude"config.h"27 #i nclude"RemoteLayerTreeNode.h"26 #import "config.h" 27 #import "RemoteLayerTreeNode.h" 28 28 29 #import <QuartzCore/CALayer.h> 29 30 #import <WebCore/WebActionDisablingCALayerDelegate.h> 31 32 #if PLATFORM(IOS_FAMILY) 33 #import <UIKit/UIView.h> 34 #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 30 45 31 46 namespace WebKit { … … 49 64 RemoteLayerTreeNode::~RemoteLayerTreeNode() = default; 50 65 66 std::unique_ptr<RemoteLayerTreeNode> RemoteLayerTreeNode::createWithPlainLayer(WebCore::GraphicsLayer::PlatformLayerID layerID) 67 { 68 RetainPtr<CALayer> layer = adoptNS([[WKPlainRemoteLayer alloc] init]); 69 return std::make_unique<RemoteLayerTreeNode>(layerID, WTFMove(layer)); 70 } 71 51 72 void RemoteLayerTreeNode::detachFromParent() 52 73 { 53 74 #if PLATFORM(IOS_FAMILY) 54 [uiView() removeFromSuperview]; 55 #else 75 if (auto view = uiView()) { 76 [view removeFromSuperview]; 77 return; 78 } 79 #endif 56 80 [layer() removeFromSuperlayer]; 57 #endif58 81 } 59 82 60 static NSString *const WKLayerIDPropertyKey = @"WKLayerID";83 static NSString *const WKLayerIDPropertyKey = @"WKLayerID"; 61 84 62 85 void RemoteLayerTreeNode::setLayerID(WebCore::GraphicsLayer::PlatformLayerID layerID) … … 65 88 } 66 89 67 WebCore::GraphicsLayer::PlatformLayerID RemoteLayerTreeNode::layerID(CALayer *layer)90 WebCore::GraphicsLayer::PlatformLayerID RemoteLayerTreeNode::layerID(CALayer *layer) 68 91 { 69 92 return [[layer valueForKey:WKLayerIDPropertyKey] unsignedLongLongValue]; 70 93 } 71 94 95 NSString *RemoteLayerTreeNode::appendLayerDescription(NSString *description, CALayer *layer) 96 { 97 NSString *layerDescription = [NSString stringWithFormat:@" layerID = %llu \"%@\"", WebKit::RemoteLayerTreeNode::layerID(layer), layer.name ? layer.name : @""]; 98 return [description stringByAppendingString:layerDescription]; 72 99 } 100 101 } -
trunk/Source/WebKit/UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm
r238538 r238547 76 76 case PlatformCALayer::LayerTypeTiledBackingLayer: 77 77 case PlatformCALayer::LayerTypePageTiledBackingLayer: 78 return makeAdoptingView([[WKCompositingView alloc] init]); 79 78 80 case PlatformCALayer::LayerTypeTiledBackingTileLayer: 79 return makeAdoptingView([[WKCompositingView alloc] init]);81 return RemoteLayerTreeNode::createWithPlainLayer(properties.layerID); 80 82 81 83 case PlatformCALayer::LayerTypeBackdropLayer: -
trunk/Source/WebKit/UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm
r238538 r238547 92 92 - (NSString *)description 93 93 { 94 NSString *viewDescription = [super description]; 95 NSString *webKitDetails = [NSString stringWithFormat:@" layerID = %llu \"%@\"", WebKit::RemoteLayerTreeNode::layerID(self.layer), self.layer.name ? self.layer.name : @""]; 96 return [viewDescription stringByAppendingString:webKitDetails]; 94 return WebKit::RemoteLayerTreeNode::appendLayerDescription(super.description, self.layer); 97 95 } 98 96 … … 161 159 - (NSString *)description 162 160 { 163 NSString *viewDescription = [super description]; 164 NSString *webKitDetails = [NSString stringWithFormat:@" layerID = %llu \"%@\"", WebKit::RemoteLayerTreeNode::layerID(self.layer), self.layer.name ? self.layer.name : @""]; 165 return [viewDescription stringByAppendingString:webKitDetails]; 161 return WebKit::RemoteLayerTreeNode::appendLayerDescription(super.description, self.layer); 166 162 } 167 163 … … 178 174 - (NSString *)description 179 175 { 180 NSString *viewDescription = [super description]; 181 NSString *webKitDetails = [NSString stringWithFormat:@" layerID = %llu \"%@\"", WebKit::RemoteLayerTreeNode::layerID(self.layer), self.layer.name ? self.layer.name : @""]; 182 return [viewDescription stringByAppendingString:webKitDetails]; 176 return WebKit::RemoteLayerTreeNode::appendLayerDescription(super.description, self.layer); 183 177 } 184 178
Note:
See TracChangeset
for help on using the changeset viewer.