mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-03-01 05:48:26 +00:00
Backed out 2 changesets (bug 890072) for possible leaks
Backed out changeset 5e815a5ca50d (bug 890072) Backed out changeset 7151ab8ff70c (bug 890072)
This commit is contained in:
parent
c0cfafa124
commit
8beeac4ae5
@ -26,12 +26,10 @@ NS_IMPL_RELEASE_INHERITED(ConvolverNode, AudioNode)
|
||||
|
||||
class ConvolverNodeEngine : public AudioNodeEngine
|
||||
{
|
||||
typedef PlayingRefChangeHandler<ConvolverNode> PlayingRefChanged;
|
||||
public:
|
||||
ConvolverNodeEngine(AudioNode* aNode, bool aNormalize)
|
||||
: AudioNodeEngine(aNode)
|
||||
, mBufferLength(0)
|
||||
, mLeftOverData(INT32_MIN)
|
||||
, mSampleRate(0.0f)
|
||||
, mUseBackgroundThreads(!aNode->Context()->IsOffline())
|
||||
, mNormalize(aNormalize)
|
||||
@ -53,7 +51,6 @@ public:
|
||||
mBuffer = nullptr;
|
||||
mSampleRate = 0.0f;
|
||||
mBufferLength = aParam;
|
||||
mLeftOverData = INT32_MIN;
|
||||
break;
|
||||
case SAMPLE_RATE:
|
||||
mSampleRate = aParam;
|
||||
@ -95,7 +92,6 @@ public:
|
||||
if (!mBuffer || !mBufferLength || !mSampleRate) {
|
||||
mReverb = nullptr;
|
||||
mSeenInput = false;
|
||||
mLeftOverData = INT32_MIN;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -140,32 +136,12 @@ public:
|
||||
AllocateAudioBlock(numChannels, aOutput);
|
||||
|
||||
mReverb->process(&input, aOutput, WEBAUDIO_BLOCK_SIZE);
|
||||
|
||||
if (!aInput.IsNull()) {
|
||||
if (mLeftOverData == INT32_MIN) {
|
||||
// Start counting the left over data
|
||||
mLeftOverData = mBufferLength + WEBAUDIO_BLOCK_SIZE;
|
||||
MOZ_ASSERT(mLeftOverData > 0);
|
||||
|
||||
nsRefPtr<PlayingRefChanged> refchanged =
|
||||
new PlayingRefChanged(aStream, PlayingRefChanged::ADDREF);
|
||||
NS_DispatchToMainThread(refchanged);
|
||||
} else {
|
||||
mLeftOverData -= WEBAUDIO_BLOCK_SIZE;
|
||||
}
|
||||
if (mLeftOverData <= 0) {
|
||||
nsRefPtr<PlayingRefChanged> refchanged =
|
||||
new PlayingRefChanged(aStream, PlayingRefChanged::RELEASE);
|
||||
NS_DispatchToMainThread(refchanged);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
nsRefPtr<ThreadSharedFloatArrayBufferList> mBuffer;
|
||||
nsAutoPtr<WebCore::Reverb> mReverb;
|
||||
int32_t mBufferLength;
|
||||
int32_t mLeftOverData;
|
||||
float mSampleRate;
|
||||
bool mUseBackgroundThreads;
|
||||
bool mNormalize;
|
||||
|
@ -9,7 +9,6 @@
|
||||
|
||||
#include "AudioNode.h"
|
||||
#include "AudioBuffer.h"
|
||||
#include "PlayingRefChangeHandler.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
@ -40,10 +39,7 @@ public:
|
||||
void SetNormalize(bool aNormal);
|
||||
|
||||
private:
|
||||
friend class PlayingRefChangeHandler<ConvolverNode>;
|
||||
|
||||
nsRefPtr<AudioBuffer> mBuffer;
|
||||
SelfReference<ConvolverNode> mPlayingRef;
|
||||
bool mNormalize;
|
||||
};
|
||||
|
||||
|
@ -25,7 +25,42 @@ NS_IMPL_RELEASE_INHERITED(DelayNode, AudioNode)
|
||||
|
||||
class DelayNodeEngine : public AudioNodeEngine
|
||||
{
|
||||
typedef PlayingRefChangeHandler<DelayNode> PlayingRefChanged;
|
||||
class PlayingRefChanged : public nsRunnable
|
||||
{
|
||||
public:
|
||||
enum ChangeType { ADDREF, RELEASE };
|
||||
PlayingRefChanged(AudioNodeStream* aStream, ChangeType aChange)
|
||||
: mStream(aStream)
|
||||
, mChange(aChange)
|
||||
{
|
||||
}
|
||||
|
||||
NS_IMETHOD Run()
|
||||
{
|
||||
nsRefPtr<DelayNode> node;
|
||||
{
|
||||
// No need to keep holding the lock for the whole duration of this
|
||||
// function, since we're holding a strong reference to it, so if
|
||||
// we can obtain the reference, we will hold the node alive in
|
||||
// this function.
|
||||
MutexAutoLock lock(mStream->Engine()->NodeMutex());
|
||||
node = static_cast<DelayNode*>(mStream->Engine()->Node());
|
||||
}
|
||||
if (node) {
|
||||
if (mChange == ADDREF) {
|
||||
node->mPlayingRef.Take(node);
|
||||
} else if (mChange == RELEASE) {
|
||||
node->mPlayingRef.Drop(node);
|
||||
}
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
private:
|
||||
nsRefPtr<AudioNodeStream> mStream;
|
||||
ChangeType mChange;
|
||||
};
|
||||
|
||||
public:
|
||||
DelayNodeEngine(AudioNode* aNode, AudioDestinationNode* aDestination)
|
||||
: AudioNodeEngine(aNode)
|
||||
|
@ -9,7 +9,6 @@
|
||||
|
||||
#include "AudioNode.h"
|
||||
#include "AudioParam.h"
|
||||
#include "PlayingRefChangeHandler.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
@ -35,7 +34,6 @@ public:
|
||||
private:
|
||||
static void SendDelayToStream(AudioNode* aNode);
|
||||
friend class DelayNodeEngine;
|
||||
friend class PlayingRefChangeHandler<DelayNode>;
|
||||
|
||||
private:
|
||||
nsRefPtr<AudioParam> mDelay;
|
||||
|
@ -1,57 +0,0 @@
|
||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* vim:set ts=2 sw=2 sts=2 et cindent: */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#ifndef PlayingRefChangeHandler_h__
|
||||
#define PlayingRefChangeHandler_h__
|
||||
|
||||
#include "nsThreadUtils.h"
|
||||
#include "AudioNodeStream.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
template<class NodeType>
|
||||
class PlayingRefChangeHandler : public nsRunnable
|
||||
{
|
||||
public:
|
||||
enum ChangeType { ADDREF, RELEASE };
|
||||
PlayingRefChangeHandler(AudioNodeStream* aStream, ChangeType aChange)
|
||||
: mStream(aStream)
|
||||
, mChange(aChange)
|
||||
{
|
||||
}
|
||||
|
||||
NS_IMETHOD Run()
|
||||
{
|
||||
nsRefPtr<NodeType> node;
|
||||
{
|
||||
// No need to keep holding the lock for the whole duration of this
|
||||
// function, since we're holding a strong reference to it, so if
|
||||
// we can obtain the reference, we will hold the node alive in
|
||||
// this function.
|
||||
MutexAutoLock lock(mStream->Engine()->NodeMutex());
|
||||
node = static_cast<NodeType*>(mStream->Engine()->Node());
|
||||
}
|
||||
if (node) {
|
||||
if (mChange == ADDREF) {
|
||||
node->mPlayingRef.Take(node);
|
||||
} else if (mChange == RELEASE) {
|
||||
node->mPlayingRef.Drop(node);
|
||||
}
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
private:
|
||||
nsRefPtr<AudioNodeStream> mStream;
|
||||
ChangeType mChange;
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user