Title: [171151] trunk/Source/WebCore
- Revision
- 171151
- Author
- jer.no...@apple.com
- Date
- 2014-07-16 13:51:19 -0700 (Wed, 16 Jul 2014)
Log 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:
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (171150 => 171151)
--- trunk/Source/WebCore/ChangeLog 2014-07-16 20:31:06 UTC (rev 171150)
+++ trunk/Source/WebCore/ChangeLog 2014-07-16 20:51:19 UTC (rev 171151)
@@ -1,3 +1,25 @@
+2014-07-16 Jer Noble <jer.no...@apple.com>
+
+ [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:
+
2014-07-16 Mike West <mk...@chromium.org>
CSP: Drop 'script-nonce' directive.
Modified: trunk/Source/WebCore/Modules/mediasource/MediaSource.cpp (171150 => 171151)
--- trunk/Source/WebCore/Modules/mediasource/MediaSource.cpp 2014-07-16 20:31:06 UTC (rev 171150)
+++ trunk/Source/WebCore/Modules/mediasource/MediaSource.cpp 2014-07-16 20:51:19 UTC (rev 171151)
@@ -540,9 +540,8 @@
RefPtr<SourceBuffer> buffer = SourceBuffer::create(sourceBufferPrivate.releaseNonNull(), this);
// 6. Add the new object to sourceBuffers and fire a addsourcebuffer on that object.
m_sourceBuffers->add(buffer);
+ regenerateActiveSourceBuffers();
- if (buffer->active())
- m_activeSourceBuffers->add(buffer);
// 7. Return the new object to the caller.
return buffer.get();
}
@@ -745,12 +744,9 @@
setReadyState(closedKeyword());
}
-void MediaSource::sourceBufferDidChangeAcitveState(SourceBuffer* sourceBuffer, bool active)
+void MediaSource::sourceBufferDidChangeAcitveState(SourceBuffer*, bool)
{
- if (active && !m_activeSourceBuffers->contains(sourceBuffer))
- m_activeSourceBuffers->add(sourceBuffer);
- else if (!active && m_activeSourceBuffers->contains(sourceBuffer))
- m_activeSourceBuffers->remove(sourceBuffer);
+ regenerateActiveSourceBuffers();
}
bool MediaSource::attachToElement(HTMLMediaElement* element)
@@ -869,6 +865,16 @@
return MediaSourceRegistry::registry();
}
+void MediaSource::regenerateActiveSourceBuffers()
+{
+ Vector<RefPtr<SourceBuffer>> newList;
+ for (auto& sourceBuffer : *m_sourceBuffers) {
+ if (sourceBuffer->active())
+ newList.append(sourceBuffer);
+ }
+ m_activeSourceBuffers->swap(newList);
}
+}
+
#endif
Modified: trunk/Source/WebCore/Modules/mediasource/MediaSource.h (171150 => 171151)
--- trunk/Source/WebCore/Modules/mediasource/MediaSource.h 2014-07-16 20:31:06 UTC (rev 171150)
+++ trunk/Source/WebCore/Modules/mediasource/MediaSource.h 2014-07-16 20:51:19 UTC (rev 171151)
@@ -123,6 +123,8 @@
void scheduleEvent(const AtomicString& eventName);
GenericEventQueue& asyncEventQueue() { return m_asyncEventQueue; }
+ void regenerateActiveSourceBuffers();
+
static URLRegistry* s_registry;
RefPtr<MediaSourcePrivate> m_private;
Modified: trunk/Source/WebCore/Modules/mediasource/SourceBufferList.cpp (171150 => 171151)
--- trunk/Source/WebCore/Modules/mediasource/SourceBufferList.cpp 2014-07-16 20:31:06 UTC (rev 171150)
+++ trunk/Source/WebCore/Modules/mediasource/SourceBufferList.cpp 2014-07-16 20:51:19 UTC (rev 171151)
@@ -70,6 +70,24 @@
scheduleEvent(eventNames().removesourcebufferEvent);
}
+void SourceBufferList::swap(Vector<RefPtr<SourceBuffer>>& other)
+{
+ int changeInSize = other.size() - m_list.size();
+ int addedEntries = 0;
+ for (auto& sourceBuffer : other) {
+ if (!m_list.contains(sourceBuffer))
+ ++addedEntries;
+ }
+ int removedEntries = addedEntries - changeInSize;
+
+ m_list.swap(other);
+
+ if (addedEntries)
+ scheduleEvent(eventNames().addsourcebufferEvent);
+ if (removedEntries)
+ scheduleEvent(eventNames().removesourcebufferEvent);
+}
+
void SourceBufferList::scheduleEvent(const AtomicString& eventName)
{
RefPtr<Event> event = Event::create(eventName, false, false);
Modified: trunk/Source/WebCore/Modules/mediasource/SourceBufferList.h (171150 => 171151)
--- trunk/Source/WebCore/Modules/mediasource/SourceBufferList.h 2014-07-16 20:31:06 UTC (rev 171150)
+++ trunk/Source/WebCore/Modules/mediasource/SourceBufferList.h 2014-07-16 20:51:19 UTC (rev 171151)
@@ -58,6 +58,7 @@
void remove(SourceBuffer*);
bool contains(SourceBuffer* buffer) { return m_list.find(buffer) != notFound; }
void clear();
+ void swap(Vector<RefPtr<SourceBuffer>>&);
Vector<RefPtr<SourceBuffer>>::iterator begin() { return m_list.begin(); }
Vector<RefPtr<SourceBuffer>>::iterator end() { return m_list.end(); }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes