OLD | NEW |
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 28 matching lines...) Expand all Loading... |
39 | 39 |
40 namespace blink { | 40 namespace blink { |
41 | 41 |
42 PerformanceResourceTiming::PerformanceResourceTiming( | 42 PerformanceResourceTiming::PerformanceResourceTiming( |
43 const ResourceTimingInfo& info, | 43 const ResourceTimingInfo& info, |
44 double time_origin, | 44 double time_origin, |
45 double start_time, | 45 double start_time, |
46 double last_redirect_end_time, | 46 double last_redirect_end_time, |
47 bool allow_timing_details, | 47 bool allow_timing_details, |
48 bool allow_redirect_details) | 48 bool allow_redirect_details) |
49 : PerformanceEntry( | 49 : PerformanceEntry(info.InitialURL().GetString(), |
50 info.InitialURL().GetString(), | 50 "resource", |
51 "resource", | 51 PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( |
52 PerformanceBase::MonotonicTimeToDOMHighResTimeStamp(time_origin, | 52 time_origin, |
53 start_time), | 53 start_time, |
54 PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( | 54 info.NegativeAllowed()), |
55 time_origin, | 55 PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( |
56 info.LoadFinishTime())), | 56 time_origin, |
| 57 info.LoadFinishTime(), |
| 58 info.NegativeAllowed())), |
57 initiator_type_(info.InitiatorType()), | 59 initiator_type_(info.InitiatorType()), |
58 time_origin_(time_origin), | 60 time_origin_(time_origin), |
59 timing_(info.FinalResponse().GetResourceLoadTiming()), | 61 timing_(info.FinalResponse().GetResourceLoadTiming()), |
60 last_redirect_end_time_(last_redirect_end_time), | 62 last_redirect_end_time_(last_redirect_end_time), |
61 finish_time_(info.LoadFinishTime()), | 63 finish_time_(info.LoadFinishTime()), |
62 transfer_size_(info.TransferSize()), | 64 transfer_size_(info.TransferSize()), |
63 encoded_body_size_(info.FinalResponse().EncodedBodyLength()), | 65 encoded_body_size_(info.FinalResponse().EncodedBodyLength()), |
64 decoded_body_size_(info.FinalResponse().DecodedBodyLength()), | 66 decoded_body_size_(info.FinalResponse().DecodedBodyLength()), |
65 did_reuse_connection_(info.FinalResponse().ConnectionReused()), | 67 did_reuse_connection_(info.FinalResponse().ConnectionReused()), |
66 allow_timing_details_(allow_timing_details), | 68 allow_timing_details_(allow_timing_details), |
67 allow_redirect_details_(allow_redirect_details) {} | 69 allow_redirect_details_(allow_redirect_details), |
| 70 allow_negative_value_(info.NegativeAllowed()) {} |
68 | 71 |
69 // This constructor is for PerformanceNavigationTiming. | 72 // This constructor is for PerformanceNavigationTiming. |
70 PerformanceResourceTiming::PerformanceResourceTiming(const String& name, | 73 PerformanceResourceTiming::PerformanceResourceTiming(const String& name, |
71 const String& entry_type, | 74 const String& entry_type, |
72 double start_time, | 75 double start_time, |
73 double duration) | 76 double duration) |
74 : PerformanceEntry(name, entry_type, start_time, duration) {} | 77 : PerformanceEntry(name, entry_type, start_time, duration) {} |
75 | 78 |
76 PerformanceResourceTiming::~PerformanceResourceTiming() {} | 79 PerformanceResourceTiming::~PerformanceResourceTiming() {} |
77 | 80 |
(...skipping 24 matching lines...) Expand all Loading... |
102 AtomicString PerformanceResourceTiming::initiatorType() const { | 105 AtomicString PerformanceResourceTiming::initiatorType() const { |
103 return initiator_type_; | 106 return initiator_type_; |
104 } | 107 } |
105 | 108 |
106 DOMHighResTimeStamp PerformanceResourceTiming::workerStart() const { | 109 DOMHighResTimeStamp PerformanceResourceTiming::workerStart() const { |
107 ResourceLoadTiming* timing = GetResourceLoadTiming(); | 110 ResourceLoadTiming* timing = GetResourceLoadTiming(); |
108 if (!timing || timing->WorkerStart() == 0.0) | 111 if (!timing || timing->WorkerStart() == 0.0) |
109 return 0.0; | 112 return 0.0; |
110 | 113 |
111 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( | 114 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( |
112 time_origin_, timing->WorkerStart()); | 115 time_origin_, timing->WorkerStart(), allow_negative_value_); |
113 } | 116 } |
114 | 117 |
115 DOMHighResTimeStamp PerformanceResourceTiming::WorkerReady() const { | 118 DOMHighResTimeStamp PerformanceResourceTiming::WorkerReady() const { |
116 ResourceLoadTiming* timing = GetResourceLoadTiming(); | 119 ResourceLoadTiming* timing = GetResourceLoadTiming(); |
117 if (!timing || timing->WorkerReady() == 0.0) | 120 if (!timing || timing->WorkerReady() == 0.0) |
118 return 0.0; | 121 return 0.0; |
119 | 122 |
120 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( | 123 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( |
121 time_origin_, timing->WorkerReady()); | 124 time_origin_, timing->WorkerReady(), allow_negative_value_); |
122 } | 125 } |
123 | 126 |
124 DOMHighResTimeStamp PerformanceResourceTiming::redirectStart() const { | 127 DOMHighResTimeStamp PerformanceResourceTiming::redirectStart() const { |
125 if (!last_redirect_end_time_ || !allow_redirect_details_) | 128 if (!last_redirect_end_time_ || !allow_redirect_details_) |
126 return 0.0; | 129 return 0.0; |
127 | 130 |
128 if (DOMHighResTimeStamp worker_ready_time = WorkerReady()) | 131 if (DOMHighResTimeStamp worker_ready_time = WorkerReady()) |
129 return worker_ready_time; | 132 return worker_ready_time; |
130 | 133 |
131 return PerformanceEntry::startTime(); | 134 return PerformanceEntry::startTime(); |
132 } | 135 } |
133 | 136 |
134 DOMHighResTimeStamp PerformanceResourceTiming::redirectEnd() const { | 137 DOMHighResTimeStamp PerformanceResourceTiming::redirectEnd() const { |
135 if (!last_redirect_end_time_ || !allow_redirect_details_) | 138 if (!last_redirect_end_time_ || !allow_redirect_details_) |
136 return 0.0; | 139 return 0.0; |
137 | 140 |
138 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( | 141 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( |
139 time_origin_, last_redirect_end_time_); | 142 time_origin_, last_redirect_end_time_, allow_negative_value_); |
140 } | 143 } |
141 | 144 |
142 DOMHighResTimeStamp PerformanceResourceTiming::fetchStart() const { | 145 DOMHighResTimeStamp PerformanceResourceTiming::fetchStart() const { |
143 ResourceLoadTiming* timing = GetResourceLoadTiming(); | 146 ResourceLoadTiming* timing = GetResourceLoadTiming(); |
144 if (!timing) | 147 if (!timing) |
145 return PerformanceEntry::startTime(); | 148 return PerformanceEntry::startTime(); |
146 | 149 |
147 if (last_redirect_end_time_) { | 150 if (last_redirect_end_time_) { |
148 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( | 151 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( |
149 time_origin_, timing->RequestTime()); | 152 time_origin_, timing->RequestTime(), allow_negative_value_); |
150 } | 153 } |
151 | 154 |
152 if (DOMHighResTimeStamp worker_ready_time = WorkerReady()) | 155 if (DOMHighResTimeStamp worker_ready_time = WorkerReady()) |
153 return worker_ready_time; | 156 return worker_ready_time; |
154 | 157 |
155 return PerformanceEntry::startTime(); | 158 return PerformanceEntry::startTime(); |
156 } | 159 } |
157 | 160 |
158 DOMHighResTimeStamp PerformanceResourceTiming::domainLookupStart() const { | 161 DOMHighResTimeStamp PerformanceResourceTiming::domainLookupStart() const { |
159 if (!AllowTimingDetails()) | 162 if (!AllowTimingDetails()) |
160 return 0.0; | 163 return 0.0; |
161 ResourceLoadTiming* timing = GetResourceLoadTiming(); | 164 ResourceLoadTiming* timing = GetResourceLoadTiming(); |
162 if (!timing || timing->DnsStart() == 0.0) | 165 if (!timing || timing->DnsStart() == 0.0) |
163 return fetchStart(); | 166 return fetchStart(); |
164 | 167 |
165 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( | 168 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( |
166 time_origin_, timing->DnsStart()); | 169 time_origin_, timing->DnsStart(), allow_negative_value_); |
167 } | 170 } |
168 | 171 |
169 DOMHighResTimeStamp PerformanceResourceTiming::domainLookupEnd() const { | 172 DOMHighResTimeStamp PerformanceResourceTiming::domainLookupEnd() const { |
170 if (!AllowTimingDetails()) | 173 if (!AllowTimingDetails()) |
171 return 0.0; | 174 return 0.0; |
172 ResourceLoadTiming* timing = GetResourceLoadTiming(); | 175 ResourceLoadTiming* timing = GetResourceLoadTiming(); |
173 if (!timing || timing->DnsEnd() == 0.0) | 176 if (!timing || timing->DnsEnd() == 0.0) |
174 return domainLookupStart(); | 177 return domainLookupStart(); |
175 | 178 |
176 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp(time_origin_, | 179 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( |
177 timing->DnsEnd()); | 180 time_origin_, timing->DnsEnd(), allow_negative_value_); |
178 } | 181 } |
179 | 182 |
180 DOMHighResTimeStamp PerformanceResourceTiming::connectStart() const { | 183 DOMHighResTimeStamp PerformanceResourceTiming::connectStart() const { |
181 if (!AllowTimingDetails()) | 184 if (!AllowTimingDetails()) |
182 return 0.0; | 185 return 0.0; |
183 ResourceLoadTiming* timing = GetResourceLoadTiming(); | 186 ResourceLoadTiming* timing = GetResourceLoadTiming(); |
184 // connectStart will be zero when a network request is not made. | 187 // connectStart will be zero when a network request is not made. |
185 if (!timing || timing->ConnectStart() == 0.0 || DidReuseConnection()) | 188 if (!timing || timing->ConnectStart() == 0.0 || DidReuseConnection()) |
186 return domainLookupEnd(); | 189 return domainLookupEnd(); |
187 | 190 |
188 // connectStart includes any DNS time, so we may need to trim that off. | 191 // connectStart includes any DNS time, so we may need to trim that off. |
189 double connect_start = timing->ConnectStart(); | 192 double connect_start = timing->ConnectStart(); |
190 if (timing->DnsEnd() > 0.0) | 193 if (timing->DnsEnd() > 0.0) |
191 connect_start = timing->DnsEnd(); | 194 connect_start = timing->DnsEnd(); |
192 | 195 |
193 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp(time_origin_, | 196 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( |
194 connect_start); | 197 time_origin_, connect_start, allow_negative_value_); |
195 } | 198 } |
196 | 199 |
197 DOMHighResTimeStamp PerformanceResourceTiming::connectEnd() const { | 200 DOMHighResTimeStamp PerformanceResourceTiming::connectEnd() const { |
198 if (!AllowTimingDetails()) | 201 if (!AllowTimingDetails()) |
199 return 0.0; | 202 return 0.0; |
200 ResourceLoadTiming* timing = GetResourceLoadTiming(); | 203 ResourceLoadTiming* timing = GetResourceLoadTiming(); |
201 // connectStart will be zero when a network request is not made. | 204 // connectStart will be zero when a network request is not made. |
202 if (!timing || timing->ConnectEnd() == 0.0 || DidReuseConnection()) | 205 if (!timing || timing->ConnectEnd() == 0.0 || DidReuseConnection()) |
203 return connectStart(); | 206 return connectStart(); |
204 | 207 |
205 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( | 208 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( |
206 time_origin_, timing->ConnectEnd()); | 209 time_origin_, timing->ConnectEnd(), allow_negative_value_); |
207 } | 210 } |
208 | 211 |
209 DOMHighResTimeStamp PerformanceResourceTiming::secureConnectionStart() const { | 212 DOMHighResTimeStamp PerformanceResourceTiming::secureConnectionStart() const { |
210 if (!AllowTimingDetails()) | 213 if (!AllowTimingDetails()) |
211 return 0.0; | 214 return 0.0; |
212 ResourceLoadTiming* timing = GetResourceLoadTiming(); | 215 ResourceLoadTiming* timing = GetResourceLoadTiming(); |
213 if (!timing || | 216 if (!timing || |
214 timing->SslStart() == 0.0) // Secure connection not negotiated. | 217 timing->SslStart() == 0.0) // Secure connection not negotiated. |
215 return 0.0; | 218 return 0.0; |
216 | 219 |
217 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( | 220 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( |
218 time_origin_, timing->SslStart()); | 221 time_origin_, timing->SslStart(), allow_negative_value_); |
219 } | 222 } |
220 | 223 |
221 DOMHighResTimeStamp PerformanceResourceTiming::requestStart() const { | 224 DOMHighResTimeStamp PerformanceResourceTiming::requestStart() const { |
222 if (!AllowTimingDetails()) | 225 if (!AllowTimingDetails()) |
223 return 0.0; | 226 return 0.0; |
224 ResourceLoadTiming* timing = GetResourceLoadTiming(); | 227 ResourceLoadTiming* timing = GetResourceLoadTiming(); |
225 if (!timing) | 228 if (!timing) |
226 return connectEnd(); | 229 return connectEnd(); |
227 | 230 |
228 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( | 231 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( |
229 time_origin_, timing->SendStart()); | 232 time_origin_, timing->SendStart(), allow_negative_value_); |
230 } | 233 } |
231 | 234 |
232 DOMHighResTimeStamp PerformanceResourceTiming::responseStart() const { | 235 DOMHighResTimeStamp PerformanceResourceTiming::responseStart() const { |
233 if (!AllowTimingDetails()) | 236 if (!AllowTimingDetails()) |
234 return 0.0; | 237 return 0.0; |
235 ResourceLoadTiming* timing = GetResourceLoadTiming(); | 238 ResourceLoadTiming* timing = GetResourceLoadTiming(); |
236 if (!timing) | 239 if (!timing) |
237 return requestStart(); | 240 return requestStart(); |
238 | 241 |
239 // FIXME: This number isn't exactly correct. See the notes in | 242 // FIXME: This number isn't exactly correct. See the notes in |
240 // PerformanceTiming::responseStart(). | 243 // PerformanceTiming::responseStart(). |
241 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( | 244 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( |
242 time_origin_, timing->ReceiveHeadersEnd()); | 245 time_origin_, timing->ReceiveHeadersEnd(), allow_negative_value_); |
243 } | 246 } |
244 | 247 |
245 DOMHighResTimeStamp PerformanceResourceTiming::responseEnd() const { | 248 DOMHighResTimeStamp PerformanceResourceTiming::responseEnd() const { |
246 if (!finish_time_) | 249 if (!finish_time_) |
247 return responseStart(); | 250 return responseStart(); |
248 | 251 |
249 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp(time_origin_, | 252 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( |
250 finish_time_); | 253 time_origin_, finish_time_, allow_negative_value_); |
251 } | 254 } |
252 | 255 |
253 unsigned long long PerformanceResourceTiming::transferSize() const { | 256 unsigned long long PerformanceResourceTiming::transferSize() const { |
254 if (!AllowTimingDetails()) | 257 if (!AllowTimingDetails()) |
255 return 0; | 258 return 0; |
256 | 259 |
257 return GetTransferSize(); | 260 return GetTransferSize(); |
258 } | 261 } |
259 | 262 |
260 unsigned long long PerformanceResourceTiming::encodedBodySize() const { | 263 unsigned long long PerformanceResourceTiming::encodedBodySize() const { |
(...skipping 24 matching lines...) Expand all Loading... |
285 builder.AddNumber("secureConnectionStart", secureConnectionStart()); | 288 builder.AddNumber("secureConnectionStart", secureConnectionStart()); |
286 builder.AddNumber("requestStart", requestStart()); | 289 builder.AddNumber("requestStart", requestStart()); |
287 builder.AddNumber("responseStart", responseStart()); | 290 builder.AddNumber("responseStart", responseStart()); |
288 builder.AddNumber("responseEnd", responseEnd()); | 291 builder.AddNumber("responseEnd", responseEnd()); |
289 builder.AddNumber("transferSize", transferSize()); | 292 builder.AddNumber("transferSize", transferSize()); |
290 builder.AddNumber("encodedBodySize", encodedBodySize()); | 293 builder.AddNumber("encodedBodySize", encodedBodySize()); |
291 builder.AddNumber("decodedBodySize", decodedBodySize()); | 294 builder.AddNumber("decodedBodySize", decodedBodySize()); |
292 } | 295 } |
293 | 296 |
294 } // namespace blink | 297 } // namespace blink |
OLD | NEW |