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:
Ehsan Akhgari 2013-07-03 22:17:25 -04:00
parent c0cfafa124
commit 8beeac4ae5
5 changed files with 36 additions and 88 deletions

View File

@ -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;

View File

@ -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;
};

View File

@ -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)

View File

@ -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;

View File

@ -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