Index: Source/modules/mediasource/SourceBuffer.cpp |
diff --git a/Source/modules/mediasource/SourceBuffer.cpp b/Source/modules/mediasource/SourceBuffer.cpp |
index 77eba01d9902655dbb6687f866c4c876e189b25b..6fd2234294eabdef47610b53b6e77c6e16fd6a21 100644 |
--- a/Source/modules/mediasource/SourceBuffer.cpp |
+++ b/Source/modules/mediasource/SourceBuffer.cpp |
@@ -67,13 +67,13 @@ SourceBuffer::SourceBuffer(PassOwnPtr<SourceBufferPrivate> sourceBufferPrivate, |
, m_timestampOffset(0) |
, m_appendWindowStart(0) |
, m_appendWindowEnd(std::numeric_limits<double>::infinity()) |
- , m_appendBufferTimer(this, &SourceBuffer::appendBufferTimerFired) |
- , m_removeTimer(this, &SourceBuffer::removeTimerFired) |
+ , m_appendBufferAsyncPartRunner(this, &SourceBuffer::appendBufferAsyncPart) |
+ , m_removeAsyncPartRunner(this, &SourceBuffer::removeAsyncPart) |
, m_pendingRemoveStart(-1) |
, m_pendingRemoveEnd(-1) |
, m_streamMaxSizeValid(false) |
, m_streamMaxSize(0) |
- , m_appendStreamTimer(this, &SourceBuffer::appendStreamTimerFired) |
+ , m_appendStreamAsyncPartRunner(this, &SourceBuffer::appendStreamAsyncPart) |
{ |
ASSERT(m_private); |
ASSERT(m_source); |
@@ -303,7 +303,7 @@ void SourceBuffer::remove(double start, double end, ExceptionState& es) |
// 8. Return control to the caller and run the rest of the steps asynchronously. |
m_pendingRemoveStart = start; |
m_pendingRemoveEnd = end; |
- m_removeTimer.startOneShot(0); |
+ m_removeAsyncPartRunner.runAsync(); |
} |
void SourceBuffer::abortIfUpdating() |
@@ -326,14 +326,14 @@ void SourceBuffer::abortIfUpdating() |
} |
// 3.1. Abort the buffer append and stream append loop algorithms if they are running. |
- m_appendBufferTimer.stop(); |
+ m_appendBufferAsyncPartRunner.stop(); |
m_pendingAppendData.clear(); |
- m_removeTimer.stop(); |
+ m_removeAsyncPartRunner.stop(); |
m_pendingRemoveStart = -1; |
m_pendingRemoveEnd = -1; |
- m_appendStreamTimer.stop(); |
+ m_appendStreamAsyncPartRunner.stop(); |
clearAppendStreamState(); |
// 3.2. Set the updating attribute to false. |
@@ -365,11 +365,25 @@ bool SourceBuffer::hasPendingActivity() const |
return m_source; |
} |
+void SourceBuffer::suspend() |
+{ |
+ m_appendBufferAsyncPartRunner.suspend(); |
+ m_removeAsyncPartRunner.suspend(); |
+ m_appendStreamAsyncPartRunner.suspend(); |
+} |
+ |
+void SourceBuffer::resume() |
+{ |
+ m_appendBufferAsyncPartRunner.resume(); |
+ m_removeAsyncPartRunner.resume(); |
+ m_appendStreamAsyncPartRunner.resume(); |
+} |
+ |
void SourceBuffer::stop() |
{ |
- m_appendBufferTimer.stop(); |
- m_removeTimer.stop(); |
- m_appendStreamTimer.stop(); |
+ m_appendBufferAsyncPartRunner.stop(); |
+ m_removeAsyncPartRunner.stop(); |
+ m_appendStreamAsyncPartRunner.stop(); |
} |
ExecutionContext* SourceBuffer::executionContext() const |
@@ -427,12 +441,12 @@ void SourceBuffer::appendBufferInternal(const unsigned char* data, unsigned size |
scheduleEvent(EventTypeNames::updatestart); |
// 10. Asynchronously run the buffer append algorithm. |
- m_appendBufferTimer.startOneShot(0); |
+ m_appendBufferAsyncPartRunner.runAsync(); |
TRACE_EVENT_ASYNC_STEP0("media", "SourceBuffer::appendBuffer", this, "waiting"); |
} |
-void SourceBuffer::appendBufferTimerFired(Timer<SourceBuffer>*) |
+void SourceBuffer::appendBufferAsyncPart() |
{ |
ASSERT(m_updating); |
@@ -464,7 +478,7 @@ void SourceBuffer::appendBufferTimerFired(Timer<SourceBuffer>*) |
TRACE_EVENT_ASYNC_END0("media", "SourceBuffer::appendBuffer", this); |
} |
-void SourceBuffer::removeTimerFired(Timer<SourceBuffer>*) |
+void SourceBuffer::removeAsyncPart() |
{ |
ASSERT(m_updating); |
ASSERT(m_pendingRemoveStart >= 0); |
@@ -526,10 +540,10 @@ void SourceBuffer::appendStreamInternal(PassRefPtr<Stream> stream, ExceptionStat |
stream->neuter(); |
m_loader = adoptPtr(new FileReaderLoader(FileReaderLoader::ReadByClient, this)); |
m_stream = stream; |
- m_appendStreamTimer.startOneShot(0); |
+ m_appendStreamAsyncPartRunner.runAsync(); |
} |
-void SourceBuffer::appendStreamTimerFired(Timer<SourceBuffer>*) |
+void SourceBuffer::appendStreamAsyncPart() |
{ |
ASSERT(m_updating); |
ASSERT(m_loader); |
@@ -576,7 +590,7 @@ void SourceBuffer::appendStreamDone(bool success) |
} |
// Section 3.5.6 Stream Append Loop |
- // Steps 1-11 are handled by appendStreamTimerFired(), |m_loader|, and |m_private|. |
+ // Steps 1-11 are handled by appendStreamAsyncPart(), |m_loader|, and |m_private|. |
// 12. Loop Done: Set the updating attribute to false. |
m_updating = false; |