| 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 21 matching lines...) Expand all Loading... |
| 32 #include "core/timing/PerformanceBase.h" | 32 #include "core/timing/PerformanceBase.h" |
| 33 | 33 |
| 34 #include "core/dom/Document.h" | 34 #include "core/dom/Document.h" |
| 35 #include "core/dom/DocumentTiming.h" | 35 #include "core/dom/DocumentTiming.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/frame/UseCounter.h" | 38 #include "core/frame/UseCounter.h" |
| 39 #include "core/loader/DocumentLoadTiming.h" | 39 #include "core/loader/DocumentLoadTiming.h" |
| 40 #include "core/loader/DocumentLoader.h" | 40 #include "core/loader/DocumentLoader.h" |
| 41 #include "core/timing/PerformanceLongTaskTiming.h" | 41 #include "core/timing/PerformanceLongTaskTiming.h" |
| 42 #include "core/timing/PerformanceNavigationTiming.h" | |
| 43 #include "core/timing/PerformanceObserver.h" | 42 #include "core/timing/PerformanceObserver.h" |
| 44 #include "core/timing/PerformanceResourceTiming.h" | 43 #include "core/timing/PerformanceResourceTiming.h" |
| 45 #include "core/timing/PerformanceUserTiming.h" | 44 #include "core/timing/PerformanceUserTiming.h" |
| 46 #include "platform/RuntimeEnabledFeatures.h" | 45 #include "platform/RuntimeEnabledFeatures.h" |
| 47 #include "platform/network/ResourceTimingInfo.h" | 46 #include "platform/network/ResourceTimingInfo.h" |
| 48 #include "platform/weborigin/SecurityOrigin.h" | 47 #include "platform/weborigin/SecurityOrigin.h" |
| 49 #include "wtf/CurrentTime.h" | 48 #include "wtf/CurrentTime.h" |
| 50 #include <algorithm> | 49 #include <algorithm> |
| 51 | 50 |
| 52 namespace blink { | 51 namespace blink { |
| 53 | 52 |
| 54 using PerformanceObserverVector = HeapVector<Member<PerformanceObserver>>; | 53 using PerformanceObserverVector = HeapVector<Member<PerformanceObserver>>; |
| 55 | 54 |
| 56 static const size_t defaultResourceTimingBufferSize = 150; | 55 static const size_t defaultResourceTimingBufferSize = 150; |
| 57 static const size_t defaultFrameTimingBufferSize = 150; | 56 static const size_t defaultFrameTimingBufferSize = 150; |
| 58 | 57 |
| 59 PerformanceBase::PerformanceBase(double timeOrigin) | 58 PerformanceBase::PerformanceBase(double timeOrigin) |
| 60 : m_frameTimingBufferSize(defaultFrameTimingBufferSize), | 59 : m_frameTimingBufferSize(defaultFrameTimingBufferSize), |
| 61 m_resourceTimingBufferSize(defaultResourceTimingBufferSize), | 60 m_resourceTimingBufferSize(defaultResourceTimingBufferSize), |
| 62 m_userTiming(nullptr), | 61 m_userTiming(nullptr), |
| 63 m_timeOrigin(timeOrigin), | 62 m_timeOrigin(timeOrigin), |
| 64 m_observerFilterOptions(PerformanceEntry::Invalid), | 63 m_observerFilterOptions(PerformanceEntry::Invalid), |
| 65 m_deliverObservationsTimer( | 64 m_deliverObservationsTimer( |
| 66 this, | 65 this, |
| 67 &PerformanceBase::deliverObservationsTimerFired) {} | 66 &PerformanceBase::deliverObservationsTimerFired) {} |
| 68 | 67 |
| 69 PerformanceBase::~PerformanceBase() {} | 68 PerformanceBase::~PerformanceBase() {} |
| 70 | 69 |
| 70 PerformanceNavigationTiming::NavigationType PerformanceBase::getNavigationType( |
| 71 NavigationType type, |
| 72 const Document* document) { |
| 73 if (document && |
| 74 document->pageVisibilityState() == PageVisibilityStatePrerender) { |
| 75 return PerformanceNavigationTiming::NavigationType::Prerender; |
| 76 } |
| 77 switch (type) { |
| 78 case NavigationTypeReload: |
| 79 return PerformanceNavigationTiming::NavigationType::Reload; |
| 80 case NavigationTypeBackForward: |
| 81 return PerformanceNavigationTiming::NavigationType::BackForward; |
| 82 case NavigationTypeLinkClicked: |
| 83 case NavigationTypeFormSubmitted: |
| 84 case NavigationTypeFormResubmitted: |
| 85 case NavigationTypeOther: |
| 86 return PerformanceNavigationTiming::NavigationType::Navigate; |
| 87 } |
| 88 NOTREACHED(); |
| 89 return PerformanceNavigationTiming::NavigationType::Navigate; |
| 90 } |
| 91 |
| 71 const AtomicString& PerformanceBase::interfaceName() const { | 92 const AtomicString& PerformanceBase::interfaceName() const { |
| 72 return EventTargetNames::Performance; | 93 return EventTargetNames::Performance; |
| 73 } | 94 } |
| 74 | 95 |
| 75 PerformanceTiming* PerformanceBase::timing() const { | 96 PerformanceTiming* PerformanceBase::timing() const { |
| 76 return nullptr; | 97 return nullptr; |
| 77 } | 98 } |
| 78 | 99 |
| 79 PerformanceEntryVector PerformanceBase::getEntries() const { | 100 PerformanceEntryVector PerformanceBase::getEntries() const { |
| 80 PerformanceEntryVector entries; | 101 PerformanceEntryVector entries; |
| (...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 329 if (!resourceLoadTiming) | 350 if (!resourceLoadTiming) |
| 330 return; | 351 return; |
| 331 double lastRedirectEndTime = documentLoadTiming.redirectEnd(); | 352 double lastRedirectEndTime = documentLoadTiming.redirectEnd(); |
| 332 double finishTime = documentLoadTiming.loadEventEnd(); | 353 double finishTime = documentLoadTiming.loadEventEnd(); |
| 333 | 354 |
| 334 // TODO(sunjian) Implement transfer size. crbug/663187 | 355 // TODO(sunjian) Implement transfer size. crbug/663187 |
| 335 unsigned long long transferSize = 0; | 356 unsigned long long transferSize = 0; |
| 336 unsigned long long encodedBodyLength = finalResponse.encodedBodyLength(); | 357 unsigned long long encodedBodyLength = finalResponse.encodedBodyLength(); |
| 337 unsigned long long decodedBodyLength = finalResponse.decodedBodyLength(); | 358 unsigned long long decodedBodyLength = finalResponse.decodedBodyLength(); |
| 338 bool didReuseConnection = finalResponse.connectionReused(); | 359 bool didReuseConnection = finalResponse.connectionReused(); |
| 360 PerformanceNavigationTiming::NavigationType type = |
| 361 getNavigationType(documentLoader->getNavigationType(), frame->document()); |
| 339 | 362 |
| 340 m_navigationTiming = new PerformanceNavigationTiming( | 363 m_navigationTiming = new PerformanceNavigationTiming( |
| 341 timeOrigin(), documentLoadTiming.unloadEventStart(), | 364 timeOrigin(), documentLoadTiming.unloadEventStart(), |
| 342 documentLoadTiming.unloadEventEnd(), documentLoadTiming.loadEventStart(), | 365 documentLoadTiming.unloadEventEnd(), documentLoadTiming.loadEventStart(), |
| 343 documentLoadTiming.loadEventEnd(), documentLoadTiming.redirectCount(), | 366 documentLoadTiming.loadEventEnd(), documentLoadTiming.redirectCount(), |
| 344 documentTiming ? documentTiming->domInteractive() : 0, | 367 documentTiming ? documentTiming->domInteractive() : 0, |
| 345 documentTiming ? documentTiming->domContentLoadedEventStart() : 0, | 368 documentTiming ? documentTiming->domContentLoadedEventStart() : 0, |
| 346 documentTiming ? documentTiming->domContentLoadedEventEnd() : 0, | 369 documentTiming ? documentTiming->domContentLoadedEventEnd() : 0, |
| 347 documentTiming ? documentTiming->domComplete() : 0, | 370 documentTiming ? documentTiming->domComplete() : 0, type, |
| 348 documentLoader->getNavigationType(), documentLoadTiming.redirectStart(), | 371 documentLoadTiming.redirectStart(), documentLoadTiming.redirectEnd(), |
| 349 documentLoadTiming.redirectEnd(), documentLoadTiming.fetchStart(), | 372 documentLoadTiming.fetchStart(), documentLoadTiming.responseEnd(), |
| 350 documentLoadTiming.responseEnd(), | |
| 351 documentLoadTiming.hasCrossOriginRedirect(), | 373 documentLoadTiming.hasCrossOriginRedirect(), |
| 352 documentLoadTiming.hasSameOriginAsPreviousDocument(), resourceLoadTiming, | 374 documentLoadTiming.hasSameOriginAsPreviousDocument(), resourceLoadTiming, |
| 353 lastRedirectEndTime, finishTime, transferSize, encodedBodyLength, | 375 lastRedirectEndTime, finishTime, transferSize, encodedBodyLength, |
| 354 decodedBodyLength, didReuseConnection); | 376 decodedBodyLength, didReuseConnection); |
| 355 notifyObserversOfEntry(*m_navigationTiming); | 377 notifyObserversOfEntry(*m_navigationTiming); |
| 356 } | 378 } |
| 357 | 379 |
| 358 void PerformanceBase::addResourceTimingBuffer(PerformanceEntry& entry) { | 380 void PerformanceBase::addResourceTimingBuffer(PerformanceEntry& entry) { |
| 359 m_resourceTimingBuffer.append(&entry); | 381 m_resourceTimingBuffer.append(&entry); |
| 360 | 382 |
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 532 visitor->trace(m_resourceTimingBuffer); | 554 visitor->trace(m_resourceTimingBuffer); |
| 533 visitor->trace(m_navigationTiming); | 555 visitor->trace(m_navigationTiming); |
| 534 visitor->trace(m_userTiming); | 556 visitor->trace(m_userTiming); |
| 535 visitor->trace(m_observers); | 557 visitor->trace(m_observers); |
| 536 visitor->trace(m_activeObservers); | 558 visitor->trace(m_activeObservers); |
| 537 visitor->trace(m_suspendedObservers); | 559 visitor->trace(m_suspendedObservers); |
| 538 EventTargetWithInlineData::trace(visitor); | 560 EventTargetWithInlineData::trace(visitor); |
| 539 } | 561 } |
| 540 | 562 |
| 541 } // namespace blink | 563 } // namespace blink |
| OLD | NEW |