| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2010 Google Inc. All rights reserved. | 2 * Copyright (C) 2010 Google Inc. All rights reserved. |
| 3 * Copyright (C) 2012 Intel Inc. All rights reserved. | 3 * Copyright (C) 2012 Intel Inc. All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions are | 6 * modification, are permitted provided that the following conditions are |
| 7 * met: | 7 * met: |
| 8 * | 8 * |
| 9 * * Redistributions of source code must retain the above copyright | 9 * * Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 18 matching lines...) Expand all Loading... |
| 29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 30 */ | 30 */ |
| 31 | 31 |
| 32 #include "config.h" | 32 #include "config.h" |
| 33 #include "core/timing/Performance.h" | 33 #include "core/timing/Performance.h" |
| 34 | 34 |
| 35 #include "core/dom/Document.h" | 35 #include "core/dom/Document.h" |
| 36 #include "core/events/Event.h" | 36 #include "core/events/Event.h" |
| 37 #include "core/frame/LocalFrame.h" | 37 #include "core/frame/LocalFrame.h" |
| 38 #include "core/loader/DocumentLoader.h" | 38 #include "core/loader/DocumentLoader.h" |
| 39 #include "core/timing/MemoryInfo.h" |
| 40 #include "core/timing/PerformanceEntry.h" |
| 41 #include "core/timing/PerformanceNavigation.h" |
| 42 #include "core/timing/PerformanceResourceTiming.h" |
| 43 #include "core/timing/PerformanceTiming.h" |
| 44 #include "core/timing/PerformanceUserTiming.h" |
| 39 #include "core/timing/ResourceTimingInfo.h" | 45 #include "core/timing/ResourceTimingInfo.h" |
| 40 #include "core/timing/PerformanceResourceTiming.h" | |
| 41 #include "core/timing/PerformanceUserTiming.h" | |
| 42 #include "platform/weborigin/SecurityOrigin.h" | 46 #include "platform/weborigin/SecurityOrigin.h" |
| 43 #include "wtf/CurrentTime.h" | 47 #include "wtf/CurrentTime.h" |
| 44 | 48 |
| 45 namespace blink { | 49 namespace blink { |
| 46 | 50 |
| 47 static const size_t defaultResourceTimingBufferSize = 150; | 51 static const size_t defaultResourceTimingBufferSize = 150; |
| 48 | 52 |
| 49 Performance::Performance(LocalFrame* frame) | 53 Performance::Performance(LocalFrame* frame) |
| 50 : DOMWindowProperty(frame) | 54 : DOMWindowProperty(frame) |
| 51 , m_resourceTimingBufferSize(defaultResourceTimingBufferSize) | 55 , m_resourceTimingBufferSize(defaultResourceTimingBufferSize) |
| (...skipping 11 matching lines...) Expand all Loading... |
| 63 return EventTargetNames::Performance; | 67 return EventTargetNames::Performance; |
| 64 } | 68 } |
| 65 | 69 |
| 66 ExecutionContext* Performance::executionContext() const | 70 ExecutionContext* Performance::executionContext() const |
| 67 { | 71 { |
| 68 if (!frame()) | 72 if (!frame()) |
| 69 return nullptr; | 73 return nullptr; |
| 70 return frame()->document(); | 74 return frame()->document(); |
| 71 } | 75 } |
| 72 | 76 |
| 73 PassRefPtrWillBeRawPtr<MemoryInfo> Performance::memory() const | 77 MemoryInfo* Performance::memory() |
| 74 { | 78 { |
| 75 return MemoryInfo::create(); | 79 if (!m_memoryInfo) |
| 80 m_memoryInfo = MemoryInfo::create(); |
| 81 return m_memoryInfo.get(); |
| 76 } | 82 } |
| 77 | 83 |
| 78 PerformanceNavigation* Performance::navigation() const | 84 PerformanceNavigation* Performance::navigation() const |
| 79 { | 85 { |
| 80 if (!m_navigation) | 86 if (!m_navigation) |
| 81 m_navigation = PerformanceNavigation::create(m_frame); | 87 m_navigation = PerformanceNavigation::create(m_frame); |
| 82 | 88 |
| 83 return m_navigation.get(); | 89 return m_navigation.get(); |
| 84 } | 90 } |
| 85 | 91 |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 202 void Performance::addResourceTiming(const ResourceTimingInfo& info, Document* in
itiatorDocument) | 208 void Performance::addResourceTiming(const ResourceTimingInfo& info, Document* in
itiatorDocument) |
| 203 { | 209 { |
| 204 if (isResourceTimingBufferFull()) | 210 if (isResourceTimingBufferFull()) |
| 205 return; | 211 return; |
| 206 | 212 |
| 207 const ResourceResponse& finalResponse = info.finalResponse(); | 213 const ResourceResponse& finalResponse = info.finalResponse(); |
| 208 bool allowTimingDetails = passesTimingAllowCheck(finalResponse, initiatorDoc
ument, info.originalTimingAllowOrigin()); | 214 bool allowTimingDetails = passesTimingAllowCheck(finalResponse, initiatorDoc
ument, info.originalTimingAllowOrigin()); |
| 209 double startTime = info.initialTime(); | 215 double startTime = info.initialTime(); |
| 210 | 216 |
| 211 if (info.redirectChain().isEmpty()) { | 217 if (info.redirectChain().isEmpty()) { |
| 212 RefPtrWillBeRawPtr<PerformanceEntry> entry = PerformanceResourceTiming::
create(info, initiatorDocument, startTime, allowTimingDetails); | 218 PerformanceEntry* entry = PerformanceResourceTiming::create(info, initia
torDocument, startTime, allowTimingDetails); |
| 213 addResourceTimingBuffer(entry); | 219 addResourceTimingBuffer(entry); |
| 214 return; | 220 return; |
| 215 } | 221 } |
| 216 | 222 |
| 217 const Vector<ResourceResponse>& redirectChain = info.redirectChain(); | 223 const Vector<ResourceResponse>& redirectChain = info.redirectChain(); |
| 218 bool allowRedirectDetails = allowsTimingRedirect(redirectChain, finalRespons
e, initiatorDocument); | 224 bool allowRedirectDetails = allowsTimingRedirect(redirectChain, finalRespons
e, initiatorDocument); |
| 219 | 225 |
| 220 if (!allowRedirectDetails) { | 226 if (!allowRedirectDetails) { |
| 221 ResourceLoadTiming* finalTiming = finalResponse.resourceLoadTiming(); | 227 ResourceLoadTiming* finalTiming = finalResponse.resourceLoadTiming(); |
| 222 ASSERT(finalTiming); | 228 ASSERT(finalTiming); |
| 223 if (finalTiming) | 229 if (finalTiming) |
| 224 startTime = finalTiming->requestTime(); | 230 startTime = finalTiming->requestTime(); |
| 225 } | 231 } |
| 226 | 232 |
| 227 ResourceLoadTiming* lastRedirectTiming = redirectChain.last().resourceLoadTi
ming(); | 233 ResourceLoadTiming* lastRedirectTiming = redirectChain.last().resourceLoadTi
ming(); |
| 228 ASSERT(lastRedirectTiming); | 234 ASSERT(lastRedirectTiming); |
| 229 double lastRedirectEndTime = lastRedirectTiming->receiveHeadersEnd(); | 235 double lastRedirectEndTime = lastRedirectTiming->receiveHeadersEnd(); |
| 230 | 236 |
| 231 RefPtrWillBeRawPtr<PerformanceEntry> entry = PerformanceResourceTiming::crea
te(info, initiatorDocument, startTime, lastRedirectEndTime, allowTimingDetails,
allowRedirectDetails); | 237 PerformanceEntry* entry = PerformanceResourceTiming::create(info, initiatorD
ocument, startTime, lastRedirectEndTime, allowTimingDetails, allowRedirectDetail
s); |
| 232 addResourceTimingBuffer(entry); | 238 addResourceTimingBuffer(entry); |
| 233 } | 239 } |
| 234 | 240 |
| 235 void Performance::addResourceTimingBuffer(PassRefPtrWillBeRawPtr<PerformanceEntr
y> entry) | 241 void Performance::addResourceTimingBuffer(PerformanceEntry* entry) |
| 236 { | 242 { |
| 237 m_resourceTimingBuffer.append(entry); | 243 m_resourceTimingBuffer.append(entry); |
| 238 | 244 |
| 239 if (isResourceTimingBufferFull()) | 245 if (isResourceTimingBufferFull()) |
| 240 dispatchEvent(Event::create(EventTypeNames::webkitresourcetimingbufferfu
ll)); | 246 dispatchEvent(Event::create(EventTypeNames::webkitresourcetimingbufferfu
ll)); |
| 241 } | 247 } |
| 242 | 248 |
| 243 bool Performance::isResourceTimingBufferFull() | 249 bool Performance::isResourceTimingBufferFull() |
| 244 { | 250 { |
| 245 return m_resourceTimingBuffer.size() >= m_resourceTimingBufferSize; | 251 return m_resourceTimingBuffer.size() >= m_resourceTimingBufferSize; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 276 double Performance::now() const | 282 double Performance::now() const |
| 277 { | 283 { |
| 278 return 1000.0 * (monotonicallyIncreasingTime() - m_referenceTime); | 284 return 1000.0 * (monotonicallyIncreasingTime() - m_referenceTime); |
| 279 } | 285 } |
| 280 | 286 |
| 281 DEFINE_TRACE(Performance) | 287 DEFINE_TRACE(Performance) |
| 282 { | 288 { |
| 283 visitor->trace(m_navigation); | 289 visitor->trace(m_navigation); |
| 284 visitor->trace(m_timing); | 290 visitor->trace(m_timing); |
| 285 visitor->trace(m_resourceTimingBuffer); | 291 visitor->trace(m_resourceTimingBuffer); |
| 292 visitor->trace(m_memoryInfo); |
| 286 visitor->trace(m_userTiming); | 293 visitor->trace(m_userTiming); |
| 287 EventTargetWithInlineData::trace(visitor); | 294 EventTargetWithInlineData::trace(visitor); |
| 288 DOMWindowProperty::trace(visitor); | 295 DOMWindowProperty::trace(visitor); |
| 289 } | 296 } |
| 290 | 297 |
| 291 } // namespace blink | 298 } // namespace blink |
| OLD | NEW |