Changeset 171151 in webkit


Ignore:
Timestamp:
Jul 16, 2014 1:51:19 PM (10 years ago)
Author:
jer.noble@apple.com
Message:

[MSE] http/tests/media/media-source/mediasource-buffered.html is flakey
https://bugs.webkit.org/show_bug.cgi?id=134949

Reviewed by Eric Carlson.

Depending on which SourceBuffer is successfully parsed first, the order of activeSourceBuffers
may change from run to run, breaking the http/tests/media/media-source/mediasource-buffered.html
test. Make the order of activeSourceBuffers the same as (a subset of) sourceBuffers, by replacing
calls to activeSourceBuffers->add() and with a new call to regenerateActiveSourceBuffers(), which
swaps the contents of the SourceBufferList with a new, ordered Vector.

  • Modules/mediasource/MediaSource.cpp:

(WebCore::MediaSource::addSourceBuffer):
(WebCore::MediaSource::sourceBufferDidChangeAcitveState):
(WebCore::MediaSource::regenerateActiveSourceBuffers):

  • Modules/mediasource/MediaSource.h:
  • Modules/mediasource/SourceBufferList.cpp:

(WebCore::SourceBufferList::swap):

  • Modules/mediasource/SourceBufferList.h:
Location:
trunk/Source/WebCore
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r171150 r171151  
     12014-07-16  Jer Noble  <jer.noble@apple.com>
     2
     3        [MSE] http/tests/media/media-source/mediasource-buffered.html is flakey
     4        https://bugs.webkit.org/show_bug.cgi?id=134949
     5
     6        Reviewed by Eric Carlson.
     7
     8        Depending on which SourceBuffer is successfully parsed first, the order of activeSourceBuffers
     9        may change from run to run, breaking the http/tests/media/media-source/mediasource-buffered.html
     10        test. Make the order of activeSourceBuffers the same as (a subset of) sourceBuffers, by replacing
     11        calls to activeSourceBuffers->add() and with a new call to regenerateActiveSourceBuffers(), which
     12        swaps the contents of the SourceBufferList with a new, ordered Vector.
     13
     14        * Modules/mediasource/MediaSource.cpp:
     15        (WebCore::MediaSource::addSourceBuffer):
     16        (WebCore::MediaSource::sourceBufferDidChangeAcitveState):
     17        (WebCore::MediaSource::regenerateActiveSourceBuffers):
     18        * Modules/mediasource/MediaSource.h:
     19        * Modules/mediasource/SourceBufferList.cpp:
     20        (WebCore::SourceBufferList::swap):
     21        * Modules/mediasource/SourceBufferList.h:
     22
    1232014-07-16  Mike West  <mkwst@chromium.org>
    224
  • trunk/Source/WebCore/Modules/mediasource/MediaSource.cpp

    r171148 r171151  
    541541    // 6. Add the new object to sourceBuffers and fire a addsourcebuffer on that object.
    542542    m_sourceBuffers->add(buffer);
    543 
    544     if (buffer->active())
    545         m_activeSourceBuffers->add(buffer);
     543    regenerateActiveSourceBuffers();
     544
    546545    // 7. Return the new object to the caller.
    547546    return buffer.get();
     
    746745}
    747746
    748 void MediaSource::sourceBufferDidChangeAcitveState(SourceBuffer* sourceBuffer, bool active)
    749 {
    750     if (active && !m_activeSourceBuffers->contains(sourceBuffer))
    751         m_activeSourceBuffers->add(sourceBuffer);
    752     else if (!active && m_activeSourceBuffers->contains(sourceBuffer))
    753         m_activeSourceBuffers->remove(sourceBuffer);
     747void MediaSource::sourceBufferDidChangeAcitveState(SourceBuffer*, bool)
     748{
     749    regenerateActiveSourceBuffers();
    754750}
    755751
     
    870866}
    871867
     868void MediaSource::regenerateActiveSourceBuffers()
     869{
     870    Vector<RefPtr<SourceBuffer>> newList;
     871    for (auto& sourceBuffer : *m_sourceBuffers) {
     872        if (sourceBuffer->active())
     873            newList.append(sourceBuffer);
     874    }
     875    m_activeSourceBuffers->swap(newList);
     876}
     877
    872878}
    873879
  • trunk/Source/WebCore/Modules/mediasource/MediaSource.h

    r171033 r171151  
    124124    GenericEventQueue& asyncEventQueue() { return m_asyncEventQueue; }
    125125
     126    void regenerateActiveSourceBuffers();
     127
    126128    static URLRegistry* s_registry;
    127129
  • trunk/Source/WebCore/Modules/mediasource/SourceBufferList.cpp

    r156413 r171151  
    7171}
    7272
     73void SourceBufferList::swap(Vector<RefPtr<SourceBuffer>>& other)
     74{
     75    int changeInSize = other.size() - m_list.size();
     76    int addedEntries = 0;
     77    for (auto& sourceBuffer : other) {
     78        if (!m_list.contains(sourceBuffer))
     79            ++addedEntries;
     80    }
     81    int removedEntries = addedEntries - changeInSize;
     82
     83    m_list.swap(other);
     84
     85    if (addedEntries)
     86        scheduleEvent(eventNames().addsourcebufferEvent);
     87    if (removedEntries)
     88        scheduleEvent(eventNames().removesourcebufferEvent);
     89}
     90
    7391void SourceBufferList::scheduleEvent(const AtomicString& eventName)
    7492{
  • trunk/Source/WebCore/Modules/mediasource/SourceBufferList.h

    r162158 r171151  
    5959    bool contains(SourceBuffer* buffer) { return m_list.find(buffer) != notFound; }
    6060    void clear();
     61    void swap(Vector<RefPtr<SourceBuffer>>&);
    6162
    6263    Vector<RefPtr<SourceBuffer>>::iterator begin() { return m_list.begin(); }
Note: See TracChangeset for help on using the changeset viewer.