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 |