Reduce amount of rebuilding when touching networking headers
https://bugs.webkit.org/show_bug.cgi?id=111035
Reviewed by Eric Seidel.
Source/WebCore:
This uses a number of common unsurprising techniques. One interesting observation
is that including CachedResource related headers is very expensive. We can usually
get away with their Client counterparts, and with CachedResourceHandle.
* page/Frame.cpp:
* page/Frame.h:
Don't include FrameLoader, greatly reducing include graph for most non-loader files.
This required making Frame::init() non-inline - I'm not sure why it ever was.
* loader/FrameLoader.cpp:
* loader/FrameLoader.h:
Even though FrameLoader is logically on loading side of WebCore, it's included in
too many places. Not including PolicyChecker.h and ResourceHandle.h was among the
largest wins. As a future improvement, we should probably convert other members
to OwnPtrs.
* css/CSSCrossfadeValue.h: Initializing CachedResourceHandle with 0 requires a
definition of a class it holds, but default construction does not.
* loader/CrossOriginAccessControl.h: This file among others only needs ResourceHandleTypes.h,
not ResourceHandle.h. This header is semi-recent, so not all include sites were updated.
* loader/cache/CachedFont.h:
* loader/cache/CachedFontClient.h: Added.
* loader/cache/CachedRawResource.h:
* loader/cache/CachedRawResourceClient.h: Added.
* loader/cache/CachedSVGDocument.h:
* loader/cache/CachedSVGDocumentClient.h: Added.
These types were defining client types in the same headers, making it impossible
to avoid including networking headers through CachedResource. Moved clients into
separate files.
* plugins/PluginStream.h:
* plugins/PluginStreamClient.h: Added.
Similar situation here.
* loader/cache/CachedResourceHandle.cpp:
* loader/cache/CachedResourceHandle.h:
Moved functions that need to know about CachedResource to .cpp file. This is another
huge win. Added a destructor, so that CachedResource woudn't be needed in all files
that include CachedResourceHandle.
* loader/cache/CachedSVGDocumentReference.cpp: Added.
* loader/cache/CachedSVGDocumentReference.h:
Moved constructor and virtual function implementations to a .cpp file - they need
not inlining, and this lets us avoid including CachedSVGDocument.h in the header.
* platform/graphics/filters/FilterOperation.cpp:
* platform/graphics/filters/FilterOperation.h:
Avoid including CachedSVGDocumentReference.h. This is not such a big win now that
CachedSVGDocumentReference.h itself is smaller, but FilterOperation is so clearly
rendering code that it seems best to cut any ties with resources and loading.
Added a virtual destrutor in .cpp file, because inline destructors in polymorphic
classes are generally harmful (due to code bloat).
* plugins/PluginRequest.h: Added.
* plugins/PluginView.h:
Moved PluginRequest into a separate file, it was out of place in a view hierarchy
class file.
* rendering/RenderImageResource.cpp:
* rendering/RenderImageResource.h:
Moved definitions of virtual functions to a .cpp file. Thre is no win from having
them inline, and now we don't need CachedImage.h in the header.
* rendering/style/StyleCustomFilterProgram.cpp: Added.
* rendering/style/StyleCustomFilterProgram.h:
Ditto.
* CMakeLists.txt:
* GNUmakefile.list.am:
* Modules/mediastream/RTCPeerConnection.cpp:
* Modules/notifications/Notification.cpp:
* Target.pri:
* WebCore.exp.in:
* WebCore.gypi:
* WebCore.vcproj/WebCore.vcproj:
* WebCore.vcxproj/WebCore.vcxproj:
* WebCore.vcxproj/WebCore.vcxproj.filters:
* WebCore.xcodeproj/project.pbxproj:
* bindings/ScriptControllerBase.cpp:
* bindings/js/JSNodeCustom.cpp:
* bindings/js/ScriptController.cpp:
* bindings/js/ScriptSourceCode.h:
* bindings/objc/DOM.mm:
* bindings/v8/ScriptController.cpp:
* bindings/v8/V8DOMWindowShell.cpp:
* bindings/v8/custom/V8DOMWindowCustom.cpp:
* css/CSSFontFaceSource.h:
* css/CSSFontSelector.cpp:
* css/WebKitCSSSVGDocumentValue.cpp:
* css/WebKitCSSSVGDocumentValue.h:
* dom/Clipboard.cpp:
* dom/ContainerNode.cpp:
* dom/DOMImplementation.cpp:
* dom/PendingScript.h:
* dom/ScriptElement.cpp:
* dom/ScriptElement.h:
* history/CachedFrame.cpp:
* html/DOMURL.cpp:
* html/HTMLAnchorElement.cpp:
* html/HTMLAppletElement.cpp:
* html/HTMLElement.cpp:
* html/HTMLEmbedElement.cpp:
* html/HTMLFrameSetElement.cpp:
* html/HTMLHtmlElement.cpp:
* html/HTMLImageElement.cpp:
* html/HTMLObjectElement.cpp:
* html/HTMLPlugInElement.cpp:
* html/ImageDocument.cpp:
* html/ImageInputType.cpp:
* html/MediaDocument.cpp:
* html/PluginDocument.cpp:
* html/canvas/WebGLRenderingContext.cpp:
* html/parser/HTMLConstructionSite.cpp:
* html/parser/HTMLParserOptions.cpp:
* html/parser/HTMLScriptRunner.h:
* html/parser/XSSAuditor.cpp:
* html/parser/XSSAuditorDelegate.cpp:
* inspector/InspectorDebuggerAgent.cpp:
* inspector/InspectorFileSystemAgent.cpp:
* inspector/InspectorFrontendHost.cpp:
* inspector/InspectorInstrumentation.h:
* inspector/InspectorPageAgent.cpp:
* inspector/NetworkResourcesData.cpp:
* inspector/NetworkResourcesData.h:
* loader/CookieJar.cpp:
* loader/CrossOriginAccessControl.cpp:
* loader/CrossOriginPreflightResultCache.h:
* loader/DocumentThreadableLoader.h:
* loader/ImageLoader.cpp:
* loader/ImageLoader.h:
* loader/LinkLoader.h:
* loader/MainResourceLoader.cpp:
* loader/MainResourceLoader.h:
* loader/MixedContentChecker.cpp:
* loader/PingLoader.cpp:
* loader/PolicyChecker.h:
* loader/ProgressTracker.cpp:
* loader/SubframeLoader.cpp:
* loader/SubresourceLoader.cpp:
* loader/TextTrackLoader.cpp:
* loader/TextTrackLoader.h:
* loader/ThreadableLoader.h:
* loader/appcache/ApplicationCacheGroup.cpp:
* loader/appcache/ApplicationCacheGroup.h:
* loader/appcache/ApplicationCacheHost.cpp:
* loader/archive/cf/LegacyWebArchive.cpp:
* loader/cache/CachedFont.cpp:
* loader/cache/CachedImage.cpp:
* loader/cache/CachedRawResource.cpp:
* loader/cache/CachedResource.cpp:
* loader/cache/CachedStyleSheetClient.h:
* loader/cache/MemoryCache.cpp:
* loader/cache/MemoryCache.h:
* loader/chromium/CachedRawResourceChromium.cpp:
* loader/icon/IconController.cpp:
* loader/icon/IconLoader.h:
* loader/mac/ResourceLoaderMac.mm:
* page/DOMWindowExtension.cpp:
* page/DragController.cpp:
* page/PerformanceNavigation.cpp:
* page/PerformanceTiming.cpp:
* page/PointerLockController.cpp:
* page/Settings.cpp:
* page/animation/CSSPropertyAnimation.cpp:
* platform/chromium/PasteboardChromium.cpp:
* platform/efl/ErrorsEfl.cpp:
* platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
* platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
* platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
* platform/gtk/ErrorsGtk.cpp:
* platform/gtk/PasteboardGtk.cpp:
* platform/gtk/PasteboardHelper.h:
* platform/mac/ClipboardMac.h:
* platform/mac/ClipboardMac.mm:
* platform/mac/HTMLConverter.mm:
* platform/mac/PasteboardMac.mm:
* platform/network/AuthenticationChallengeBase.cpp:
* platform/network/cf/CookieJarCFNet.cpp:
* platform/network/cf/ResourceRequestCFNet.cpp:
* platform/network/mac/CookieStorageMac.mm:
* platform/qt/PasteboardQt.cpp:
* plugins/DOMMimeType.cpp:
* plugins/PluginView.cpp:
* rendering/HitTestResult.cpp:
* rendering/InlineFlowBox.cpp:
* rendering/RenderBox.cpp:
* rendering/RenderEmbeddedObject.cpp:
* rendering/RenderImage.cpp:
* rendering/RenderImageResourceStyleImage.cpp:
* rendering/RenderLayer.cpp:
* rendering/RenderLayerBacking.cpp:
* rendering/RenderLayerFilterInfo.h:
* rendering/RenderListItem.cpp:
* rendering/RenderListMarker.cpp:
* rendering/RenderSnapshottedPlugIn.cpp:
* rendering/RenderTableCol.cpp:
* rendering/RenderTableRow.cpp:
* rendering/RenderTableSection.cpp:
* rendering/style/StyleCachedShader.h:
* svg/SVGFEImageElement.h:
* svg/SVGFontFaceUriElement.h:
* svg/SVGImageLoader.cpp:
* svg/SVGUseElement.cpp:
* svg/SVGUseElement.h:
* svg/graphics/SVGImageCache.cpp:
* testing/MockPagePopupDriver.cpp:
* xml/XSLStyleSheet.h:
* xml/XSLTProcessorLibxslt.cpp:
* xml/parser/XMLDocumentParser.cpp:
* xml/parser/XMLDocumentParser.h:
* xml/parser/XMLDocumentParserLibxml2.cpp:
Many self-evident changes - removing unnecessary header includes, adding smaller
more local ones that are now necessary.
Source/WebKit/chromium:
Adding includes that are now necessary because WebCore headers don't have them
any more.
* src/ApplicationCacheHost.cpp:
* src/AssociatedURLLoader.cpp:
* src/EditorClientImpl.cpp:
* src/SharedWorkerRepository.cpp:
* src/WebDataSourceImpl.cpp:
* src/WebFrameImpl.h:
* src/WebNode.cpp:
* src/WebSharedWorkerImpl.cpp:
* tests/FrameLoaderClientImplTest.cpp:
Source/WebKit/efl:
Adding includes that are now necessary because WebCore headers don't have them
any more.
* WebCoreSupport/DumpRenderTreeSupportEfl.cpp:
* ewk/ewk_frame.cpp:
Source/WebKit/gtk:
Adding includes that are now necessary because WebCore headers don't have them
any more.
* webkit/webkitwebpolicydecision.cpp:
Source/WebKit/mac:
Adding includes that are now necessary because WebCore headers don't have them
any more.
* DOM/WebDOMOperations.mm:
* Misc/WebNSPasteboardExtras.mm:
* WebCoreSupport/WebFrameNetworkingContext.mm:
* WebView/WebRenderLayer.mm:
* WebView/WebRenderNode.mm:
Source/WebKit/qt:
Adding includes that are now necessary because WebCore headers don't have them
any more.
* WebCoreSupport/NotificationPresenterClientQt.cpp:
* WebCoreSupport/QWebPageAdapter.cpp:
Source/WebKit2:
Adding includes that are now necessary because WebCore headers don't have them
any more.
* NetworkProcess/HostRecord.h:
* NetworkProcess/NetworkResourceLoadScheduler.h:
* NetworkProcess/NetworkResourceLoader.h:
* Shared/WebRenderLayer.cpp:
* Shared/WebRenderObject.cpp:
* WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp:
* WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
* WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
* WebProcess/InjectedBundle/InjectedBundle.cpp:
* WebProcess/InjectedBundle/InjectedBundleDOMWindowExtension.cpp:
* WebProcess/Plugins/PDF/PDFPlugin.mm:
* WebProcess/Plugins/PluginView.cpp:
* WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
* WebProcess/WebCoreSupport/WebEditorClient.cpp:
* WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
* WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
* WebProcess/WebPage/mac/WebPageMac.mm:
* WebProcess/WebProcess.cpp:
* WebProcess/soup/WebProcessSoup.cpp:
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@144422
268f45cc-cd09-0410-ab3c-
d52691b4dbfc