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

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

Issue 2647643004: Report nav timing 2 instance as soon as it's requested. (Closed)
Patch Set: add TODO Created 3 years, 9 months 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
« no previous file with comments | « third_party/WebKit/Source/core/timing/PerformanceResourceTiming.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2012 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 22 matching lines...) Expand all
33 33
34 #include "bindings/core/v8/V8ObjectBuilder.h" 34 #include "bindings/core/v8/V8ObjectBuilder.h"
35 #include "core/timing/PerformanceBase.h" 35 #include "core/timing/PerformanceBase.h"
36 #include "platform/loader/fetch/ResourceRequest.h" 36 #include "platform/loader/fetch/ResourceRequest.h"
37 #include "platform/loader/fetch/ResourceResponse.h" 37 #include "platform/loader/fetch/ResourceResponse.h"
38 #include "platform/loader/fetch/ResourceTimingInfo.h" 38 #include "platform/loader/fetch/ResourceTimingInfo.h"
39 39
40 namespace blink { 40 namespace blink {
41 41
42 PerformanceResourceTiming::PerformanceResourceTiming( 42 PerformanceResourceTiming::PerformanceResourceTiming(
43 const AtomicString& initiatorType,
44 double timeOrigin,
45 ResourceLoadTiming* timing,
46 double lastRedirectEndTime,
47 double finishTime,
48 unsigned long long transferSize,
49 unsigned long long encodedBodyLength,
50 unsigned long long decodedBodyLength,
51 bool didReuseConnection,
52 bool allowTimingDetails,
53 bool allowRedirectDetails,
54 const String& name,
55 const String& entryType,
56 double startTime)
57 : PerformanceEntry(
58 name,
59 entryType,
60 PerformanceBase::monotonicTimeToDOMHighResTimeStamp(timeOrigin,
61 startTime),
62 PerformanceBase::monotonicTimeToDOMHighResTimeStamp(timeOrigin,
63 finishTime)),
64 m_initiatorType(initiatorType),
65 m_timeOrigin(timeOrigin),
66 m_timing(timing),
67 m_lastRedirectEndTime(lastRedirectEndTime),
68 m_finishTime(finishTime),
69 m_transferSize(transferSize),
70 m_encodedBodySize(encodedBodyLength),
71 m_decodedBodySize(decodedBodyLength),
72 m_didReuseConnection(didReuseConnection),
73 m_allowTimingDetails(allowTimingDetails),
74 m_allowRedirectDetails(allowRedirectDetails) {}
75
76 PerformanceResourceTiming::PerformanceResourceTiming(
77 const ResourceTimingInfo& info, 43 const ResourceTimingInfo& info,
78 double timeOrigin, 44 double timeOrigin,
79 double startTime, 45 double startTime,
80 double lastRedirectEndTime, 46 double lastRedirectEndTime,
81 bool allowTimingDetails, 47 bool allowTimingDetails,
82 bool allowRedirectDetails) 48 bool allowRedirectDetails)
83 : PerformanceResourceTiming(info.initiatorType(), 49 : PerformanceEntry(
84 timeOrigin, 50 info.initialURL().getString(),
85 info.finalResponse().resourceLoadTiming(), 51 "resource",
86 lastRedirectEndTime, 52 PerformanceBase::monotonicTimeToDOMHighResTimeStamp(timeOrigin,
87 info.loadFinishTime(), 53 startTime),
88 info.transferSize(), 54 PerformanceBase::monotonicTimeToDOMHighResTimeStamp(
89 info.finalResponse().encodedBodyLength(), 55 timeOrigin,
90 info.finalResponse().decodedBodyLength(), 56 info.loadFinishTime())),
91 info.finalResponse().connectionReused(), 57 m_initiatorType(info.initiatorType()),
92 allowTimingDetails, 58 m_timeOrigin(timeOrigin),
93 allowRedirectDetails, 59 m_timing(info.finalResponse().resourceLoadTiming()),
94 info.initialURL().getString(), 60 m_lastRedirectEndTime(lastRedirectEndTime),
95 "resource", 61 m_finishTime(info.loadFinishTime()),
96 startTime) {} 62 m_transferSize(info.transferSize()),
63 m_encodedBodySize(info.finalResponse().encodedBodyLength()),
64 m_decodedBodySize(info.finalResponse().decodedBodyLength()),
65 m_didReuseConnection(info.finalResponse().connectionReused()),
66 m_allowTimingDetails(allowTimingDetails),
67 m_allowRedirectDetails(allowRedirectDetails) {}
68
69 // This constructor is for PerformanceNavigationTiming.
70 PerformanceResourceTiming::PerformanceResourceTiming(const String& name,
71 const String& entryType,
72 double startTime,
73 double duration)
74 : PerformanceEntry(name, entryType, startTime, duration) {}
97 75
98 PerformanceResourceTiming::~PerformanceResourceTiming() {} 76 PerformanceResourceTiming::~PerformanceResourceTiming() {}
99 77
78 ResourceLoadTiming* PerformanceResourceTiming::resourceLoadTiming() const {
79 return m_timing.get();
80 }
81
82 bool PerformanceResourceTiming::allowTimingDetails() const {
83 return m_allowTimingDetails;
84 }
85
86 bool PerformanceResourceTiming::didReuseConnection() const {
87 return m_didReuseConnection;
88 }
89
90 unsigned long long PerformanceResourceTiming::getTransferSize() const {
91 return m_transferSize;
92 }
93
94 unsigned long long PerformanceResourceTiming::getEncodedBodySize() const {
95 return m_encodedBodySize;
96 }
97
98 unsigned long long PerformanceResourceTiming::getDecodedBodySize() const {
99 return m_decodedBodySize;
100 }
101
100 AtomicString PerformanceResourceTiming::initiatorType() const { 102 AtomicString PerformanceResourceTiming::initiatorType() const {
101 return m_initiatorType; 103 return m_initiatorType;
102 } 104 }
103 105
104 DOMHighResTimeStamp PerformanceResourceTiming::workerStart() const { 106 DOMHighResTimeStamp PerformanceResourceTiming::workerStart() const {
105 if (!m_timing || m_timing->workerStart() == 0.0) 107 ResourceLoadTiming* timing = resourceLoadTiming();
108 if (!timing || timing->workerStart() == 0.0)
106 return 0.0; 109 return 0.0;
107 110
108 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp( 111 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp(
109 m_timeOrigin, m_timing->workerStart()); 112 m_timeOrigin, timing->workerStart());
110 } 113 }
111 114
112 DOMHighResTimeStamp PerformanceResourceTiming::workerReady() const { 115 DOMHighResTimeStamp PerformanceResourceTiming::workerReady() const {
113 if (!m_timing || m_timing->workerReady() == 0.0) 116 ResourceLoadTiming* timing = resourceLoadTiming();
117 if (!timing || timing->workerReady() == 0.0)
114 return 0.0; 118 return 0.0;
115 119
116 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp( 120 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp(
117 m_timeOrigin, m_timing->workerReady()); 121 m_timeOrigin, timing->workerReady());
118 } 122 }
119 123
120 DOMHighResTimeStamp PerformanceResourceTiming::redirectStart() const { 124 DOMHighResTimeStamp PerformanceResourceTiming::redirectStart() const {
121 if (!m_lastRedirectEndTime || !m_allowRedirectDetails) 125 if (!m_lastRedirectEndTime || !m_allowRedirectDetails)
122 return 0.0; 126 return 0.0;
123 127
124 if (DOMHighResTimeStamp workerReadyTime = workerReady()) 128 if (DOMHighResTimeStamp workerReadyTime = workerReady())
125 return workerReadyTime; 129 return workerReadyTime;
126 130
127 return PerformanceEntry::startTime(); 131 return PerformanceEntry::startTime();
128 } 132 }
129 133
130 DOMHighResTimeStamp PerformanceResourceTiming::redirectEnd() const { 134 DOMHighResTimeStamp PerformanceResourceTiming::redirectEnd() const {
131 if (!m_lastRedirectEndTime || !m_allowRedirectDetails) 135 if (!m_lastRedirectEndTime || !m_allowRedirectDetails)
132 return 0.0; 136 return 0.0;
133 137
134 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp( 138 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp(
135 m_timeOrigin, m_lastRedirectEndTime); 139 m_timeOrigin, m_lastRedirectEndTime);
136 } 140 }
137 141
138 DOMHighResTimeStamp PerformanceResourceTiming::fetchStart() const { 142 DOMHighResTimeStamp PerformanceResourceTiming::fetchStart() const {
139 if (!m_timing) 143 ResourceLoadTiming* timing = resourceLoadTiming();
144 if (!timing)
140 return PerformanceEntry::startTime(); 145 return PerformanceEntry::startTime();
141 146
142 if (m_lastRedirectEndTime) { 147 if (m_lastRedirectEndTime) {
143 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp( 148 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp(
144 m_timeOrigin, m_timing->requestTime()); 149 m_timeOrigin, timing->requestTime());
145 } 150 }
146 151
147 if (DOMHighResTimeStamp workerReadyTime = workerReady()) 152 if (DOMHighResTimeStamp workerReadyTime = workerReady())
148 return workerReadyTime; 153 return workerReadyTime;
149 154
150 return PerformanceEntry::startTime(); 155 return PerformanceEntry::startTime();
151 } 156 }
152 157
153 DOMHighResTimeStamp PerformanceResourceTiming::domainLookupStart() const { 158 DOMHighResTimeStamp PerformanceResourceTiming::domainLookupStart() const {
154 if (!m_allowTimingDetails) 159 if (!allowTimingDetails())
155 return 0.0; 160 return 0.0;
156 161 ResourceLoadTiming* timing = resourceLoadTiming();
157 if (!m_timing || m_timing->dnsStart() == 0.0) 162 if (!timing || timing->dnsStart() == 0.0)
158 return fetchStart(); 163 return fetchStart();
159 164
160 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp( 165 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp(
161 m_timeOrigin, m_timing->dnsStart()); 166 m_timeOrigin, timing->dnsStart());
162 } 167 }
163 168
164 DOMHighResTimeStamp PerformanceResourceTiming::domainLookupEnd() const { 169 DOMHighResTimeStamp PerformanceResourceTiming::domainLookupEnd() const {
165 if (!m_allowTimingDetails) 170 if (!allowTimingDetails())
166 return 0.0; 171 return 0.0;
167 172 ResourceLoadTiming* timing = resourceLoadTiming();
168 if (!m_timing || m_timing->dnsEnd() == 0.0) 173 if (!timing || timing->dnsEnd() == 0.0)
169 return domainLookupStart(); 174 return domainLookupStart();
170 175
171 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp( 176 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp(m_timeOrigin,
172 m_timeOrigin, m_timing->dnsEnd()); 177 timing->dnsEnd());
173 } 178 }
174 179
175 DOMHighResTimeStamp PerformanceResourceTiming::connectStart() const { 180 DOMHighResTimeStamp PerformanceResourceTiming::connectStart() const {
176 if (!m_allowTimingDetails) 181 if (!allowTimingDetails())
177 return 0.0; 182 return 0.0;
178 183 ResourceLoadTiming* timing = resourceLoadTiming();
179 // connectStart will be zero when a network request is not made. 184 // connectStart will be zero when a network request is not made.
180 if (!m_timing || m_timing->connectStart() == 0.0 || m_didReuseConnection) 185 if (!timing || timing->connectStart() == 0.0 || didReuseConnection())
181 return domainLookupEnd(); 186 return domainLookupEnd();
182 187
183 // connectStart includes any DNS time, so we may need to trim that off. 188 // connectStart includes any DNS time, so we may need to trim that off.
184 double connectStart = m_timing->connectStart(); 189 double connectStart = timing->connectStart();
185 if (m_timing->dnsEnd() > 0.0) 190 if (timing->dnsEnd() > 0.0)
186 connectStart = m_timing->dnsEnd(); 191 connectStart = timing->dnsEnd();
187 192
188 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, 193 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp(m_timeOrigin,
189 connectStart); 194 connectStart);
190 } 195 }
191 196
192 DOMHighResTimeStamp PerformanceResourceTiming::connectEnd() const { 197 DOMHighResTimeStamp PerformanceResourceTiming::connectEnd() const {
193 if (!m_allowTimingDetails) 198 if (!allowTimingDetails())
194 return 0.0; 199 return 0.0;
195 200 ResourceLoadTiming* timing = resourceLoadTiming();
196 // connectStart will be zero when a network request is not made. 201 // connectStart will be zero when a network request is not made.
197 if (!m_timing || m_timing->connectEnd() == 0.0 || m_didReuseConnection) 202 if (!timing || timing->connectEnd() == 0.0 || didReuseConnection())
198 return connectStart(); 203 return connectStart();
199 204
200 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp( 205 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp(
201 m_timeOrigin, m_timing->connectEnd()); 206 m_timeOrigin, timing->connectEnd());
202 } 207 }
203 208
204 DOMHighResTimeStamp PerformanceResourceTiming::secureConnectionStart() const { 209 DOMHighResTimeStamp PerformanceResourceTiming::secureConnectionStart() const {
205 if (!m_allowTimingDetails) 210 if (!allowTimingDetails())
206 return 0.0; 211 return 0.0;
207 212 ResourceLoadTiming* timing = resourceLoadTiming();
208 if (!m_timing || 213 if (!timing ||
209 m_timing->sslStart() == 0.0) // Secure connection not negotiated. 214 timing->sslStart() == 0.0) // Secure connection not negotiated.
210 return 0.0; 215 return 0.0;
211 216
212 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp( 217 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp(
213 m_timeOrigin, m_timing->sslStart()); 218 m_timeOrigin, timing->sslStart());
214 } 219 }
215 220
216 DOMHighResTimeStamp PerformanceResourceTiming::requestStart() const { 221 DOMHighResTimeStamp PerformanceResourceTiming::requestStart() const {
217 if (!m_allowTimingDetails) 222 if (!allowTimingDetails())
218 return 0.0; 223 return 0.0;
219 224 ResourceLoadTiming* timing = resourceLoadTiming();
220 if (!m_timing) 225 if (!timing)
221 return connectEnd(); 226 return connectEnd();
222 227
223 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp( 228 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp(
224 m_timeOrigin, m_timing->sendStart()); 229 m_timeOrigin, timing->sendStart());
225 } 230 }
226 231
227 DOMHighResTimeStamp PerformanceResourceTiming::responseStart() const { 232 DOMHighResTimeStamp PerformanceResourceTiming::responseStart() const {
228 if (!m_allowTimingDetails) 233 if (!allowTimingDetails())
229 return 0.0; 234 return 0.0;
230 235 ResourceLoadTiming* timing = resourceLoadTiming();
231 if (!m_timing) 236 if (!timing)
232 return requestStart(); 237 return requestStart();
233 238
234 // FIXME: This number isn't exactly correct. See the notes in 239 // FIXME: This number isn't exactly correct. See the notes in
235 // PerformanceTiming::responseStart(). 240 // PerformanceTiming::responseStart().
236 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp( 241 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp(
237 m_timeOrigin, m_timing->receiveHeadersEnd()); 242 m_timeOrigin, timing->receiveHeadersEnd());
238 } 243 }
239 244
240 DOMHighResTimeStamp PerformanceResourceTiming::responseEnd() const { 245 DOMHighResTimeStamp PerformanceResourceTiming::responseEnd() const {
241 if (!m_finishTime) 246 if (!m_finishTime)
242 return responseStart(); 247 return responseStart();
243 248
244 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, 249 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp(m_timeOrigin,
245 m_finishTime); 250 m_finishTime);
246 } 251 }
247 252
248 unsigned long long PerformanceResourceTiming::transferSize() const { 253 unsigned long long PerformanceResourceTiming::transferSize() const {
249 if (!m_allowTimingDetails) 254 if (!allowTimingDetails())
250 return 0; 255 return 0;
251 256
252 return m_transferSize; 257 return getTransferSize();
253 } 258 }
254 259
255 unsigned long long PerformanceResourceTiming::encodedBodySize() const { 260 unsigned long long PerformanceResourceTiming::encodedBodySize() const {
256 if (!m_allowTimingDetails) 261 if (!allowTimingDetails())
257 return 0; 262 return 0;
258 263
259 return m_encodedBodySize; 264 return getEncodedBodySize();
260 } 265 }
261 266
262 unsigned long long PerformanceResourceTiming::decodedBodySize() const { 267 unsigned long long PerformanceResourceTiming::decodedBodySize() const {
263 if (!m_allowTimingDetails) 268 if (!allowTimingDetails())
264 return 0; 269 return 0;
265 270
266 return m_decodedBodySize; 271 return getDecodedBodySize();
267 } 272 }
268 273
269 void PerformanceResourceTiming::buildJSONValue(V8ObjectBuilder& builder) const { 274 void PerformanceResourceTiming::buildJSONValue(V8ObjectBuilder& builder) const {
270 PerformanceEntry::buildJSONValue(builder); 275 PerformanceEntry::buildJSONValue(builder);
271 builder.addString("initiatorType", initiatorType()); 276 builder.addString("initiatorType", initiatorType());
272 builder.addNumber("workerStart", workerStart()); 277 builder.addNumber("workerStart", workerStart());
273 builder.addNumber("redirectStart", redirectStart()); 278 builder.addNumber("redirectStart", redirectStart());
274 builder.addNumber("redirectEnd", redirectEnd()); 279 builder.addNumber("redirectEnd", redirectEnd());
275 builder.addNumber("fetchStart", fetchStart()); 280 builder.addNumber("fetchStart", fetchStart());
276 builder.addNumber("domainLookupStart", domainLookupStart()); 281 builder.addNumber("domainLookupStart", domainLookupStart());
277 builder.addNumber("domainLookupEnd", domainLookupEnd()); 282 builder.addNumber("domainLookupEnd", domainLookupEnd());
278 builder.addNumber("connectStart", connectStart()); 283 builder.addNumber("connectStart", connectStart());
279 builder.addNumber("connectEnd", connectEnd()); 284 builder.addNumber("connectEnd", connectEnd());
280 builder.addNumber("secureConnectionStart", secureConnectionStart()); 285 builder.addNumber("secureConnectionStart", secureConnectionStart());
281 builder.addNumber("requestStart", requestStart()); 286 builder.addNumber("requestStart", requestStart());
282 builder.addNumber("responseStart", responseStart()); 287 builder.addNumber("responseStart", responseStart());
283 builder.addNumber("responseEnd", responseEnd()); 288 builder.addNumber("responseEnd", responseEnd());
284 builder.addNumber("transferSize", transferSize()); 289 builder.addNumber("transferSize", transferSize());
285 builder.addNumber("encodedBodySize", encodedBodySize()); 290 builder.addNumber("encodedBodySize", encodedBodySize());
286 builder.addNumber("decodedBodySize", decodedBodySize()); 291 builder.addNumber("decodedBodySize", decodedBodySize());
287 } 292 }
288 293
289 } // namespace blink 294 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/timing/PerformanceResourceTiming.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698