Changeset 169082 in webkit
- Timestamp:
- May 19, 2014, 4:45:54 PM (12 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 12 edited
-
ChangeLog (modified) (1 diff)
-
platform/network/ResourceHandle.h (modified) (2 diffs)
-
platform/network/cf/ResourceHandleCFNet.cpp (modified) (1 diff)
-
platform/network/cf/ResourceHandleCFURLConnectionDelegate.cpp (modified) (1 diff)
-
platform/network/cf/ResourceHandleCFURLConnectionDelegate.h (modified) (1 diff)
-
platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp (modified) (2 diffs)
-
platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h (modified) (1 diff)
-
platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp (modified) (2 diffs)
-
platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.h (modified) (1 diff)
-
platform/network/mac/ResourceHandleMac.mm (modified) (4 diffs)
-
platform/network/mac/WebCoreResourceHandleAsDelegate.mm (modified) (1 diff)
-
platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r169081 r169082 1 2014-05-19 Alex Christensen <achristensen@webkit.org> 2 3 Collect web timing data on iOS. 4 https://bugs.webkit.org/show_bug.cgi?id=133075 5 6 Reviewed by Sam Weinig. 7 8 * platform/network/ResourceHandle.h: 9 Added setCollectsTimingData wrapper and getConnectionTimingData declarations. 10 getConnectionTimingData with a dictionary parameter is a private helper function. 11 * platform/network/cf/ResourceHandleCFNet.cpp: 12 (WebCore::ResourceHandle::start): 13 Call setCollectsTimingData wrapper when creating a connection to ensure that timing data is collected. 14 * platform/network/cf/ResourceHandleCFURLConnectionDelegate.cpp: 15 (WebCore::ResourceHandleCFURLConnectionDelegate::didReceiveResponseCallback): 16 * platform/network/cf/ResourceHandleCFURLConnectionDelegate.h: 17 * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp: 18 (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveResponse): 19 * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h: 20 * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp: 21 (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didReceiveResponse): 22 * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.h: 23 Pass the CFURLConnectionRef to didReceiveResponse to get timing data from. 24 * platform/network/mac/ResourceHandleMac.mm: 25 (WebCore::ResourceHandle::getConnectionTimingData): 26 Moved from getTimingData to compile regardless of using CFNetwork and added wrapper with CFDictionaryRef. 27 (WebCore::ResourceHandle::setCollectsTimingData): 28 Added wrapper to call objc function from c++. 29 (WebCore::ResourceHandle::getTimingData): 30 Renamed to getConnectionTimingData. 31 * platform/network/mac/WebCoreResourceHandleAsDelegate.mm: 32 (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]): 33 * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm: 34 (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveResponse:]): 35 Updated function name from getTimingData to getConnectionTimingData. 36 1 37 2014-05-19 Chris Fleizach <cfleizach@apple.com> 2 38 -
trunk/Source/WebCore/platform/network/ResourceHandle.h
r168909 r169082 132 132 void didCancelAuthenticationChallenge(const AuthenticationChallenge&); 133 133 NSURLConnection *connection() const; 134 static void getTimingData(NSURLConnection*, ResourceLoadTiming&);135 134 id makeDelegate(bool); 136 135 id delegate(); 137 136 void releaseDelegate(); 138 137 #endif 139 138 139 #if PLATFORM(COCOA) && ENABLE(WEB_TIMING) 140 #if USE(CFNETWORK) 141 void setCollectsTimingData(); 142 static void getConnectionTimingData(CFURLConnectionRef, ResourceLoadTiming&); 143 #else 144 static void getConnectionTimingData(NSURLConnection *, ResourceLoadTiming&); 145 #endif 146 #endif 147 140 148 #if PLATFORM(COCOA) 141 149 void schedule(WTF::SchedulePair&); … … 290 298 #endif 291 299 300 #if PLATFORM(COCOA) && ENABLE(WEB_TIMING) 301 static void getConnectionTimingData(NSDictionary *timingData, ResourceLoadTiming&); 302 #endif 303 292 304 friend class ResourceHandleInternal; 293 305 OwnPtr<ResourceHandleInternal> d; -
trunk/Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp
r168504 r169082 255 255 256 256 LOG(Network, "CFNet - Starting URL %s (handle=%p, conn=%p)", firstRequest().url().string().utf8().data(), this, d->m_connection.get()); 257 257 258 #if ENABLE(WEB_TIMING) 259 setCollectsTimingData(); 260 #endif 261 258 262 return true; 259 263 } -
trunk/Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegate.cpp
r165676 r169082 62 62 } 63 63 64 void ResourceHandleCFURLConnectionDelegate::didReceiveResponseCallback(CFURLConnectionRef , CFURLResponseRef cfResponse, const void* clientInfo)65 { 66 static_cast<ResourceHandleCFURLConnectionDelegate*>(const_cast<void*>(clientInfo))->didReceiveResponse(c fResponse);64 void ResourceHandleCFURLConnectionDelegate::didReceiveResponseCallback(CFURLConnectionRef connection, CFURLResponseRef cfResponse, const void* clientInfo) 65 { 66 static_cast<ResourceHandleCFURLConnectionDelegate*>(const_cast<void*>(clientInfo))->didReceiveResponse(connection, cfResponse); 67 67 } 68 68 -
trunk/Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegate.h
r168248 r169082 77 77 78 78 virtual CFURLRequestRef willSendRequest(CFURLRequestRef, CFURLResponseRef) = 0; 79 virtual void didReceiveResponse(CFURL ResponseRef) = 0;79 virtual void didReceiveResponse(CFURLConnectionRef, CFURLResponseRef) = 0; 80 80 virtual void didReceiveData(CFDataRef, CFIndex originalLength) = 0; 81 81 virtual void didFinishLoading() = 0; -
trunk/Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp
r168248 r169082 109 109 } 110 110 111 void ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveResponse(CFURL ResponseRef cfResponse)111 void ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveResponse(CFURLConnectionRef connection, CFURLResponseRef cfResponse) 112 112 { 113 113 RefPtr<ResourceHandleCFURLConnectionDelegateWithOperationQueue> protector(this); … … 132 132 wkSetCFURLResponseMIMEType(cfResponse, CFSTR("text/html")); 133 133 #endif // !PLATFORM(IOS) 134 135 m_handle->client()->didReceiveResponseAsync(m_handle, cfResponse); 134 135 ResourceResponse resourceResponse(cfResponse); 136 #if ENABLE(WEB_TIMING) 137 ResourceHandle::getConnectionTimingData(connection, resourceResponse.resourceLoadTiming()); 138 #else 139 UNUSED_PARAM(connection); 140 #endif 141 142 m_handle->client()->didReceiveResponseAsync(m_handle, resourceResponse); 136 143 }); 137 144 dispatch_semaphore_wait(m_semaphore, DISPATCH_TIME_FOREVER); -
trunk/Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h
r168248 r169082 48 48 49 49 virtual CFURLRequestRef willSendRequest(CFURLRequestRef, CFURLResponseRef) override; 50 virtual void didReceiveResponse(CFURL ResponseRef) override;50 virtual void didReceiveResponse(CFURLConnectionRef, CFURLResponseRef) override; 51 51 virtual void didReceiveData(CFDataRef, CFIndex originalLength) override; 52 52 virtual void didFinishLoading() override; -
trunk/Source/WebCore/platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp
r168248 r169082 112 112 #endif // !PLATFORM(COCOA) 113 113 114 void SynchronousResourceHandleCFURLConnectionDelegate::didReceiveResponse(CFURL ResponseRef cfResponse)114 void SynchronousResourceHandleCFURLConnectionDelegate::didReceiveResponse(CFURLConnectionRef connection, CFURLResponseRef cfResponse) 115 115 { 116 116 LOG(Network, "CFNet - SynchronousResourceHandleCFURLConnectionDelegate::didReceiveResponse(handle=%p) (%s)", m_handle, m_handle->firstRequest().url().string().utf8().data()); … … 144 144 cfResponse = m_handle->quickLookHandle()->cfResponse(); 145 145 #endif 146 147 m_handle->client()->didReceiveResponse(m_handle, cfResponse); 146 147 ResourceResponse resourceResponse(cfResponse); 148 #if ENABLE(WEB_TIMING) 149 ResourceHandle::getConnectionTimingData(connection, resourceResponse.resourceLoadTiming()); 150 #else 151 UNUSED_PARAM(connection); 152 #endif 153 154 m_handle->client()->didReceiveResponse(m_handle, resourceResponse); 148 155 } 149 156 -
trunk/Source/WebCore/platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.h
r168248 r169082 49 49 50 50 virtual CFURLRequestRef willSendRequest(CFURLRequestRef, CFURLResponseRef) override; 51 virtual void didReceiveResponse(CFURL ResponseRef) override;51 virtual void didReceiveResponse(CFURLConnectionRef, CFURLResponseRef) override; 52 52 virtual CFCachedURLResponseRef willCacheResponse(CFCachedURLResponseRef) override; 53 53 virtual void didReceiveChallenge(CFURLAuthChallengeRef) override; -
trunk/Source/WebCore/platform/network/mac/ResourceHandleMac.mm
r168858 r169082 26 26 #import "config.h" 27 27 #import "ResourceHandleInternal.h" 28 29 #if !USE(CFNETWORK)30 28 31 29 #import "AuthenticationChallenge.h" … … 88 86 89 87 namespace WebCore { 90 88 89 #if !USE(CFNETWORK) 90 91 91 static void applyBasicAuthorizationHeader(ResourceRequest& request, const Credential& credential) 92 92 { … … 369 369 { 370 370 return d->m_connection.get(); 371 }372 373 void ResourceHandle::getTimingData(NSURLConnection *connection, ResourceLoadTiming& timing)374 {375 #if ENABLE(WEB_TIMING)376 if (NSDictionary *timingData = [connection _timingData]) {377 // This is not the navigationStart time in monotonic time, but the other times are relative to this time378 // and only the differences between times are stored.379 double referenceStart = [[timingData valueForKey:@"_kCFNTimingDataTimingDataInit"] doubleValue];380 381 double domainLookupStart = [[timingData valueForKey:@"_kCFNTimingDataDomainLookupStart"] doubleValue];382 double domainLookupEnd = [[timingData valueForKey:@"_kCFNTimingDataDomainLookupEnd"] doubleValue];383 double connectStart = [[timingData valueForKey:@"_kCFNTimingDataConnectStart"] doubleValue];384 double secureConnectionStart = [[timingData valueForKey:@"_kCFNTimingDataSecureConnectionStart"] doubleValue];385 double connectEnd = [[timingData valueForKey:@"_kCFNTimingDataConnectEnd"] doubleValue];386 double requestStart = [[timingData valueForKey:@"_kCFNTimingDataRequestStart"] doubleValue];387 double responseStart = [[timingData valueForKey:@"_kCFNTimingDataResponseStart"] doubleValue];388 389 timing.domainLookupStart = domainLookupStart <= 0 ? -1 : (domainLookupStart - referenceStart) * 1000;390 timing.domainLookupEnd = domainLookupEnd <= 0 ? -1 : (domainLookupEnd - referenceStart) * 1000;391 timing.connectStart = connectStart <= 0 ? -1 : (connectStart - referenceStart) * 1000;392 timing.secureConnectionStart = secureConnectionStart <= 0 ? -1 : (secureConnectionStart - referenceStart) * 1000;393 timing.connectEnd = connectEnd <= 0 ? -1 : (connectEnd - referenceStart) * 1000;394 timing.requestStart = requestStart <= 0 ? -1 : (requestStart - referenceStart) * 1000;395 timing.responseStart = responseStart <= 0 ? -1 : (responseStart - referenceStart) * 1000;396 }397 #else398 UNUSED_PARAM(connection);399 UNUSED_PARAM(timing);400 #endif401 371 } 402 372 … … 736 706 [(id)delegate() continueWillCacheResponse:response]; 737 707 } 738 708 709 #endif // !USE(CFNETWORK) 710 711 #if ENABLE(WEB_TIMING) 712 713 void ResourceHandle::getConnectionTimingData(NSDictionary *timingData, ResourceLoadTiming& timing) 714 { 715 if (!timingData) 716 return; 717 718 // This is not the navigationStart time in monotonic time, but the other times are relative to this time 719 // and only the differences between times are stored. 720 double referenceStart = [[timingData valueForKey:@"_kCFNTimingDataTimingDataInit"] doubleValue]; 721 722 double domainLookupStart = [[timingData valueForKey:@"_kCFNTimingDataDomainLookupStart"] doubleValue]; 723 double domainLookupEnd = [[timingData valueForKey:@"_kCFNTimingDataDomainLookupEnd"] doubleValue]; 724 double connectStart = [[timingData valueForKey:@"_kCFNTimingDataConnectStart"] doubleValue]; 725 double secureConnectionStart = [[timingData valueForKey:@"_kCFNTimingDataSecureConnectionStart"] doubleValue]; 726 double connectEnd = [[timingData valueForKey:@"_kCFNTimingDataConnectEnd"] doubleValue]; 727 double requestStart = [[timingData valueForKey:@"_kCFNTimingDataRequestStart"] doubleValue]; 728 double responseStart = [[timingData valueForKey:@"_kCFNTimingDataResponseStart"] doubleValue]; 729 730 timing.domainLookupStart = domainLookupStart <= 0 ? -1 : (domainLookupStart - referenceStart) * 1000; 731 timing.domainLookupEnd = domainLookupEnd <= 0 ? -1 : (domainLookupEnd - referenceStart) * 1000; 732 timing.connectStart = connectStart <= 0 ? -1 : (connectStart - referenceStart) * 1000; 733 timing.secureConnectionStart = secureConnectionStart <= 0 ? -1 : (secureConnectionStart - referenceStart) * 1000; 734 timing.connectEnd = connectEnd <= 0 ? -1 : (connectEnd - referenceStart) * 1000; 735 timing.requestStart = requestStart <= 0 ? -1 : (requestStart - referenceStart) * 1000; 736 timing.responseStart = responseStart <= 0 ? -1 : (responseStart - referenceStart) * 1000; 737 } 738 739 #if USE(CFNETWORK) 740 741 void ResourceHandle::setCollectsTimingData() 742 { 743 [NSURLConnection _setCollectsTimingData:YES]; 744 } 745 746 void ResourceHandle::getConnectionTimingData(CFURLConnectionRef connection, ResourceLoadTiming& timing) 747 { 748 getConnectionTimingData((__bridge NSDictionary*)(adoptCF(_CFURLConnectionCopyTimingData(connection)).get()), timing); 749 } 750 751 #else 752 753 void ResourceHandle::getConnectionTimingData(NSURLConnection *connection, ResourceLoadTiming& timing) 754 { 755 getConnectionTimingData([connection _timingData], timing); 756 } 757 758 #endif 759 760 #endif // ENABLE(WEB_TIMING) 739 761 740 762 } // namespace WebCore 741 763 742 #endif // !USE(CFNETWORK) -
trunk/Source/WebCore/platform/network/mac/WebCoreResourceHandleAsDelegate.mm
r168849 r169082 173 173 ResourceResponse resourceResponse(r); 174 174 #if ENABLE(WEB_TIMING) 175 ResourceHandle::get TimingData(connection, resourceResponse.resourceLoadTiming());175 ResourceHandle::getConnectionTimingData(connection, resourceResponse.resourceLoadTiming()); 176 176 #else 177 177 UNUSED_PARAM(connection); -
trunk/Source/WebCore/platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm
r168849 r169082 215 215 ResourceResponse resourceResponse(r); 216 216 #if ENABLE(WEB_TIMING) 217 ResourceHandle::get TimingData(connection, resourceResponse.resourceLoadTiming());217 ResourceHandle::getConnectionTimingData(connection, resourceResponse.resourceLoadTiming()); 218 218 #else 219 219 UNUSED_PARAM(connection);
Note:
See TracChangeset
for help on using the changeset viewer.