Changeset 171151 in webkit
- Timestamp:
- Jul 16, 2014 1:51:19 PM (10 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r171150 r171151 1 2014-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 1 23 2014-07-16 Mike West <mkwst@chromium.org> 2 24 -
trunk/Source/WebCore/Modules/mediasource/MediaSource.cpp
r171148 r171151 541 541 // 6. Add the new object to sourceBuffers and fire a addsourcebuffer on that object. 542 542 m_sourceBuffers->add(buffer); 543 544 if (buffer->active()) 545 m_activeSourceBuffers->add(buffer); 543 regenerateActiveSourceBuffers(); 544 546 545 // 7. Return the new object to the caller. 547 546 return buffer.get(); … … 746 745 } 747 746 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); 747 void MediaSource::sourceBufferDidChangeAcitveState(SourceBuffer*, bool) 748 { 749 regenerateActiveSourceBuffers(); 754 750 } 755 751 … … 870 866 } 871 867 868 void 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 872 878 } 873 879 -
trunk/Source/WebCore/Modules/mediasource/MediaSource.h
r171033 r171151 124 124 GenericEventQueue& asyncEventQueue() { return m_asyncEventQueue; } 125 125 126 void regenerateActiveSourceBuffers(); 127 126 128 static URLRegistry* s_registry; 127 129 -
trunk/Source/WebCore/Modules/mediasource/SourceBufferList.cpp
r156413 r171151 71 71 } 72 72 73 void 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 73 91 void SourceBufferList::scheduleEvent(const AtomicString& eventName) 74 92 { -
trunk/Source/WebCore/Modules/mediasource/SourceBufferList.h
r162158 r171151 59 59 bool contains(SourceBuffer* buffer) { return m_list.find(buffer) != notFound; } 60 60 void clear(); 61 void swap(Vector<RefPtr<SourceBuffer>>&); 61 62 62 63 Vector<RefPtr<SourceBuffer>>::iterator begin() { return m_list.begin(); }
Note: See TracChangeset
for help on using the changeset viewer.