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

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

Issue 2395653002: Remove buffering from PerformanceLongTaskTiming as it's not in the spec. (Closed)
Patch Set: update layout test expectations Created 4 years, 2 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) 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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 #include "platform/weborigin/SecurityOrigin.h" 44 #include "platform/weborigin/SecurityOrigin.h"
45 #include "wtf/CurrentTime.h" 45 #include "wtf/CurrentTime.h"
46 #include <algorithm> 46 #include <algorithm>
47 47
48 namespace blink { 48 namespace blink {
49 49
50 using PerformanceObserverVector = HeapVector<Member<PerformanceObserver>>; 50 using PerformanceObserverVector = HeapVector<Member<PerformanceObserver>>;
51 51
52 static const size_t defaultResourceTimingBufferSize = 150; 52 static const size_t defaultResourceTimingBufferSize = 150;
53 static const size_t defaultFrameTimingBufferSize = 150; 53 static const size_t defaultFrameTimingBufferSize = 150;
54 static const size_t defaultLongTaskTimingBufferSize = 150;
55 54
56 PerformanceBase::PerformanceBase(double timeOrigin) 55 PerformanceBase::PerformanceBase(double timeOrigin)
57 : m_frameTimingBufferSize(defaultFrameTimingBufferSize), 56 : m_frameTimingBufferSize(defaultFrameTimingBufferSize),
58 m_resourceTimingBufferSize(defaultResourceTimingBufferSize), 57 m_resourceTimingBufferSize(defaultResourceTimingBufferSize),
59 m_longTaskTimingBufferSize(defaultLongTaskTimingBufferSize),
60 m_userTiming(nullptr), 58 m_userTiming(nullptr),
61 m_timeOrigin(timeOrigin), 59 m_timeOrigin(timeOrigin),
62 m_observerFilterOptions(PerformanceEntry::Invalid), 60 m_observerFilterOptions(PerformanceEntry::Invalid),
63 m_deliverObservationsTimer( 61 m_deliverObservationsTimer(
64 this, 62 this,
65 &PerformanceBase::deliverObservationsTimerFired) {} 63 &PerformanceBase::deliverObservationsTimerFired) {}
66 64
67 PerformanceBase::~PerformanceBase() {} 65 PerformanceBase::~PerformanceBase() {}
68 66
69 const AtomicString& PerformanceBase::interfaceName() const { 67 const AtomicString& PerformanceBase::interfaceName() const {
70 return EventTargetNames::Performance; 68 return EventTargetNames::Performance;
71 } 69 }
72 70
73 PerformanceTiming* PerformanceBase::timing() const { 71 PerformanceTiming* PerformanceBase::timing() const {
74 return nullptr; 72 return nullptr;
75 } 73 }
76 74
77 PerformanceEntryVector PerformanceBase::getEntries() const { 75 PerformanceEntryVector PerformanceBase::getEntries() const {
78 PerformanceEntryVector entries; 76 PerformanceEntryVector entries;
79 77
80 entries.appendVector(m_resourceTimingBuffer); 78 entries.appendVector(m_resourceTimingBuffer);
81 entries.appendVector(m_frameTimingBuffer); 79 entries.appendVector(m_frameTimingBuffer);
82 entries.appendVector(m_longTaskTimingBuffer);
83 80
84 if (m_userTiming) { 81 if (m_userTiming) {
85 entries.appendVector(m_userTiming->getMarks()); 82 entries.appendVector(m_userTiming->getMarks());
86 entries.appendVector(m_userTiming->getMeasures()); 83 entries.appendVector(m_userTiming->getMeasures());
87 } 84 }
88 85
89 std::sort(entries.begin(), entries.end(), 86 std::sort(entries.begin(), entries.end(),
90 PerformanceEntry::startTimeCompareLessThan); 87 PerformanceEntry::startTimeCompareLessThan);
91 return entries; 88 return entries;
92 } 89 }
93 90
94 PerformanceEntryVector PerformanceBase::getEntriesByType( 91 PerformanceEntryVector PerformanceBase::getEntriesByType(
95 const String& entryType) { 92 const String& entryType) {
96 PerformanceEntryVector entries; 93 PerformanceEntryVector entries;
97 PerformanceEntry::EntryType type = 94 PerformanceEntry::EntryType type =
98 PerformanceEntry::toEntryTypeEnum(entryType); 95 PerformanceEntry::toEntryTypeEnum(entryType);
99 96
100 switch (type) { 97 switch (type) {
101 case PerformanceEntry::Invalid: 98 case PerformanceEntry::Invalid:
102 return entries; 99 return entries;
100 case PerformanceEntry::LongTask:
101 // Unsupported for LongTask. Per the spec, Long task entries can only be
102 // accessed via Performance Observer. No separate buffer is maintained.
103 return entries;
103 case PerformanceEntry::Resource: 104 case PerformanceEntry::Resource:
104 for (const auto& resource : m_resourceTimingBuffer) 105 for (const auto& resource : m_resourceTimingBuffer)
105 entries.append(resource); 106 entries.append(resource);
106 break; 107 break;
107 case PerformanceEntry::Composite: 108 case PerformanceEntry::Composite:
108 case PerformanceEntry::Render: 109 case PerformanceEntry::Render:
109 for (const auto& frame : m_frameTimingBuffer) { 110 for (const auto& frame : m_frameTimingBuffer) {
110 if (type == frame->entryTypeEnum()) { 111 if (type == frame->entryTypeEnum()) {
111 entries.append(frame); 112 entries.append(frame);
112 } 113 }
113 } 114 }
114 break; 115 break;
115 case PerformanceEntry::Mark: 116 case PerformanceEntry::Mark:
116 if (m_userTiming) 117 if (m_userTiming)
117 entries.appendVector(m_userTiming->getMarks()); 118 entries.appendVector(m_userTiming->getMarks());
118 break; 119 break;
119 case PerformanceEntry::Measure: 120 case PerformanceEntry::Measure:
120 if (m_userTiming) 121 if (m_userTiming)
121 entries.appendVector(m_userTiming->getMeasures()); 122 entries.appendVector(m_userTiming->getMeasures());
122 break; 123 break;
123 case PerformanceEntry::LongTask:
124 for (const auto& longTask : m_longTaskTimingBuffer)
125 entries.append(longTask);
126 break;
127 } 124 }
128 125
129 std::sort(entries.begin(), entries.end(), 126 std::sort(entries.begin(), entries.end(),
130 PerformanceEntry::startTimeCompareLessThan); 127 PerformanceEntry::startTimeCompareLessThan);
131 return entries; 128 return entries;
132 } 129 }
133 130
134 PerformanceEntryVector PerformanceBase::getEntriesByName( 131 PerformanceEntryVector PerformanceBase::getEntriesByName(
135 const String& name, 132 const String& name,
136 const String& entryType) { 133 const String& entryType) {
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 void PerformanceBase::clearFrameTimings() { 182 void PerformanceBase::clearFrameTimings() {
186 m_frameTimingBuffer.clear(); 183 m_frameTimingBuffer.clear();
187 } 184 }
188 185
189 void PerformanceBase::setFrameTimingBufferSize(unsigned size) { 186 void PerformanceBase::setFrameTimingBufferSize(unsigned size) {
190 m_frameTimingBufferSize = size; 187 m_frameTimingBufferSize = size;
191 if (isFrameTimingBufferFull()) 188 if (isFrameTimingBufferFull())
192 dispatchEvent(Event::create(EventTypeNames::frametimingbufferfull)); 189 dispatchEvent(Event::create(EventTypeNames::frametimingbufferfull));
193 } 190 }
194 191
195 void PerformanceBase::clearLongTaskTimings() {
196 m_longTaskTimingBuffer.clear();
197 }
198
199 void PerformanceBase::setLongTaskTimingBufferSize(unsigned size) {
200 m_longTaskTimingBufferSize = size;
201 if (isLongTaskTimingBufferFull())
202 dispatchEvent(Event::create(EventTypeNames::longtasktimingbufferfull));
203 }
204
205 static bool passesTimingAllowCheck( 192 static bool passesTimingAllowCheck(
206 const ResourceResponse& response, 193 const ResourceResponse& response,
207 const SecurityOrigin& initiatorSecurityOrigin, 194 const SecurityOrigin& initiatorSecurityOrigin,
208 const AtomicString& originalTimingAllowOrigin, 195 const AtomicString& originalTimingAllowOrigin,
209 ExecutionContext* context) { 196 ExecutionContext* context) {
210 RefPtr<SecurityOrigin> resourceOrigin = 197 RefPtr<SecurityOrigin> resourceOrigin =
211 SecurityOrigin::create(response.url()); 198 SecurityOrigin::create(response.url());
212 if (resourceOrigin->isSameSchemeHostPort(&initiatorSecurityOrigin)) 199 if (resourceOrigin->isSameSchemeHostPort(&initiatorSecurityOrigin))
213 return true; 200 return true;
214 201
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
356 } 343 }
357 344
358 bool PerformanceBase::isFrameTimingBufferFull() { 345 bool PerformanceBase::isFrameTimingBufferFull() {
359 return m_frameTimingBuffer.size() >= m_frameTimingBufferSize; 346 return m_frameTimingBuffer.size() >= m_frameTimingBufferSize;
360 } 347 }
361 348
362 void PerformanceBase::addLongTaskTiming(double startTime, 349 void PerformanceBase::addLongTaskTiming(double startTime,
363 double endTime, 350 double endTime,
364 const String& name, 351 const String& name,
365 DOMWindow* culpritWindow) { 352 DOMWindow* culpritWindow) {
366 if (isLongTaskTimingBufferFull() || 353 if (!hasObserverFor(PerformanceEntry::LongTask))
367 !hasObserverFor(PerformanceEntry::LongTask))
368 return; 354 return;
369 PerformanceEntry* entry = PerformanceLongTaskTiming::create( 355 PerformanceEntry* entry = PerformanceLongTaskTiming::create(
370 monotonicTimeToDOMHighResTimeStampInMillis(startTime), 356 monotonicTimeToDOMHighResTimeStampInMillis(startTime),
371 monotonicTimeToDOMHighResTimeStampInMillis(endTime), name, culpritWindow); 357 monotonicTimeToDOMHighResTimeStampInMillis(endTime), name, culpritWindow);
372 notifyObserversOfEntry(*entry); 358 notifyObserversOfEntry(*entry);
373 addLongTaskTimingBuffer(*entry);
374 }
375
376 void PerformanceBase::addLongTaskTimingBuffer(PerformanceEntry& entry) {
377 m_longTaskTimingBuffer.append(&entry);
378 if (isLongTaskTimingBufferFull())
379 dispatchEvent(Event::create(EventTypeNames::longtasktimingbufferfull));
380 }
381
382 bool PerformanceBase::isLongTaskTimingBufferFull() {
383 return m_longTaskTimingBuffer.size() >= m_longTaskTimingBufferSize;
384 } 359 }
385 360
386 void PerformanceBase::mark(const String& markName, 361 void PerformanceBase::mark(const String& markName,
387 ExceptionState& exceptionState) { 362 ExceptionState& exceptionState) {
388 if (!m_userTiming) 363 if (!m_userTiming)
389 m_userTiming = UserTiming::create(*this); 364 m_userTiming = UserTiming::create(*this);
390 if (PerformanceEntry* entry = m_userTiming->mark(markName, exceptionState)) 365 if (PerformanceEntry* entry = m_userTiming->mark(markName, exceptionState))
391 notifyObserversOfEntry(*entry); 366 notifyObserversOfEntry(*entry);
392 } 367 }
393 368
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
511 return monotonicTimeToDOMHighResTimeStamp(monotonicTime) * 1000; 486 return monotonicTimeToDOMHighResTimeStamp(monotonicTime) * 1000;
512 } 487 }
513 488
514 DOMHighResTimeStamp PerformanceBase::now() const { 489 DOMHighResTimeStamp PerformanceBase::now() const {
515 return monotonicTimeToDOMHighResTimeStamp(monotonicallyIncreasingTime()); 490 return monotonicTimeToDOMHighResTimeStamp(monotonicallyIncreasingTime());
516 } 491 }
517 492
518 DEFINE_TRACE(PerformanceBase) { 493 DEFINE_TRACE(PerformanceBase) {
519 visitor->trace(m_frameTimingBuffer); 494 visitor->trace(m_frameTimingBuffer);
520 visitor->trace(m_resourceTimingBuffer); 495 visitor->trace(m_resourceTimingBuffer);
521 visitor->trace(m_longTaskTimingBuffer);
522 visitor->trace(m_userTiming); 496 visitor->trace(m_userTiming);
523 visitor->trace(m_observers); 497 visitor->trace(m_observers);
524 visitor->trace(m_activeObservers); 498 visitor->trace(m_activeObservers);
525 visitor->trace(m_suspendedObservers); 499 visitor->trace(m_suspendedObservers);
526 EventTargetWithInlineData::trace(visitor); 500 EventTargetWithInlineData::trace(visitor);
527 } 501 }
528 502
529 } // namespace blink 503 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/timing/PerformanceBase.h ('k') | third_party/WebKit/Source/core/timing/PerformanceBaseTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698