Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(297)

Side by Side Diff: third_party/WebKit/Source/core/timing/PerformanceNavigationTiming.cpp

Issue 2472583003: Navigation Timing Level 2 (Closed)
Patch Set: addressed comments Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "core/timing/PerformanceNavigationTiming.h"
6
7 #include "bindings/core/v8/V8ObjectBuilder.h"
8 #include "core/dom/DocumentTiming.h"
9 #include "core/loader/DocumentLoadTiming.h"
10 #include "core/loader/DocumentLoader.h"
Yoav Weiss 2016/11/12 17:13:47 Are these h file declarations needed here?
sunjian 2016/11/14 22:12:28 Done.
11 #include "core/timing/PerformanceBase.h"
12
13 namespace blink {
14
15 // TODO(sunjian): Move this logic into PerformanceBase
16 static double monotonicTimeToDOMHighResTimeStamp(double timeOrigin,
17 double seconds) {
18 DCHECK(seconds >= 0.0);
19 if (!seconds || !timeOrigin)
20 return 0.0;
21 return PerformanceBase::clampTimeResolution(seconds - timeOrigin) * 1000.0;
Yoav Weiss 2016/11/13 13:48:02 Should we make sure here that the result is never
sunjian 2016/11/14 22:12:28 Done.
22 }
23
24 PerformanceNavigationTiming::PerformanceNavigationTiming(
25 double timeOrigin,
26 double unloadEventStart,
27 double unloadEventEnd,
28 double loadEventStart,
29 double loadEventEnd,
30 unsigned short redirectCount,
31 double domInteractive,
32 double domContentLoadedEventStart,
33 double domContentLoadedEventEnd,
34 double domComplete,
35 NavigationType type,
36 double redirectStart,
37 double redirectEnd,
38 double fetchStart,
39 double responseEnd,
40 bool hasCrossOriginRedirect,
41 bool hasSameOriginAsPreviousDocument,
42 ResourceLoadTiming* timing,
43 double lastRedirectEndTime,
44 double finishTime,
45 unsigned long long transferSize,
46 unsigned long long encodedBodyLength,
47 unsigned long long decodedBodyLength,
48 bool didReuseConnection)
49 : PerformanceResourceTiming("",
50 timeOrigin,
51 timing,
Yoav Weiss 2016/11/12 17:13:47 We can DCHECK that timing is not null here, to mak
sunjian 2016/11/14 22:12:28 But timing could possibly be nullptr, right? And P
Yoav Weiss 2016/11/14 23:02:52 Is there a scenario where the document's ResourceR
52 lastRedirectEndTime,
53 finishTime,
54 transferSize,
55 encodedBodyLength,
56 decodedBodyLength,
57 didReuseConnection,
58 true /*allowTimingDetails*/,
Yoav Weiss 2016/11/12 17:13:47 This should be an enum
panicker 2016/11/14 17:38:52 What are the values of the enum? Let's move improv
Yoav Weiss 2016/11/14 20:59:50 I think this enum should be defined as part of the
sunjian 2016/11/14 22:12:28 Added a TODO and will come back to make the improv
59 !hasCrossOriginRedirect,
60 "document",
61 "navigation",
62 timeOrigin),
63 m_timeOrigin(timeOrigin),
64 m_unloadEventStart(unloadEventStart),
65 m_unloadEventEnd(unloadEventEnd),
66 m_loadEventStart(loadEventStart),
67 m_loadEventEnd(loadEventEnd),
68 m_redirectCount(redirectCount),
69 m_domInteractive(domInteractive),
70 m_domContentLoadedEventStart(domContentLoadedEventStart),
71 m_domContentLoadedEventEnd(domContentLoadedEventEnd),
72 m_domComplete(domComplete),
73 m_type(type),
74 m_redirectStart(redirectStart),
75 m_redirectEnd(redirectEnd),
76 m_fetchStart(fetchStart),
77 m_responseEnd(responseEnd),
78 m_hasCrossOriginRedirect(hasCrossOriginRedirect),
79 m_hasSameOriginAsPreviousDocument(hasSameOriginAsPreviousDocument) {}
80
81 PerformanceNavigationTiming::~PerformanceNavigationTiming() {}
82
83 double PerformanceNavigationTiming::unloadEventStart() const {
84 if (m_hasCrossOriginRedirect || !m_hasSameOriginAsPreviousDocument)
85 return 0;
86 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_unloadEventStart);
87 }
88
89 double PerformanceNavigationTiming::unloadEventEnd() const {
90 if (m_hasCrossOriginRedirect || !m_hasSameOriginAsPreviousDocument)
91 return 0;
92
93 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_unloadEventEnd);
94 }
95
96 double PerformanceNavigationTiming::domInteractive() const {
97 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_domInteractive);
98 }
99
100 double PerformanceNavigationTiming::domContentLoadedEventStart() const {
101 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin,
102 m_domContentLoadedEventStart);
103 }
104
105 double PerformanceNavigationTiming::domContentLoadedEventEnd() const {
106 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin,
107 m_domContentLoadedEventEnd);
108 }
109
110 double PerformanceNavigationTiming::domComplete() const {
111 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_domComplete);
112 }
113
114 double PerformanceNavigationTiming::loadEventStart() const {
115 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_loadEventStart);
116 }
117
118 double PerformanceNavigationTiming::loadEventEnd() const {
119 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_loadEventEnd);
120 }
121
122 AtomicString PerformanceNavigationTiming::type() const {
123 // TODO(sunjian) Right now NavigationType doesn't seem to have a Prerender
124 // type yet, need to look into this crbug/663217
125 switch (m_type) {
126 case NavigationTypeReload:
127 return "reload";
128 case NavigationTypeBackForward:
129 return "back_forward";
130 default:
131 return "navigate";
132 }
133 }
134
135 unsigned short PerformanceNavigationTiming::redirectCount() const {
136 if (m_hasCrossOriginRedirect)
137 return 0;
138 return m_redirectCount;
139 }
140
141 double PerformanceNavigationTiming::fetchStart() const {
142 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_fetchStart);
143 }
144
145 double PerformanceNavigationTiming::redirectStart() const {
146 if (m_hasCrossOriginRedirect)
panicker 2016/11/14 19:31:47 Add a TODO & bug to follow up on whether this shou
sunjian 2016/11/14 22:12:28 Done.
147 return 0;
148 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_redirectStart);
149 }
150
151 double PerformanceNavigationTiming::redirectEnd() const {
152 if (m_hasCrossOriginRedirect)
153 return 0;
154 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_redirectEnd);
155 }
156
157 double PerformanceNavigationTiming::responseEnd() const {
158 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_responseEnd);
159 }
160
161 void PerformanceNavigationTiming::buildJSONValue(
162 V8ObjectBuilder& builder) const {
163 PerformanceResourceTiming::buildJSONValue(builder);
164 builder.addNumber("unloadEventStart", unloadEventStart());
165 builder.addNumber("unloadEventEnd", unloadEventEnd());
166 builder.addNumber("domInteractive", domInteractive());
167 builder.addNumber("domContentLoadedEventStart", domContentLoadedEventStart());
168 builder.addNumber("domContentLoadedEventEnd", domContentLoadedEventEnd());
169 builder.addNumber("domComplete", domComplete());
170 builder.addNumber("loadEventStart", loadEventStart());
171 builder.addNumber("loadEventEnd", loadEventEnd());
172 builder.addString("type", type());
173 builder.addNumber("redirectCount", redirectCount());
174 }
175 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698