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

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

Issue 2472583003: Navigation Timing Level 2 (Closed)
Patch Set: addressed layout test failures 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/timing/PerformanceBase.h"
9
10 namespace blink {
11
12 // TODO(sunjian): Move this logic into PerformanceBase
13 static double monotonicTimeToDOMHighResTimeStamp(double timeOrigin,
14 double seconds) {
15 DCHECK(seconds >= 0.0);
16 if (!seconds || !timeOrigin)
17 return 0.0;
18 if (seconds < timeOrigin)
19 return 0.0;
20 return PerformanceBase::clampTimeResolution(seconds - timeOrigin) * 1000.0;
21 }
22
23 PerformanceNavigationTiming::PerformanceNavigationTiming(
24 double timeOrigin,
25 double unloadEventStart,
26 double unloadEventEnd,
27 double loadEventStart,
28 double loadEventEnd,
29 unsigned short redirectCount,
30 double domInteractive,
31 double domContentLoadedEventStart,
32 double domContentLoadedEventEnd,
33 double domComplete,
34 NavigationType type,
35 double redirectStart,
36 double redirectEnd,
37 double fetchStart,
38 double responseEnd,
39 bool hasCrossOriginRedirect,
40 bool hasSameOriginAsPreviousDocument,
41 ResourceLoadTiming* timing,
42 double lastRedirectEndTime,
43 double finishTime,
44 unsigned long long transferSize,
45 unsigned long long encodedBodyLength,
46 unsigned long long decodedBodyLength,
47 bool didReuseConnection)
48 : PerformanceResourceTiming("",
49 timeOrigin,
50 timing, // TODO(sunjian): Find out more about
51 // whether timing in this case can bu
52 // null, if it can't, add DCHECK
kinuko 2016/11/16 01:05:13 I think this can be nullptr at least for non-HTTP
sunjian 2016/11/16 02:22:37 Done.
53 lastRedirectEndTime,
54 finishTime,
55 transferSize,
56 encodedBodyLength,
57 decodedBodyLength,
58 didReuseConnection,
59 true /*allowTimingDetails*/, // TODO(sunjian):
60 // Create an enum
61 // for this.
kinuko 2016/11/16 01:05:13 nit/optional: is this formatting done by clang fo
sunjian 2016/11/16 02:22:37 I used git cl format to indent the lines.
62 !hasCrossOriginRedirect,
63 "document",
64 "navigation",
65 timeOrigin),
66 m_timeOrigin(timeOrigin),
67 m_unloadEventStart(unloadEventStart),
68 m_unloadEventEnd(unloadEventEnd),
69 m_loadEventStart(loadEventStart),
70 m_loadEventEnd(loadEventEnd),
71 m_redirectCount(redirectCount),
72 m_domInteractive(domInteractive),
73 m_domContentLoadedEventStart(domContentLoadedEventStart),
74 m_domContentLoadedEventEnd(domContentLoadedEventEnd),
75 m_domComplete(domComplete),
76 m_type(type),
77 m_redirectStart(redirectStart),
78 m_redirectEnd(redirectEnd),
79 m_fetchStart(fetchStart),
80 m_responseEnd(responseEnd),
81 m_hasCrossOriginRedirect(hasCrossOriginRedirect),
82 m_hasSameOriginAsPreviousDocument(hasSameOriginAsPreviousDocument) {}
83
84 PerformanceNavigationTiming::~PerformanceNavigationTiming() {}
85
86 double PerformanceNavigationTiming::unloadEventStart() const {
87 if (m_hasCrossOriginRedirect || !m_hasSameOriginAsPreviousDocument)
88 return 0;
89 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_unloadEventStart);
90 }
91
92 double PerformanceNavigationTiming::unloadEventEnd() const {
93 if (m_hasCrossOriginRedirect || !m_hasSameOriginAsPreviousDocument)
94 return 0;
95
96 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_unloadEventEnd);
97 }
98
99 double PerformanceNavigationTiming::domInteractive() const {
100 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_domInteractive);
101 }
102
103 double PerformanceNavigationTiming::domContentLoadedEventStart() const {
104 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin,
105 m_domContentLoadedEventStart);
106 }
107
108 double PerformanceNavigationTiming::domContentLoadedEventEnd() const {
109 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin,
110 m_domContentLoadedEventEnd);
111 }
112
113 double PerformanceNavigationTiming::domComplete() const {
114 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_domComplete);
115 }
116
117 double PerformanceNavigationTiming::loadEventStart() const {
118 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_loadEventStart);
119 }
120
121 double PerformanceNavigationTiming::loadEventEnd() const {
122 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_loadEventEnd);
123 }
124
125 AtomicString PerformanceNavigationTiming::type() const {
126 // TODO(sunjian) Right now NavigationType doesn't seem to have a Prerender
127 // type yet, need to look into this crbug/663217
128 switch (m_type) {
129 case NavigationTypeReload:
130 return "reload";
131 case NavigationTypeBackForward:
132 return "back_forward";
133 default:
134 return "navigate";
135 }
136 }
137
138 unsigned short PerformanceNavigationTiming::redirectCount() const {
139 // TODO(sunjian): Also check response headers to allow opt-in crbugs/665160
140 if (m_hasCrossOriginRedirect)
141 return 0;
142 return m_redirectCount;
143 }
144
145 double PerformanceNavigationTiming::fetchStart() const {
146 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_fetchStart);
147 }
148
149 double PerformanceNavigationTiming::redirectStart() const {
150 if (m_hasCrossOriginRedirect)
151 return 0;
152 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_redirectStart);
153 }
154
155 double PerformanceNavigationTiming::redirectEnd() const {
156 if (m_hasCrossOriginRedirect)
157 return 0;
158 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_redirectEnd);
159 }
160
161 double PerformanceNavigationTiming::responseEnd() const {
162 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_responseEnd);
163 }
164
165 void PerformanceNavigationTiming::buildJSONValue(
166 V8ObjectBuilder& builder) const {
167 PerformanceResourceTiming::buildJSONValue(builder);
168 builder.addNumber("unloadEventStart", unloadEventStart());
169 builder.addNumber("unloadEventEnd", unloadEventEnd());
170 builder.addNumber("domInteractive", domInteractive());
171 builder.addNumber("domContentLoadedEventStart", domContentLoadedEventStart());
172 builder.addNumber("domContentLoadedEventEnd", domContentLoadedEventEnd());
173 builder.addNumber("domComplete", domComplete());
174 builder.addNumber("loadEventStart", loadEventStart());
175 builder.addNumber("loadEventEnd", loadEventEnd());
176 builder.addString("type", type());
177 builder.addNumber("redirectCount", redirectCount());
178 }
179 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698