OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2010 Google Inc. All rights reserved. | 2 * Copyright (C) 2010 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 18 matching lines...) Expand all Loading... |
29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
30 */ | 30 */ |
31 | 31 |
32 #include "config.h" | 32 #include "config.h" |
33 #include "core/timing/Performance.h" | 33 #include "core/timing/Performance.h" |
34 | 34 |
35 #include "core/dom/Document.h" | 35 #include "core/dom/Document.h" |
36 #include "core/events/Event.h" | 36 #include "core/events/Event.h" |
37 #include "core/frame/LocalFrame.h" | 37 #include "core/frame/LocalFrame.h" |
38 #include "core/loader/DocumentLoader.h" | 38 #include "core/loader/DocumentLoader.h" |
| 39 #include "core/timing/MemoryInfo.h" |
| 40 #include "core/timing/PerformanceEntry.h" |
| 41 #include "core/timing/PerformanceNavigation.h" |
| 42 #include "core/timing/PerformanceResourceTiming.h" |
| 43 #include "core/timing/PerformanceTiming.h" |
| 44 #include "core/timing/PerformanceUserTiming.h" |
39 #include "core/timing/ResourceTimingInfo.h" | 45 #include "core/timing/ResourceTimingInfo.h" |
40 #include "core/timing/PerformanceResourceTiming.h" | |
41 #include "core/timing/PerformanceUserTiming.h" | |
42 #include "platform/weborigin/SecurityOrigin.h" | 46 #include "platform/weborigin/SecurityOrigin.h" |
43 #include "wtf/CurrentTime.h" | 47 #include "wtf/CurrentTime.h" |
44 | 48 |
45 namespace blink { | 49 namespace blink { |
46 | 50 |
47 static const size_t defaultResourceTimingBufferSize = 150; | 51 static const size_t defaultResourceTimingBufferSize = 150; |
48 | 52 |
49 Performance::Performance(LocalFrame* frame) | 53 Performance::Performance(LocalFrame* frame) |
50 : DOMWindowProperty(frame) | 54 : DOMWindowProperty(frame) |
51 , m_resourceTimingBufferSize(defaultResourceTimingBufferSize) | 55 , m_resourceTimingBufferSize(defaultResourceTimingBufferSize) |
(...skipping 11 matching lines...) Expand all Loading... |
63 return EventTargetNames::Performance; | 67 return EventTargetNames::Performance; |
64 } | 68 } |
65 | 69 |
66 ExecutionContext* Performance::executionContext() const | 70 ExecutionContext* Performance::executionContext() const |
67 { | 71 { |
68 if (!frame()) | 72 if (!frame()) |
69 return nullptr; | 73 return nullptr; |
70 return frame()->document(); | 74 return frame()->document(); |
71 } | 75 } |
72 | 76 |
73 PassRefPtrWillBeRawPtr<MemoryInfo> Performance::memory() const | 77 MemoryInfo* Performance::memory() |
74 { | 78 { |
75 return MemoryInfo::create(); | 79 if (!m_memoryInfo) |
| 80 m_memoryInfo = MemoryInfo::create(); |
| 81 return m_memoryInfo.get(); |
76 } | 82 } |
77 | 83 |
78 PerformanceNavigation* Performance::navigation() const | 84 PerformanceNavigation* Performance::navigation() const |
79 { | 85 { |
80 if (!m_navigation) | 86 if (!m_navigation) |
81 m_navigation = PerformanceNavigation::create(m_frame); | 87 m_navigation = PerformanceNavigation::create(m_frame); |
82 | 88 |
83 return m_navigation.get(); | 89 return m_navigation.get(); |
84 } | 90 } |
85 | 91 |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
202 void Performance::addResourceTiming(const ResourceTimingInfo& info, Document* in
itiatorDocument) | 208 void Performance::addResourceTiming(const ResourceTimingInfo& info, Document* in
itiatorDocument) |
203 { | 209 { |
204 if (isResourceTimingBufferFull()) | 210 if (isResourceTimingBufferFull()) |
205 return; | 211 return; |
206 | 212 |
207 const ResourceResponse& finalResponse = info.finalResponse(); | 213 const ResourceResponse& finalResponse = info.finalResponse(); |
208 bool allowTimingDetails = passesTimingAllowCheck(finalResponse, initiatorDoc
ument, info.originalTimingAllowOrigin()); | 214 bool allowTimingDetails = passesTimingAllowCheck(finalResponse, initiatorDoc
ument, info.originalTimingAllowOrigin()); |
209 double startTime = info.initialTime(); | 215 double startTime = info.initialTime(); |
210 | 216 |
211 if (info.redirectChain().isEmpty()) { | 217 if (info.redirectChain().isEmpty()) { |
212 RefPtrWillBeRawPtr<PerformanceEntry> entry = PerformanceResourceTiming::
create(info, initiatorDocument, startTime, allowTimingDetails); | 218 PerformanceEntry* entry = PerformanceResourceTiming::create(info, initia
torDocument, startTime, allowTimingDetails); |
213 addResourceTimingBuffer(entry); | 219 addResourceTimingBuffer(entry); |
214 return; | 220 return; |
215 } | 221 } |
216 | 222 |
217 const Vector<ResourceResponse>& redirectChain = info.redirectChain(); | 223 const Vector<ResourceResponse>& redirectChain = info.redirectChain(); |
218 bool allowRedirectDetails = allowsTimingRedirect(redirectChain, finalRespons
e, initiatorDocument); | 224 bool allowRedirectDetails = allowsTimingRedirect(redirectChain, finalRespons
e, initiatorDocument); |
219 | 225 |
220 if (!allowRedirectDetails) { | 226 if (!allowRedirectDetails) { |
221 ResourceLoadTiming* finalTiming = finalResponse.resourceLoadTiming(); | 227 ResourceLoadTiming* finalTiming = finalResponse.resourceLoadTiming(); |
222 ASSERT(finalTiming); | 228 ASSERT(finalTiming); |
223 if (finalTiming) | 229 if (finalTiming) |
224 startTime = finalTiming->requestTime(); | 230 startTime = finalTiming->requestTime(); |
225 } | 231 } |
226 | 232 |
227 ResourceLoadTiming* lastRedirectTiming = redirectChain.last().resourceLoadTi
ming(); | 233 ResourceLoadTiming* lastRedirectTiming = redirectChain.last().resourceLoadTi
ming(); |
228 ASSERT(lastRedirectTiming); | 234 ASSERT(lastRedirectTiming); |
229 double lastRedirectEndTime = lastRedirectTiming->receiveHeadersEnd(); | 235 double lastRedirectEndTime = lastRedirectTiming->receiveHeadersEnd(); |
230 | 236 |
231 RefPtrWillBeRawPtr<PerformanceEntry> entry = PerformanceResourceTiming::crea
te(info, initiatorDocument, startTime, lastRedirectEndTime, allowTimingDetails,
allowRedirectDetails); | 237 PerformanceEntry* entry = PerformanceResourceTiming::create(info, initiatorD
ocument, startTime, lastRedirectEndTime, allowTimingDetails, allowRedirectDetail
s); |
232 addResourceTimingBuffer(entry); | 238 addResourceTimingBuffer(entry); |
233 } | 239 } |
234 | 240 |
235 void Performance::addResourceTimingBuffer(PassRefPtrWillBeRawPtr<PerformanceEntr
y> entry) | 241 void Performance::addResourceTimingBuffer(PerformanceEntry* entry) |
236 { | 242 { |
237 m_resourceTimingBuffer.append(entry); | 243 m_resourceTimingBuffer.append(entry); |
238 | 244 |
239 if (isResourceTimingBufferFull()) | 245 if (isResourceTimingBufferFull()) |
240 dispatchEvent(Event::create(EventTypeNames::webkitresourcetimingbufferfu
ll)); | 246 dispatchEvent(Event::create(EventTypeNames::webkitresourcetimingbufferfu
ll)); |
241 } | 247 } |
242 | 248 |
243 bool Performance::isResourceTimingBufferFull() | 249 bool Performance::isResourceTimingBufferFull() |
244 { | 250 { |
245 return m_resourceTimingBuffer.size() >= m_resourceTimingBufferSize; | 251 return m_resourceTimingBuffer.size() >= m_resourceTimingBufferSize; |
(...skipping 30 matching lines...) Expand all Loading... |
276 double Performance::now() const | 282 double Performance::now() const |
277 { | 283 { |
278 return 1000.0 * (monotonicallyIncreasingTime() - m_referenceTime); | 284 return 1000.0 * (monotonicallyIncreasingTime() - m_referenceTime); |
279 } | 285 } |
280 | 286 |
281 DEFINE_TRACE(Performance) | 287 DEFINE_TRACE(Performance) |
282 { | 288 { |
283 visitor->trace(m_navigation); | 289 visitor->trace(m_navigation); |
284 visitor->trace(m_timing); | 290 visitor->trace(m_timing); |
285 visitor->trace(m_resourceTimingBuffer); | 291 visitor->trace(m_resourceTimingBuffer); |
| 292 visitor->trace(m_memoryInfo); |
286 visitor->trace(m_userTiming); | 293 visitor->trace(m_userTiming); |
287 EventTargetWithInlineData::trace(visitor); | 294 EventTargetWithInlineData::trace(visitor); |
288 DOMWindowProperty::trace(visitor); | 295 DOMWindowProperty::trace(visitor); |
289 } | 296 } |
290 | 297 |
291 } // namespace blink | 298 } // namespace blink |
OLD | NEW |