| 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 |