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

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

Issue 2837943006: [WIP] Support PerformanceResourceTiming for Service Worker Navigation Preload (Closed)
Patch Set: clean up Created 3 years, 7 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
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 28 matching lines...) Expand all
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698