Commit Graph

80 Commits

Author SHA1 Message Date
Randell Jesup
cdc2162522 Bug 1072780: patch 1 - clean up CurrentDriver() use off-MSG-thread; fix InCallback() r=roc 2014-09-28 12:07:24 -04:00
Daniel Holbert
a0869f434b Back out bug 1072780 & bug 1072775 (by reverting to cset before them, d71444b75291) for pthread assertion failures 2014-09-28 09:56:40 -07:00
Randell Jesup
aa18ebcddb bug 1072780: patch 4 - Use atomics for EnsureNextIteration to close races around CurrentDriver r=roc 2014-09-28 12:07:25 -04:00
Randell Jesup
864eefaddc bug 1072780: patch 3 - Fix up Revive() to not trigger assertions, and also to avoid Init() (blocking) on MainThread r=roc 2014-09-28 12:07:24 -04:00
Randell Jesup
70b7a63015 Bug 1072775: Additional assertions for MediaStreamGraph/GraphDriver r=roc 2014-09-28 12:07:24 -04:00
Randell Jesup
cd81bcf1d7 Bug 1072780: patch 1 - clean up CurrentDriver() use off-MSG-thread; fix InCallback() r=roc 2014-09-28 12:07:24 -04:00
Paul Adenot
6bf737fc9a Bug 1059389 - Unbreak --disable-webrtc. r=jesup
--HG--
extra : rebase_source : 4ef5373b44a889c0641b0e829e3feae2a0116f5e
2014-09-09 18:23:01 +02:00
Paul Adenot
2635504554 Bug 1062293 - Add specialized logging to track the lifetime state change of MediaStreamGraphs r=jesup
As noted in the comment, it is very useful to have this interleaved with the ADB
logcat on Android/b2g, because this way we can correlate gecko state with the
state of the Android HAL.

--HG--
extra : rebase_source : 80df45d0851a06daac3abeab2ea4b5bc7e58a21d
2014-08-31 14:19:48 +02:00
Randell Jesup
61652f721c Bug 848954 - Part 29 - Make the MSG in stable state event ref counted. r=padenot 2014-08-26 17:04:39 +02:00
Randell Jesup
fadcfae452 Bug 848954 - Part 29 - Make sure to clear the right boolean flag when dispatching a stable state event. r=padenot 2014-08-25 14:13:14 +02:00
Paul Adenot
fe687bd537 Bug 848954 - Part 27 - Only attempt to sleep if the graph is still running. r=jesup 2014-08-26 17:04:36 +02:00
Paul Adenot
e2c00fc640 Bug 848954 - Part 23 - Refcount the AudioOutputObserver. r=jesup 2014-08-26 17:02:31 +02:00
Paul Adenot
2618f0a77f Bug 848954 - Part 21 - Fix sleep/wake up code for the MSG. r=roc 2014-08-26 17:02:30 +02:00
Paul Adenot
a3533d7c93 Bug 848954 - Part 20 - Remove the now useless DriverHolder class. r=roc 2014-08-26 17:02:28 +02:00
Paul Adenot
2dc4962f29 Bug 848954 - Part 16 - Make AudioCallbackDriver respect the AudioChannelType. r=roc 2014-08-26 17:02:08 +02:00
Paul Adenot
4dffa09424 Bug 848954 - Part 15 - Allow an AudioCallbackDriver to sleep to save power. r=roc 2014-08-26 17:02:08 +02:00
Paul Adenot
d410cae05a Bug 848954 - Part 10 - Add a MediaStreamGraph driver based on an audio callback. r=roc 2014-08-26 17:01:33 +02:00
Paul Adenot
64e239b778 Bug 848954 - Part 9 - Allow to pass in hints when getting a reference to a MediaStreamGraph to get the right driver started as soon as possible. r=roc
This is useful because some platform have rather slow audio stream
initialization time, especially the first time an audio stream is created for
the process.

We put in telemetry probes to measure that:
First stream opened for the process:
http://telemetry.mozilla.org/#filter=nightly%2F33%2FAUDIOSTREAM_FIRST_OPEN_MS&aggregates=multiselect-all!Submissions!Mean!5th%20percentile!25th%20percentile!median!75th%20percentile!95th%20percentile&evoOver=Builds&locked=true&sanitize=true&renderhistogram=Graph

Subsequent streams:
http://telemetry.mozilla.org/#filter=nightly%2F33%2FAUDIOSTREAM_LATER_OPEN_MS&aggregates=multiselect-all!Submissions!Mean!5th%20percentile!25th%20percentile!median!75th%20percentile!95th%20percentile&evoOver=Builds&locked=true&sanitize=true&renderhistogram=Graph
2014-08-25 15:27:25 +02:00
Paul Adenot
5856b1e3a4 Bug 848954 - Part 7 - Get rid of the stack allocated message queue. r=roc
In the next patches, when the AudioDriver will be implemented, the audio backend
thread (that we don't control), will return from the stack frame where the
nsTArray that allows the MSG thread to exchange message queues in a efficient
manner with the main thread. We put it in the MediaStreamGraph to avoid adding
an allocation/deallocation per iteration on the MSG thread.

In addition, the graph will be able to run on different threads during its
lifetime, so we can't guarantee a stable stack frame to allocate things on
anymore.

The array are renamed with meaningful names, explaining the double-buffering
pattern: the back queue is filled by the main thread, and is swapped with the
front queue that is processed by the MSG thread.

Arrays accesses are synchronized using the driver's monitor.
2014-08-25 15:26:21 +02:00
Paul Adenot
735258f143 Bug 848954 - Part 5 - Mix down all audio and only output a single stream. r=roc 2014-08-25 15:25:49 +02:00
Paul Adenot
f6e2e2b753 Bug 848954 - Part 3 - Separate interval time calculation and actual processing, and give an audio-callback compatible interface to the Process function. r=roc 2014-04-25 18:04:23 +02:00
Paul Adenot
abc95a4adc Bug 848954 - Part 2 - Put the thread management in the driver. r=roc 2014-04-25 18:03:04 +02:00
Paul Adenot
f4c5b13dbd Bug 848954 - Part 1 - Factor out clocks and scheduling of MSG iterations. r=roc 2014-04-25 16:09:30 +02:00
Karl Tomlinson
09a7376680 b=932400 change stream ordering to get feedback DelayNode output before supplying input r=roc
Previously downstream nodes from DelayNodes in cycles sometimes received stale
output from the previous MSG iteration.

Also, if two cycles share a common path, they will now *both* be treated as
cycles, either by muting or by enforcing minimum delay.  Previously, marking
one cycle first could prevent detection of other cycles in the same SCC.

--HG--
extra : rebase_source : 82892c538c5ce514165b5f975474df15b99e3d2b
2014-07-17 12:55:55 +12:00
Karl Tomlinson
7db34c314d b=932400 remove refcount manipulation of streams when reordering for processing r=roc
--HG--
extra : rebase_source : f99f4220b53a28a32e9a294b67f4db6218113d73
2014-07-07 11:52:25 +12:00
Karl Tomlinson
05746f1c8d b=1020411 correct control message order with RunAfterPendingUpdates() at shutdown r=roc
--HG--
extra : transplant_source : %AE%05%92%2C%60%9FL%D0%13O%EE%7D%09ZV%87%06%E9%B6%D8
2014-07-02 18:04:54 +12:00
Karl Tomlinson
8b889b1ea2 b=1023697 use audio ticks for graph time units r=roc
--HG--
extra : transplant_source : 8%BA%9D%5C%E32%05x%A79K%08TH%A7%F4%F2tg%EC
2014-06-12 16:45:00 +12:00
Karl Tomlinson
9d196f97b5 b=1023697 add functions to convert between track ticks and seconds, and remove global MediaTime/second conversion functions r=roc
--HG--
extra : transplant_source : %F3%D8%C168%B7%A3%13%B2p%3Ee%89TkGlD%A8%A7
2014-06-12 16:45:00 +12:00
Karl Tomlinson
7b69861556 b=1023697 add functions to convert between track rates and remove global StreamTime/tick conversion functions r=roc
--HG--
extra : transplant_source : %B6%BC%83%17%22%EE%5D%BEl%B6%17m%1C%D0N%D1C%97%60%E1
2014-06-12 16:44:59 +12:00
Karl Tomlinson
1a9a77a15c b=1023697 record the graph tick rate on StreamBuffer and its Tracks for StreamTime calculations r=roc
--HG--
extra : transplant_source : 8%B4%DB%A4%FE%2C%B7%235%7F%7D5%2C%FA%BA%0D%9E%CC%7E%11
2014-06-12 16:44:59 +12:00
Karl Tomlinson
cba3ae5c9b b=1015025 use a consistent reference timestamp for graph time to avoid accumulating drift from rounding to MediaTime r=roc
--HG--
extra : transplant_source : 2%B9y%D4%80%DA/qqx%C5%F5%86%8CoT%B9S%19%D9
2014-05-26 11:26:52 +12:00
Paul Adenot
aa81ed9e24 Bug 998179 - Refactor how MediaStreamGraph get and use their sample rate. r=roc
Use the sample rate passed to the OfflineAudioContext constructor in
MediaStreamGraph::CreateOfflineInstance, and pass the preferred mixer sample
rate to the (real time) MediaStreamGraph constructor.

Then, always use this sample rate for the lifetime of the graph.

This patch needed to pass the sample rate to the AudioMixer class to avoid
relying on globals like it was done before.

--HG--
extra : rebase_source : 2802208819887605fe26a7040998fc328b3c9a57
2014-04-23 11:20:56 +02:00
Eric Rahm
314e9711f0 Bug 967817 - Finish memory reporters for Web Audio. r=roc, njn 2014-04-13 11:08:10 -07:00
Paul Adenot
c906c38e32 Bug 982490 - Ensure for MSG cycle that each MediaStream write the same number of frames to their AudioStream. r=jesup,roc 2014-03-24 11:06:06 +01:00
Paul Adenot
651e03feb0 Bug 818822 - Resample all inputs of the MediaStreamGraph to the ideal audio rate. r=roc 2014-03-24 11:06:05 +01:00
Randell Jesup
f04d6425a9 Backed out changeset 5349ecd9c313 (bug 818822) 2014-04-07 15:40:55 -04:00
Randell Jesup
a8633fc661 Backed out changeset 87f437be7de5 (bug 982490) 2014-04-07 15:37:56 -04:00
Paul Adenot
3b43fdba8c Bug 982490 - Ensure for MSG cycle that each MediaStream write the same number of frames to their AudioStream. r=jesup,roc 2014-03-24 11:06:06 +01:00
Paul Adenot
3e5a0fb811 Bug 818822 - Resample all inputs of the MediaStreamGraph to the ideal audio rate. r=roc 2014-03-24 11:06:05 +01:00
Randell Jesup
2dfec0638c Backed out 965c62289427:cb894b5d342f for perma-orange on b2g emulator M10 r=backout 2014-04-02 17:11:12 -04:00
Paul Adenot
a996edae64 Bug 982490 - Ensure for MSG cycle that each MediaStream write the same number of frames to their AudioStream. r=jesup,roc 2014-03-24 11:06:06 +01:00
Paul Adenot
d3b8229033 Bug 818822 - Resample all inputs of the MediaStreamGraph to the ideal audio rate. r=roc 2014-03-24 11:06:05 +01:00
Karl Tomlinson
feacffa94a b=969089 allow an offline graph to shutdown before it's AudioDestinationNode is unlinked r=roc
A non-realtime graph does not start up again after finished processing, so it
can safely enter LIFECYCLE_WAITING_FOR_STREAM_DESTRUCTION.

--HG--
extra : transplant_source : %AF%98D%D5%EE%CA7zfv.%B4%F4%D8%05Q7%C2%8D%A7
2014-02-11 13:04:58 +13:00
Robert O'Callahan
1161223f59 Bug 952893. Part 2: When all streams in the MSG are blocked, allow the MSG to suspend indefinitely and pause AudioStream outputs while suspended. r=padenot 2014-01-16 00:13:07 +13:00
Ryan VanderMeulen
286efb128e Backed out changesets ac4e6f145b9a, 91c572ac5ee1, f501606dc1d3, and 15fc5d1cb10e (bug 952893) for test failures on a CLOSED TREE. 2014-01-29 14:34:08 -05:00
Robert O'Callahan
0a88c0c6a2 Bug 952893. Part 2: When all streams in the MSG are blocked, allow the MSG to suspend indefinitely and pause AudioStream outputs while suspended. r=padenot 2014-01-16 00:13:07 +13:00
Paul Adenot
14fd5bbbb9 Bug 952893 - Backout changesets 780cba0f9f59, 887fe3a09c3d and fb04a4252ea3 for bad commit message, DONTBUILD. 2014-01-29 17:36:56 +01:00
Robert O'Callahan
dff42cfcd6 Bug 952389. Part 2: When all streams in the MSG are blocked, allow the MSG to suspend indefinitely and pause AudioStream outputs while suspended. r=padenot 2014-01-16 00:13:07 +13:00
Karl Tomlinson
4290acab7f b=957468 remove unused mNonRealtimeIsRunning r=ehsan
--HG--
extra : transplant_source : %F1%A1%5DT%21%AE%B0%AAh%1F%BB%06X%80F%9C%BBe%15U
2014-01-28 18:14:22 +13:00
Robert O'Callahan
27ac5e476a Bug 943461. Part 11: Don't tear down an OfflineAudioContext until its current time has actually reached its end, to ensure that all relevant stream state changes have been forwarded to the main thread. r=padenot
--HG--
extra : rebase_source : 32b9a4cf4c39edfabf5be17cec50a676f1ad4641
2013-12-09 18:08:02 +13:00