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

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

Issue 2615533002: Remove duplicate domHighResTimestamp conversion in NavigationTiming (Closed)
Patch Set: fixed layout test failures Created 3 years, 11 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 21 matching lines...) Expand all
32 #include "core/timing/PerformanceResourceTiming.h" 32 #include "core/timing/PerformanceResourceTiming.h"
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/network/ResourceRequest.h" 36 #include "platform/network/ResourceRequest.h"
37 #include "platform/network/ResourceResponse.h" 37 #include "platform/network/ResourceResponse.h"
38 #include "platform/network/ResourceTimingInfo.h" 38 #include "platform/network/ResourceTimingInfo.h"
39 39
40 namespace blink { 40 namespace blink {
41 41
42 // TODO(majidvp): Should return DOMHighResTimeStamp type instead
43 static double monotonicTimeToDOMHighResTimeStamp(double timeOrigin,
44 double seconds) {
45 ASSERT(seconds >= 0.0);
46 if (!seconds || !timeOrigin)
47 return 0.0;
48 return PerformanceBase::clampTimeResolution(seconds - timeOrigin) * 1000.0;
49 }
50
51 PerformanceResourceTiming::PerformanceResourceTiming( 42 PerformanceResourceTiming::PerformanceResourceTiming(
52 const AtomicString& initiatorType, 43 const AtomicString& initiatorType,
53 double timeOrigin, 44 double timeOrigin,
54 ResourceLoadTiming* timing, 45 ResourceLoadTiming* timing,
55 double lastRedirectEndTime, 46 double lastRedirectEndTime,
56 double finishTime, 47 double finishTime,
57 unsigned long long transferSize, 48 unsigned long long transferSize,
58 unsigned long long encodedBodyLength, 49 unsigned long long encodedBodyLength,
59 unsigned long long decodedBodyLength, 50 unsigned long long decodedBodyLength,
60 bool didReuseConnection, 51 bool didReuseConnection,
61 bool allowTimingDetails, 52 bool allowTimingDetails,
62 bool allowRedirectDetails, 53 bool allowRedirectDetails,
63 const String& name, 54 const String& name,
64 const String& entryType, 55 const String& entryType,
65 double startTime) 56 double startTime)
66 : PerformanceEntry( 57 : PerformanceEntry(
67 name, 58 name,
68 entryType, 59 entryType,
69 monotonicTimeToDOMHighResTimeStamp(timeOrigin, startTime), 60 PerformanceBase::monotonicTimeToDOMHighResTimeStamp(timeOrigin,
70 monotonicTimeToDOMHighResTimeStamp(timeOrigin, finishTime)), 61 startTime),
62 PerformanceBase::monotonicTimeToDOMHighResTimeStamp(timeOrigin,
63 finishTime)),
71 m_initiatorType(initiatorType), 64 m_initiatorType(initiatorType),
72 m_timeOrigin(timeOrigin), 65 m_timeOrigin(timeOrigin),
73 m_timing(timing), 66 m_timing(timing),
74 m_lastRedirectEndTime(lastRedirectEndTime), 67 m_lastRedirectEndTime(lastRedirectEndTime),
75 m_finishTime(finishTime), 68 m_finishTime(finishTime),
76 m_transferSize(transferSize), 69 m_transferSize(transferSize),
77 m_encodedBodySize(encodedBodyLength), 70 m_encodedBodySize(encodedBodyLength),
78 m_decodedBodySize(decodedBodyLength), 71 m_decodedBodySize(decodedBodyLength),
79 m_didReuseConnection(didReuseConnection), 72 m_didReuseConnection(didReuseConnection),
80 m_allowTimingDetails(allowTimingDetails), 73 m_allowTimingDetails(allowTimingDetails),
(...skipping 20 matching lines...) Expand all
101 info.initialURL().getString(), 94 info.initialURL().getString(),
102 "resource", 95 "resource",
103 startTime) {} 96 startTime) {}
104 97
105 PerformanceResourceTiming::~PerformanceResourceTiming() {} 98 PerformanceResourceTiming::~PerformanceResourceTiming() {}
106 99
107 AtomicString PerformanceResourceTiming::initiatorType() const { 100 AtomicString PerformanceResourceTiming::initiatorType() const {
108 return m_initiatorType; 101 return m_initiatorType;
109 } 102 }
110 103
111 double PerformanceResourceTiming::workerStart() const { 104 DOMHighResTimeStamp PerformanceResourceTiming::workerStart() const {
112 if (!m_timing || m_timing->workerStart() == 0.0) 105 if (!m_timing || m_timing->workerStart() == 0.0)
113 return 0.0; 106 return 0.0;
114 107
115 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, 108 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp(
116 m_timing->workerStart()); 109 m_timeOrigin, m_timing->workerStart());
117 } 110 }
118 111
119 double PerformanceResourceTiming::workerReady() const { 112 DOMHighResTimeStamp PerformanceResourceTiming::workerReady() const {
120 if (!m_timing || m_timing->workerReady() == 0.0) 113 if (!m_timing || m_timing->workerReady() == 0.0)
121 return 0.0; 114 return 0.0;
122 115
123 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, 116 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp(
124 m_timing->workerReady()); 117 m_timeOrigin, m_timing->workerReady());
125 } 118 }
126 119
127 double PerformanceResourceTiming::redirectStart() const { 120 DOMHighResTimeStamp PerformanceResourceTiming::redirectStart() const {
128 if (!m_lastRedirectEndTime || !m_allowRedirectDetails) 121 if (!m_lastRedirectEndTime || !m_allowRedirectDetails)
129 return 0.0; 122 return 0.0;
130 123
131 if (double workerReadyTime = workerReady()) 124 if (DOMHighResTimeStamp workerReadyTime = workerReady())
132 return workerReadyTime; 125 return workerReadyTime;
133 126
134 return PerformanceEntry::startTime(); 127 return PerformanceEntry::startTime();
135 } 128 }
136 129
137 double PerformanceResourceTiming::redirectEnd() const { 130 DOMHighResTimeStamp PerformanceResourceTiming::redirectEnd() const {
138 if (!m_lastRedirectEndTime || !m_allowRedirectDetails) 131 if (!m_lastRedirectEndTime || !m_allowRedirectDetails)
139 return 0.0; 132 return 0.0;
140 133
141 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, 134 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp(
142 m_lastRedirectEndTime); 135 m_timeOrigin, m_lastRedirectEndTime);
143 } 136 }
144 137
145 double PerformanceResourceTiming::fetchStart() const { 138 DOMHighResTimeStamp PerformanceResourceTiming::fetchStart() const {
146 if (m_lastRedirectEndTime) { 139 if (m_lastRedirectEndTime) {
147 // FIXME: ASSERT(m_timing) should be in constructor once timeticks of 140 // FIXME: ASSERT(m_timing) should be in constructor once timeticks of
148 // AppCache is exposed from chrome network stack, crbug/251100 141 // AppCache is exposed from chrome network stack, crbug/251100
149 ASSERT(m_timing); 142 ASSERT(m_timing);
150 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, 143 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp(
151 m_timing->requestTime()); 144 m_timeOrigin, m_timing->requestTime());
152 } 145 }
153 146
154 if (double workerReadyTime = workerReady()) 147 if (DOMHighResTimeStamp workerReadyTime = workerReady())
155 return workerReadyTime; 148 return workerReadyTime;
156 149
157 return PerformanceEntry::startTime(); 150 return PerformanceEntry::startTime();
158 } 151 }
159 152
160 double PerformanceResourceTiming::domainLookupStart() const { 153 DOMHighResTimeStamp PerformanceResourceTiming::domainLookupStart() const {
161 if (!m_allowTimingDetails) 154 if (!m_allowTimingDetails)
162 return 0.0; 155 return 0.0;
163 156
164 if (!m_timing || m_timing->dnsStart() == 0.0) 157 if (!m_timing || m_timing->dnsStart() == 0.0)
165 return fetchStart(); 158 return fetchStart();
166 159
167 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_timing->dnsStart()); 160 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp(
161 m_timeOrigin, m_timing->dnsStart());
168 } 162 }
169 163
170 double PerformanceResourceTiming::domainLookupEnd() const { 164 DOMHighResTimeStamp PerformanceResourceTiming::domainLookupEnd() const {
171 if (!m_allowTimingDetails) 165 if (!m_allowTimingDetails)
172 return 0.0; 166 return 0.0;
173 167
174 if (!m_timing || m_timing->dnsEnd() == 0.0) 168 if (!m_timing || m_timing->dnsEnd() == 0.0)
175 return domainLookupStart(); 169 return domainLookupStart();
176 170
177 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_timing->dnsEnd()); 171 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp(
172 m_timeOrigin, m_timing->dnsEnd());
178 } 173 }
179 174
180 double PerformanceResourceTiming::connectStart() const { 175 DOMHighResTimeStamp PerformanceResourceTiming::connectStart() const {
181 if (!m_allowTimingDetails) 176 if (!m_allowTimingDetails)
182 return 0.0; 177 return 0.0;
183 178
184 // connectStart will be zero when a network request is not made. 179 // connectStart will be zero when a network request is not made.
185 if (!m_timing || m_timing->connectStart() == 0.0 || m_didReuseConnection) 180 if (!m_timing || m_timing->connectStart() == 0.0 || m_didReuseConnection)
186 return domainLookupEnd(); 181 return domainLookupEnd();
187 182
188 // connectStart includes any DNS time, so we may need to trim that off. 183 // connectStart includes any DNS time, so we may need to trim that off.
189 double connectStart = m_timing->connectStart(); 184 double connectStart = m_timing->connectStart();
190 if (m_timing->dnsEnd() > 0.0) 185 if (m_timing->dnsEnd() > 0.0)
191 connectStart = m_timing->dnsEnd(); 186 connectStart = m_timing->dnsEnd();
192 187
193 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, connectStart); 188 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp(m_timeOrigin,
189 connectStart);
194 } 190 }
195 191
196 double PerformanceResourceTiming::connectEnd() const { 192 DOMHighResTimeStamp PerformanceResourceTiming::connectEnd() const {
197 if (!m_allowTimingDetails) 193 if (!m_allowTimingDetails)
198 return 0.0; 194 return 0.0;
199 195
200 // connectStart will be zero when a network request is not made. 196 // connectStart will be zero when a network request is not made.
201 if (!m_timing || m_timing->connectEnd() == 0.0 || m_didReuseConnection) 197 if (!m_timing || m_timing->connectEnd() == 0.0 || m_didReuseConnection)
202 return connectStart(); 198 return connectStart();
203 199
204 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, 200 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp(
205 m_timing->connectEnd()); 201 m_timeOrigin, m_timing->connectEnd());
206 } 202 }
207 203
208 double PerformanceResourceTiming::secureConnectionStart() const { 204 DOMHighResTimeStamp PerformanceResourceTiming::secureConnectionStart() const {
209 if (!m_allowTimingDetails) 205 if (!m_allowTimingDetails)
210 return 0.0; 206 return 0.0;
211 207
212 if (!m_timing || 208 if (!m_timing ||
213 m_timing->sslStart() == 0.0) // Secure connection not negotiated. 209 m_timing->sslStart() == 0.0) // Secure connection not negotiated.
214 return 0.0; 210 return 0.0;
215 211
216 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_timing->sslStart()); 212 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp(
213 m_timeOrigin, m_timing->sslStart());
217 } 214 }
218 215
219 double PerformanceResourceTiming::requestStart() const { 216 DOMHighResTimeStamp PerformanceResourceTiming::requestStart() const {
220 if (!m_allowTimingDetails) 217 if (!m_allowTimingDetails)
221 return 0.0; 218 return 0.0;
222 219
223 if (!m_timing) 220 if (!m_timing)
224 return connectEnd(); 221 return connectEnd();
225 222
226 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, 223 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp(
227 m_timing->sendStart()); 224 m_timeOrigin, m_timing->sendStart());
228 } 225 }
229 226
230 double PerformanceResourceTiming::responseStart() const { 227 DOMHighResTimeStamp PerformanceResourceTiming::responseStart() const {
231 if (!m_allowTimingDetails) 228 if (!m_allowTimingDetails)
232 return 0.0; 229 return 0.0;
233 230
234 if (!m_timing) 231 if (!m_timing)
235 return requestStart(); 232 return requestStart();
236 233
237 // FIXME: This number isn't exactly correct. See the notes in 234 // FIXME: This number isn't exactly correct. See the notes in
238 // PerformanceTiming::responseStart(). 235 // PerformanceTiming::responseStart().
239 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, 236 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp(
240 m_timing->receiveHeadersEnd()); 237 m_timeOrigin, m_timing->receiveHeadersEnd());
241 } 238 }
242 239
243 double PerformanceResourceTiming::responseEnd() const { 240 DOMHighResTimeStamp PerformanceResourceTiming::responseEnd() const {
244 if (!m_finishTime) 241 if (!m_finishTime)
245 return responseStart(); 242 return responseStart();
246 243
247 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_finishTime); 244 return PerformanceBase::monotonicTimeToDOMHighResTimeStamp(m_timeOrigin,
245 m_finishTime);
248 } 246 }
249 247
250 unsigned long long PerformanceResourceTiming::transferSize() const { 248 unsigned long long PerformanceResourceTiming::transferSize() const {
251 if (!m_allowTimingDetails) 249 if (!m_allowTimingDetails)
252 return 0; 250 return 0;
253 251
254 return m_transferSize; 252 return m_transferSize;
255 } 253 }
256 254
257 unsigned long long PerformanceResourceTiming::encodedBodySize() const { 255 unsigned long long PerformanceResourceTiming::encodedBodySize() const {
(...skipping 24 matching lines...) Expand all
282 builder.addNumber("secureConnectionStart", secureConnectionStart()); 280 builder.addNumber("secureConnectionStart", secureConnectionStart());
283 builder.addNumber("requestStart", requestStart()); 281 builder.addNumber("requestStart", requestStart());
284 builder.addNumber("responseStart", responseStart()); 282 builder.addNumber("responseStart", responseStart());
285 builder.addNumber("responseEnd", responseEnd()); 283 builder.addNumber("responseEnd", responseEnd());
286 builder.addNumber("transferSize", transferSize()); 284 builder.addNumber("transferSize", transferSize());
287 builder.addNumber("encodedBodySize", encodedBodySize()); 285 builder.addNumber("encodedBodySize", encodedBodySize());
288 builder.addNumber("decodedBodySize", decodedBodySize()); 286 builder.addNumber("decodedBodySize", decodedBodySize());
289 } 287 }
290 288
291 } // namespace blink 289 } // 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