Changeset 228053 in webkit


Ignore:
Timestamp:
Feb 4, 2018 6:18:37 PM (6 years ago)
Author:
jmarcell@apple.com
Message:

Cherry-pick r227926. rdar://problem/37145475

Location:
branches/safari-605-branch
Files:
4 added
3 edited

Legend:

Unmodified
Added
Removed
  • branches/safari-605-branch/LayoutTests/ChangeLog

    r228020 r228053  
     12018-02-04  Jason Marcell  <jmarcell@apple.com>
     2
     3        Cherry-pick r227926. rdar://problem/37145475
     4
     5    2018-01-31  Ryosuke Niwa  <rniwa@webkit.org>
     6
     7            Release assertion in Performance::resourceTimingBufferFullTimerFired when the resource timing buffer is shrunk
     8            https://bugs.webkit.org/show_bug.cgi?id=182319
     9            <rdar://problem/36904312>
     10
     11            Reviewed by Chris Dumez.
     12
     13            Added regression tests for shrinking the resoruce timing buffer and queuing a new resource timing entry while
     14            resourcetimingbufferfull event is being dispatched.
     15
     16            * http/tests/performance/performance-resource-timing-resourcetimingbufferfull-queue-resource-entry-expected.txt: Added.
     17            * http/tests/performance/performance-resource-timing-resourcetimingbufferfull-queue-resource-entry.html: Added.
     18            * http/tests/performance/performance-resource-timing-resourcetimingbufferfull-shrinking-buffer-crash-expected.txt: Added.
     19            * http/tests/performance/performance-resource-timing-resourcetimingbufferfull-shrinking-buffer-crash.html: Added.
     20
     21            * http/tests/performance/performance-resource-timing-resourcetimingbufferfull-shrinking-buffer-crash-expected.txt: Added.
     22            * http/tests/performance/performance-resource-timing-resourcetimingbufferfull-shrinking-buffer-crash.html: Added.
     23
    1242018-02-02  Ryan Haddad  <ryanhaddad@apple.com>
    225
  • branches/safari-605-branch/Source/WebCore/ChangeLog

    r227923 r228053  
     12018-02-04  Jason Marcell  <jmarcell@apple.com>
     2
     3        Cherry-pick r227926. rdar://problem/37145475
     4
     5    2018-01-31  Ryosuke Niwa  <rniwa@webkit.org>
     6
     7            Release assertion in Performance::resourceTimingBufferFullTimerFired when the resource timing buffer is shrunk
     8            https://bugs.webkit.org/show_bug.cgi?id=182319
     9            <rdar://problem/36904312>
     10
     11            Reviewed by Chris Dumez.
     12
     13            The crash was caused by a wrong release assertion. Handle author scripts shrinking the resource timing buffer
     14            while resourcetimingbufferfull event is being dispatched.
     15
     16            Also fixed a bug that a superflous resourcetimingbufferfull event will be fired when new resource timing entries
     17            are queued while resourcetimingbufferfull event is being dispatched.
     18
     19            Test: http/tests/performance/performance-resource-timing-resourcetimingbufferfull-queue-resource-entry.html
     20                  http/tests/performance/performance-resource-timing-resourcetimingbufferfull-shrinking-buffer-crash.html
     21
     22            * page/Performance.cpp:
     23            (WebCore::Performance::resourceTimingBufferFullTimerFired):
     24
    1252018-01-31  Jason Marcell  <jmarcell@apple.com>
    226
  • branches/safari-605-branch/Source/WebCore/page/Performance.cpp

    r226688 r228053  
    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.