| Index: Source/modules/webaudio/AudioParam.cpp
|
| diff --git a/Source/modules/webaudio/AudioParam.cpp b/Source/modules/webaudio/AudioParam.cpp
|
| index 01ee0233e699e47de1f2ec632969a6b9cf4b5977..611b9a9427587962844c577fbaec71322a539dd1 100644
|
| --- a/Source/modules/webaudio/AudioParam.cpp
|
| +++ b/Source/modules/webaudio/AudioParam.cpp
|
| @@ -41,7 +41,7 @@ const double AudioParamHandler::SnapThreshold = 0.001;
|
| float AudioParamHandler::value()
|
| {
|
| // Update value for timeline.
|
| - if (context() && context()->isAudioThread()) {
|
| + if (deferredTaskHandler().isAudioThread()) {
|
| bool hasValue;
|
| float timelineValue = m_timeline.valueForContextTime(context(), narrowPrecisionToFloat(m_value), hasValue);
|
|
|
| @@ -100,7 +100,7 @@ float AudioParamHandler::finalValue()
|
|
|
| void AudioParamHandler::calculateSampleAccurateValues(float* values, unsigned numberOfValues)
|
| {
|
| - bool isSafe = context() && context()->isAudioThread() && values && numberOfValues;
|
| + bool isSafe = deferredTaskHandler().isAudioThread() && values && numberOfValues;
|
| ASSERT(isSafe);
|
| if (!isSafe)
|
| return;
|
| @@ -110,7 +110,7 @@ void AudioParamHandler::calculateSampleAccurateValues(float* values, unsigned nu
|
|
|
| void AudioParamHandler::calculateFinalValues(float* values, unsigned numberOfValues, bool sampleAccurate)
|
| {
|
| - bool isGood = context() && context()->isAudioThread() && values && numberOfValues;
|
| + bool isGood = deferredTaskHandler().isAudioThread() && values && numberOfValues;
|
| ASSERT(isGood);
|
| if (!isGood)
|
| return;
|
| @@ -163,7 +163,7 @@ void AudioParamHandler::calculateTimelineValues(float* values, unsigned numberOf
|
|
|
| void AudioParamHandler::connect(AudioNodeOutput& output)
|
| {
|
| - ASSERT(context()->isGraphOwner());
|
| + ASSERT(deferredTaskHandler().isGraphOwner());
|
|
|
| if (m_outputs.contains(&output))
|
| return;
|
| @@ -175,7 +175,7 @@ void AudioParamHandler::connect(AudioNodeOutput& output)
|
|
|
| void AudioParamHandler::disconnect(AudioNodeOutput& output)
|
| {
|
| - ASSERT(context()->isGraphOwner());
|
| + ASSERT(deferredTaskHandler().isGraphOwner());
|
|
|
| if (m_outputs.contains(&output)) {
|
| m_outputs.remove(&output);
|
| @@ -184,6 +184,17 @@ void AudioParamHandler::disconnect(AudioNodeOutput& output)
|
| }
|
| }
|
|
|
| +DEFINE_TRACE(AudioParamHandler)
|
| +{
|
| + visitor->trace(m_context);
|
| + // TODO(tkent): Oilpan: m_renderingOutputs should not be strong references.
|
| + // This is a short-term workaround to avoid crashes, and causes AudioNode
|
| + // leaks.
|
| + AudioContext::AutoLocker locker(deferredTaskHandler());
|
| + for (size_t i = 0; i < m_renderingOutputs.size(); ++i)
|
| + visitor->trace(m_renderingOutputs[i]);
|
| +}
|
| +
|
| } // namespace blink
|
|
|
| #endif // ENABLE(WEB_AUDIO)
|
|
|