| 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 } |
| 90 |
| 71 const AtomicString& PerformanceBase::interfaceName() const { | 91 const AtomicString& PerformanceBase::interfaceName() const { |
| 72 return EventTargetNames::Performance; | 92 return EventTargetNames::Performance; |
| 73 } | 93 } |
| 74 | 94 |
| 75 PerformanceTiming* PerformanceBase::timing() const { | 95 PerformanceTiming* PerformanceBase::timing() const { |
| 76 return nullptr; | 96 return nullptr; |
| 77 } | 97 } |
| 78 | 98 |
| 79 PerformanceEntryVector PerformanceBase::getEntries() const { | 99 PerformanceEntryVector PerformanceBase::getEntries() const { |
| 80 PerformanceEntryVector entries; | 100 PerformanceEntryVector entries; |
| (...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 329 if (!resourceLoadTiming) | 349 if (!resourceLoadTiming) |
| 330 return; | 350 return; |
| 331 double lastRedirectEndTime = documentLoadTiming.redirectEnd(); | 351 double lastRedirectEndTime = documentLoadTiming.redirectEnd(); |
| 332 double finishTime = documentLoadTiming.loadEventEnd(); | 352 double finishTime = documentLoadTiming.loadEventEnd(); |
| 333 | 353 |
| 334 // TODO(sunjian) Implement transfer size. crbug/663187 | 354 // TODO(sunjian) Implement transfer size. crbug/663187 |
| 335 unsigned long long transferSize = 0; | 355 unsigned long long transferSize = 0; |
| 336 unsigned long long encodedBodyLength = finalResponse.encodedBodyLength(); | 356 unsigned long long encodedBodyLength = finalResponse.encodedBodyLength(); |
| 337 unsigned long long decodedBodyLength = finalResponse.decodedBodyLength(); | 357 unsigned long long decodedBodyLength = finalResponse.decodedBodyLength(); |
| 338 bool didReuseConnection = finalResponse.connectionReused(); | 358 bool didReuseConnection = finalResponse.connectionReused(); |
| 359 PerformanceNavigationTiming::NavigationType type = |
| 360 getNavigationType(documentLoader->getNavigationType(), frame->document()); |
| 339 | 361 |
| 340 m_navigationTiming = new PerformanceNavigationTiming( | 362 m_navigationTiming = new PerformanceNavigationTiming( |
| 341 timeOrigin(), documentLoadTiming.unloadEventStart(), | 363 timeOrigin(), documentLoadTiming.unloadEventStart(), |
| 342 documentLoadTiming.unloadEventEnd(), documentLoadTiming.loadEventStart(), | 364 documentLoadTiming.unloadEventEnd(), documentLoadTiming.loadEventStart(), |
| 343 documentLoadTiming.loadEventEnd(), documentLoadTiming.redirectCount(), | 365 documentLoadTiming.loadEventEnd(), documentLoadTiming.redirectCount(), |
| 344 documentTiming ? documentTiming->domInteractive() : 0, | 366 documentTiming ? documentTiming->domInteractive() : 0, |
| 345 documentTiming ? documentTiming->domContentLoadedEventStart() : 0, | 367 documentTiming ? documentTiming->domContentLoadedEventStart() : 0, |
| 346 documentTiming ? documentTiming->domContentLoadedEventEnd() : 0, | 368 documentTiming ? documentTiming->domContentLoadedEventEnd() : 0, |
| 347 documentTiming ? documentTiming->domComplete() : 0, | 369 documentTiming ? documentTiming->domComplete() : 0, type, |
| 348 documentLoader->getNavigationType(), documentLoadTiming.redirectStart(), | 370 documentLoadTiming.redirectStart(), documentLoadTiming.redirectEnd(), |
| 349 documentLoadTiming.redirectEnd(), documentLoadTiming.fetchStart(), | 371 documentLoadTiming.fetchStart(), documentLoadTiming.responseEnd(), |
| 350 documentLoadTiming.responseEnd(), | |
| 351 documentLoadTiming.hasCrossOriginRedirect(), | 372 documentLoadTiming.hasCrossOriginRedirect(), |
| 352 documentLoadTiming.hasSameOriginAsPreviousDocument(), resourceLoadTiming, | 373 documentLoadTiming.hasSameOriginAsPreviousDocument(), resourceLoadTiming, |
| 353 lastRedirectEndTime, finishTime, transferSize, encodedBodyLength, | 374 lastRedirectEndTime, finishTime, transferSize, encodedBodyLength, |
| 354 decodedBodyLength, didReuseConnection); | 375 decodedBodyLength, didReuseConnection); |
| 355 notifyObserversOfEntry(*m_navigationTiming); | 376 notifyObserversOfEntry(*m_navigationTiming); |
| 356 } | 377 } |
| 357 | 378 |
| 358 void PerformanceBase::addResourceTimingBuffer(PerformanceEntry& entry) { | 379 void PerformanceBase::addResourceTimingBuffer(PerformanceEntry& entry) { |
| 359 m_resourceTimingBuffer.append(&entry); | 380 m_resourceTimingBuffer.append(&entry); |
| 360 | 381 |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 529 visitor->trace(m_resourceTimingBuffer); | 550 visitor->trace(m_resourceTimingBuffer); |
| 530 visitor->trace(m_navigationTiming); | 551 visitor->trace(m_navigationTiming); |
| 531 visitor->trace(m_userTiming); | 552 visitor->trace(m_userTiming); |
| 532 visitor->trace(m_observers); | 553 visitor->trace(m_observers); |
| 533 visitor->trace(m_activeObservers); | 554 visitor->trace(m_activeObservers); |
| 534 visitor->trace(m_suspendedObservers); | 555 visitor->trace(m_suspendedObservers); |
| 535 EventTargetWithInlineData::trace(visitor); | 556 EventTargetWithInlineData::trace(visitor); |
| 536 } | 557 } |
| 537 | 558 |
| 538 } // namespace blink | 559 } // namespace blink |
| OLD | NEW |