Changeset 227926 in webkit


Ignore:
Timestamp:
Jan 31, 2018 1:07:36 PM (6 years ago)
Author:
rniwa@webkit.org
Message:

Release assertion in Performance::resourceTimingBufferFullTimerFired when the resource timing buffer is shrunk
https://bugs.webkit.org/show_bug.cgi?id=182319
<rdar://problem/36904312>

Reviewed by Chris Dumez.

Source/WebCore:

The crash was caused by a wrong release assertion. Handle author scripts shrinking the resource timing buffer
while resourcetimingbufferfull event is being dispatched.

Also fixed a bug that a superflous resourcetimingbufferfull event will be fired when new resource timing entries
are queued while resourcetimingbufferfull event is being dispatched.

Test: http/tests/performance/performance-resource-timing-resourcetimingbufferfull-queue-resource-entry.html

http/tests/performance/performance-resource-timing-resourcetimingbufferfull-shrinking-buffer-crash.html

  • page/Performance.cpp:

(WebCore::Performance::resourceTimingBufferFullTimerFired):

LayoutTests:

Added regression tests for shrinking the resoruce timing buffer and queuing a new resource timing entry while
resourcetimingbufferfull event is being dispatched.

  • http/tests/performance/performance-resource-timing-resourcetimingbufferfull-queue-resource-entry-expected.txt: Added.
  • http/tests/performance/performance-resource-timing-resourcetimingbufferfull-queue-resource-entry.html: Added.
  • http/tests/performance/performance-resource-timing-resourcetimingbufferfull-shrinking-buffer-crash-expected.txt: Added.
  • http/tests/performance/performance-resource-timing-resourcetimingbufferfull-shrinking-buffer-crash.html: Added.
  • http/tests/performance/performance-resource-timing-resourcetimingbufferfull-shrinking-buffer-crash-expected.txt: Added.
  • http/tests/performance/performance-resource-timing-resourcetimingbufferfull-shrinking-buffer-crash.html: Added.
Location:
trunk
Files:
4 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r227920 r227926  
     12018-01-31  Ryosuke Niwa  <rniwa@webkit.org>
     2
     3        Release assertion in Performance::resourceTimingBufferFullTimerFired when the resource timing buffer is shrunk
     4        https://bugs.webkit.org/show_bug.cgi?id=182319
     5        <rdar://problem/36904312>
     6
     7        Reviewed by Chris Dumez.
     8
     9        Added regression tests for shrinking the resoruce timing buffer and queuing a new resource timing entry while
     10        resourcetimingbufferfull event is being dispatched.
     11
     12        * http/tests/performance/performance-resource-timing-resourcetimingbufferfull-queue-resource-entry-expected.txt: Added.
     13        * http/tests/performance/performance-resource-timing-resourcetimingbufferfull-queue-resource-entry.html: Added.
     14        * http/tests/performance/performance-resource-timing-resourcetimingbufferfull-shrinking-buffer-crash-expected.txt: Added.
     15        * http/tests/performance/performance-resource-timing-resourcetimingbufferfull-shrinking-buffer-crash.html: Added.
     16
     17        * http/tests/performance/performance-resource-timing-resourcetimingbufferfull-shrinking-buffer-crash-expected.txt: Added.
     18        * http/tests/performance/performance-resource-timing-resourcetimingbufferfull-shrinking-buffer-crash.html: Added.
     19
    1202018-01-31  Matt Lewis  <jlewis3@apple.com>
    221
  • trunk/Source/WebCore/ChangeLog

    r227909 r227926  
     12018-01-31  Ryosuke Niwa  <rniwa@webkit.org>
     2
     3        Release assertion in Performance::resourceTimingBufferFullTimerFired when the resource timing buffer is shrunk
     4        https://bugs.webkit.org/show_bug.cgi?id=182319
     5        <rdar://problem/36904312>
     6
     7        Reviewed by Chris Dumez.
     8
     9        The crash was caused by a wrong release assertion. Handle author scripts shrinking the resource timing buffer
     10        while resourcetimingbufferfull event is being dispatched.
     11
     12        Also fixed a bug that a superflous resourcetimingbufferfull event will be fired when new resource timing entries
     13        are queued while resourcetimingbufferfull event is being dispatched.
     14
     15        Test: http/tests/performance/performance-resource-timing-resourcetimingbufferfull-queue-resource-entry.html
     16              http/tests/performance/performance-resource-timing-resourcetimingbufferfull-shrinking-buffer-crash.html
     17
     18        * page/Performance.cpp:
     19        (WebCore::Performance::resourceTimingBufferFullTimerFired):
     20
    1212018-01-31  Youenn Fablet  <youenn@apple.com>
    222
  • trunk/Source/WebCore/page/Performance.cpp

    r226617 r227926  
    214214    while (!m_backupResourceTimingBuffer.isEmpty()) {
    215215        auto backupBuffer = WTFMove(m_backupResourceTimingBuffer);
     216        ASSERT(m_backupResourceTimingBuffer.isEmpty());
    216217
    217218        m_resourceTimingBufferFullFlag = true;
    218219        dispatchEvent(Event::create(eventNames().resourcetimingbufferfullEvent, true, false));
    219220
    220         RELEASE_ASSERT(m_resourceTimingBufferSize >= m_resourceTimingBuffer.size());
    221         unsigned remainingBufferSize = m_resourceTimingBufferSize - m_resourceTimingBuffer.size();
    222         bool bufferIsStillFullAfterDispatchingEvent = !remainingBufferSize;
    223         if (bufferIsStillFullAfterDispatchingEvent) {
     221        if (m_resourceTimingBufferFullFlag) {
    224222            for (auto& entry : backupBuffer)
    225223                queueEntry(*entry);
     
    227225            for (auto& entry : m_backupResourceTimingBuffer)
    228226                queueEntry(*entry);
     227            m_backupResourceTimingBuffer.clear();
    229228            break;
    230229        }
    231230
    232         unsigned i = 0;
     231        // More entries may have added while dispatching resourcetimingbufferfull event.
     232        backupBuffer.appendVector(m_backupResourceTimingBuffer);
     233        m_backupResourceTimingBuffer.clear();
     234
    233235        for (auto& entry : backupBuffer) {
    234             if (i < remainingBufferSize) {
     236            if (!isResourceTimingBufferFull()) {
    235237                m_resourceTimingBuffer.append(entry.copyRef());
    236238                queueEntry(*entry);
    237239            } else
    238240                m_backupResourceTimingBuffer.append(entry.copyRef());
    239             i++;
    240241        }
    241242    }
Note: See TracChangeset for help on using the changeset viewer.