|
17 | 17 |
|
18 | 18 | package org.openqa.selenium.devtools.network.model;
|
19 | 19 |
|
| 20 | +import static java.util.Objects.requireNonNull; |
| 21 | + |
| 22 | +import org.openqa.selenium.json.JsonInput; |
| 23 | + |
20 | 24 | /**
|
21 | 25 | * Timing information for the request
|
22 | 26 | */
|
@@ -54,6 +58,32 @@ public class ResourceTiming {
|
54 | 58 |
|
55 | 59 | private Double receiveHeadersEnd;
|
56 | 60 |
|
| 61 | + public ResourceTiming(Double requestTime, Double proxyStart, Double proxyEnd, |
| 62 | + Double dnsStart, Double dnsEnd, Double connectStart, |
| 63 | + Double connectEnd, Double sslStart, Double sslEnd, |
| 64 | + Double workerStart, Double workerReady, Double sendStart, |
| 65 | + Double sendEnd, Double pushStart, Double pushEnd, |
| 66 | + Double receiveHeadersEnd) { |
| 67 | + this.requestTime = requireNonNull(requestTime, "'requestTime' is required for ResourceTiming"); |
| 68 | + this.proxyStart = requireNonNull(proxyStart, "'proxyStart' is required for ResourceTiming"); |
| 69 | + this.proxyEnd = requireNonNull(proxyEnd, "'proxyEnd' is required for ResourceTiming"); |
| 70 | + this.dnsStart = requireNonNull(dnsStart, "'dnsStart' is required for ResourceTiming"); |
| 71 | + this.dnsEnd = requireNonNull(dnsEnd, "'dnsEnd' is required for ResourceTiming"); |
| 72 | + this.connectStart = |
| 73 | + requireNonNull(connectStart, "'connectStart' is required for ResourceTiming"); |
| 74 | + this.connectEnd = requireNonNull(connectEnd, "'connectEnd' is required for ResourceTiming"); |
| 75 | + this.sslStart = requireNonNull(sslStart, "'sslStart' is required for ResourceTiming"); |
| 76 | + this.sslEnd = requireNonNull(sslEnd, "'sslEnd' is required for ResourceTiming"); |
| 77 | + this.workerStart = workerStart; |
| 78 | + this.workerReady = workerReady; |
| 79 | + this.sendStart = requireNonNull(sendStart, "'sendStart' is required for ResourceTiming"); |
| 80 | + this.sendEnd = requireNonNull(sendEnd, "'sendEnd' is required for ResourceTiming"); |
| 81 | + this.pushStart = pushStart; |
| 82 | + this.pushEnd = pushEnd; |
| 83 | + this.receiveHeadersEnd = |
| 84 | + requireNonNull(receiveHeadersEnd, "'receiveHeadersEnd' is required for ResourceTiming"); |
| 85 | + } |
| 86 | + |
57 | 87 | /**
|
58 | 88 | * Timing's requestTime is a baseline in seconds, while the other numbers are ticks in
|
59 | 89 | * milliseconds relatively to this requestTime.
|
@@ -219,4 +249,101 @@ public Double getReceiveHeadersEnd() {
|
219 | 249 | public void setReceiveHeadersEnd(Double receiveHeadersEnd) {
|
220 | 250 | this.receiveHeadersEnd = receiveHeadersEnd;
|
221 | 251 | }
|
| 252 | + |
| 253 | + private static ResourceTiming fromJson(JsonInput input) { |
| 254 | + |
| 255 | + input.beginObject(); |
| 256 | + |
| 257 | + Double requestTime = null; |
| 258 | + |
| 259 | + Double proxyStart = null; |
| 260 | + |
| 261 | + Double proxyEnd = null; |
| 262 | + |
| 263 | + Double dnsStart = null; |
| 264 | + |
| 265 | + Double dnsEnd = null; |
| 266 | + |
| 267 | + Double connectStart = null; |
| 268 | + |
| 269 | + Double connectEnd = null; |
| 270 | + |
| 271 | + Double sslStart = null; |
| 272 | + |
| 273 | + Double sslEnd = null; |
| 274 | + |
| 275 | + Double workerStart = null; |
| 276 | + |
| 277 | + Double workerReady = null; |
| 278 | + |
| 279 | + Double sendStart = null; |
| 280 | + |
| 281 | + Double sendEnd = null; |
| 282 | + |
| 283 | + Double pushStart = null; |
| 284 | + |
| 285 | + Double pushEnd = null; |
| 286 | + |
| 287 | + Double receiveHeadersEnd = null; |
| 288 | + |
| 289 | + while (input.hasNext()) { |
| 290 | + switch (input.nextName()) { |
| 291 | + case "requestTime": |
| 292 | + requestTime = input.read(Double.class); |
| 293 | + break; |
| 294 | + case "proxyStart": |
| 295 | + proxyStart = input.read(Double.class); |
| 296 | + break; |
| 297 | + case "proxyEnd": |
| 298 | + proxyEnd = input.read(Double.class); |
| 299 | + break; |
| 300 | + case "dnsStart": |
| 301 | + dnsStart = input.read(Double.class); |
| 302 | + break; |
| 303 | + case "dnsEnd": |
| 304 | + dnsEnd = input.read(Double.class); |
| 305 | + break; |
| 306 | + case "connectStart": |
| 307 | + connectStart = input.read(Double.class); |
| 308 | + break; |
| 309 | + case "connectEnd": |
| 310 | + connectEnd = input.read(Double.class); |
| 311 | + break; |
| 312 | + case "sslStart": |
| 313 | + sslStart = input.read(Double.class); |
| 314 | + break; |
| 315 | + case "sslEnd": |
| 316 | + sslEnd = input.read(Double.class); |
| 317 | + break; |
| 318 | + case "workerStart": |
| 319 | + workerStart = input.read(Double.class); |
| 320 | + break; |
| 321 | + case "workerReady": |
| 322 | + workerReady = input.read(Double.class); |
| 323 | + break; |
| 324 | + case "sendStart": |
| 325 | + sendStart = input.read(Double.class); |
| 326 | + break; |
| 327 | + case "sendEnd": |
| 328 | + sendEnd = input.read(Double.class); |
| 329 | + break; |
| 330 | + case "pushStart": |
| 331 | + pushStart = input.read(Double.class); |
| 332 | + break; |
| 333 | + case "pushEnd": |
| 334 | + pushEnd = input.read(Double.class); |
| 335 | + break; |
| 336 | + case "receiveHeadersEnd": |
| 337 | + receiveHeadersEnd = input.read(Double.class); |
| 338 | + break; |
| 339 | + default: |
| 340 | + input.skipValue(); |
| 341 | + break; |
| 342 | + } |
| 343 | + } |
| 344 | + |
| 345 | + return new ResourceTiming(requestTime, proxyStart, proxyEnd, dnsStart, dnsEnd, connectStart, |
| 346 | + connectEnd, sslStart, sslEnd, workerStart, workerReady, sendStart, |
| 347 | + sendEnd, pushStart, pushEnd, receiveHeadersEnd); |
| 348 | + } |
222 | 349 | }
|
0 commit comments