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 |