author | Andrea Marchesini <amarchesini@mozilla.com> |
Tue, 28 Apr 2015 08:42:00 +0200 | |
changeset 241768 | 439f825c98be0a48ee3b0df9b6d1aedaad729e9d |
parent 241767 | 850cfa6fb794aae173ba2d07e0359271aa948a3c |
child 241769 | 86f56b03114ed1c4b8a606e3a6051c59774ee678 |
push id | 28669 |
push user | ryanvm@gmail.com |
push date | Thu, 30 Apr 2015 17:57:05 +0000 |
treeherder | mozilla-central@7723b15ea695 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | padenot |
bugs | 1159290 |
milestone | 40.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/dom/media/webaudio/AnalyserNode.cpp +++ b/dom/media/webaudio/AnalyserNode.cpp @@ -11,19 +11,19 @@ #include "mozilla/Mutex.h" #include "mozilla/PodOperations.h" namespace mozilla { namespace dom { NS_IMPL_ISUPPORTS_INHERITED0(AnalyserNode, AudioNode) -class AnalyserNodeEngine : public AudioNodeEngine +class AnalyserNodeEngine final : public AudioNodeEngine { - class TransferBuffer : public nsRunnable + class TransferBuffer final : public nsRunnable { public: TransferBuffer(AudioNodeStream* aStream, const AudioChunk& aChunk) : mStream(aStream) , mChunk(aChunk) { }
--- a/dom/media/webaudio/AnalyserNode.h +++ b/dom/media/webaudio/AnalyserNode.h @@ -10,17 +10,17 @@ #include "AudioNode.h" #include "FFTBlock.h" namespace mozilla { namespace dom { class AudioContext; -class AnalyserNode : public AudioNode +class AnalyserNode final : public AudioNode { public: explicit AnalyserNode(AudioContext* aContext); NS_DECL_ISUPPORTS_INHERITED virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
--- a/dom/media/webaudio/AudioBufferSourceNode.cpp +++ b/dom/media/webaudio/AudioBufferSourceNode.cpp @@ -48,21 +48,21 @@ NS_IMPL_ADDREF_INHERITED(AudioBufferSour NS_IMPL_RELEASE_INHERITED(AudioBufferSourceNode, AudioNode) /** * Media-thread playback engine for AudioBufferSourceNode. * Nothing is played until a non-null buffer has been set (via * AudioNodeStream::SetBuffer) and a non-zero mBufferEnd has been set (via * AudioNodeStream::SetInt32Parameter). */ -class AudioBufferSourceNodeEngine : public AudioNodeEngine +class AudioBufferSourceNodeEngine final : public AudioNodeEngine { public: - explicit AudioBufferSourceNodeEngine(AudioNode* aNode, - AudioDestinationNode* aDestination) : + AudioBufferSourceNodeEngine(AudioNode* aNode, + AudioDestinationNode* aDestination) : AudioNodeEngine(aNode), mStart(0.0), mBeginProcessing(0), mStop(STREAM_TIME_MAX), mResampler(nullptr), mRemainingResamplerTail(0), mBufferEnd(0), mLoopStart(0), mLoopEnd(0), mBufferSampleRate(0), mBufferPosition(0), mChannels(0), mDopplerShift(1.0f), @@ -708,22 +708,22 @@ AudioBufferSourceNode::Stop(double aWhen ns->SetStreamTimeParameter(STOP, Context(), std::max(0.0, aWhen)); } void AudioBufferSourceNode::NotifyMainThreadStateChanged() { if (mStream->IsFinished()) { - class EndedEventDispatcher : public nsRunnable + class EndedEventDispatcher final : public nsRunnable { public: explicit EndedEventDispatcher(AudioBufferSourceNode* aNode) : mNode(aNode) {} - NS_IMETHODIMP Run() + NS_IMETHODIMP Run() override { // If it's not safe to run scripts right now, schedule this to run later if (!nsContentUtils::IsSafeToRunScript()) { nsContentUtils::AddScriptRunner(this); return NS_OK; } mNode->DispatchTrustedEvent(NS_LITERAL_STRING("ended"));
--- a/dom/media/webaudio/AudioBufferSourceNode.h +++ b/dom/media/webaudio/AudioBufferSourceNode.h @@ -10,18 +10,18 @@ #include "AudioNode.h" #include "AudioBuffer.h" namespace mozilla { namespace dom { class AudioParam; -class AudioBufferSourceNode : public AudioNode, - public MainThreadMediaStreamListener +class AudioBufferSourceNode final : public AudioNode, + public MainThreadMediaStreamListener { public: explicit AudioBufferSourceNode(AudioContext* aContext); virtual void DestroyMediaStream() override { if (mStream) { mStream->RemoveMainThreadListener(this);
--- a/dom/media/webaudio/AudioDestinationNode.cpp +++ b/dom/media/webaudio/AudioDestinationNode.cpp @@ -25,17 +25,17 @@ #include "nsWidgetsCID.h" #include "mozilla/dom/Promise.h" namespace mozilla { namespace dom { static uint8_t gWebAudioOutputKey; -class OfflineDestinationNodeEngine : public AudioNodeEngine +class OfflineDestinationNodeEngine final : public AudioNodeEngine { public: typedef AutoFallibleTArray<nsAutoArrayPtr<float>, 2> InputChannels; OfflineDestinationNodeEngine(AudioDestinationNode* aNode, uint32_t aNumberOfChannels, uint32_t aLength, float aSampleRate) @@ -130,17 +130,17 @@ public: class OnCompleteTask final : public nsRunnable { public: OnCompleteTask(AudioContext* aAudioContext, AudioBuffer* aRenderedBuffer) : mAudioContext(aAudioContext) , mRenderedBuffer(aRenderedBuffer) {} - NS_IMETHOD Run() + NS_IMETHOD Run() override { nsRefPtr<OfflineAudioCompletionEvent> event = new OfflineAudioCompletionEvent(mAudioContext, nullptr, nullptr); event->InitEvent(mRenderedBuffer); mAudioContext->DispatchTrustedEvent(event); return NS_OK; } @@ -205,27 +205,27 @@ private: uint32_t mWriteIndex; uint32_t mNumberOfChannels; // How many frames the OfflineAudioContext intends to produce. uint32_t mLength; float mSampleRate; bool mBufferAllocated; }; -class InputMutedRunnable : public nsRunnable +class InputMutedRunnable final : public nsRunnable { public: InputMutedRunnable(AudioNodeStream* aStream, bool aInputMuted) : mStream(aStream) , mInputMuted(aInputMuted) { } - NS_IMETHOD Run() + NS_IMETHOD Run() override { MOZ_ASSERT(NS_IsMainThread()); nsRefPtr<AudioNode> node = mStream->Engine()->NodeMainThread(); if (node) { nsRefPtr<AudioDestinationNode> destinationNode = static_cast<AudioDestinationNode*>(node.get()); destinationNode->InputMuted(mInputMuted); @@ -233,17 +233,17 @@ public: return NS_OK; } private: nsRefPtr<AudioNodeStream> mStream; bool mInputMuted; }; -class DestinationNodeEngine : public AudioNodeEngine +class DestinationNodeEngine final : public AudioNodeEngine { public: explicit DestinationNodeEngine(AudioDestinationNode* aNode) : AudioNodeEngine(aNode) , mVolume(1.0f) , mLastInputMuted(false) { MOZ_ASSERT(aNode);
--- a/dom/media/webaudio/AudioEventTimeline.h +++ b/dom/media/webaudio/AudioEventTimeline.h @@ -16,18 +16,20 @@ #include "math.h" #include "WebAudioUtils.h" namespace mozilla { namespace dom { // This is an internal helper class and should not be used outside of this header. -struct AudioTimelineEvent { - enum Type : uint32_t { +struct AudioTimelineEvent final +{ + enum Type : uint32_t + { SetValue, LinearRamp, ExponentialRamp, SetTarget, SetValueCurve }; AudioTimelineEvent(Type aType, double aTime, float aValue, double aTimeConstant = 0.0,
--- a/dom/media/webaudio/AudioNode.cpp +++ b/dom/media/webaudio/AudioNode.cpp @@ -320,17 +320,18 @@ AudioNode::Disconnect(uint32_t aOutput, return; } // An upstream node may be starting to play on the graph thread, and the // engine for a downstream node may be sending a PlayingRefChangeHandler // ADDREF message to this (main) thread. Wait for a round trip before // releasing nodes, to give engines receiving sound now time to keep their // nodes alive. - class RunnableRelease : public nsRunnable { + class RunnableRelease final : public nsRunnable + { public: explicit RunnableRelease(already_AddRefed<AudioNode> aNode) : mNode(aNode) {} NS_IMETHODIMP Run() override { mNode = nullptr; return NS_OK;
--- a/dom/media/webaudio/AudioNode.h +++ b/dom/media/webaudio/AudioNode.h @@ -69,17 +69,18 @@ public: // This should be idempotent (safe to call multiple times). virtual void DestroyMediaStream(); NS_DECL_ISUPPORTS_INHERITED NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(AudioNode, DOMEventTargetHelper) - virtual AudioBufferSourceNode* AsAudioBufferSourceNode() { + virtual AudioBufferSourceNode* AsAudioBufferSourceNode() + { return nullptr; } AudioContext* GetParentObject() const { return mContext; } @@ -132,17 +133,18 @@ public: return mChannelInterpretation; } void SetChannelInterpretationValue(ChannelInterpretation aMode) { mChannelInterpretation = aMode; SendChannelMixingParametersToStream(); } - struct InputNode { + struct InputNode final + { ~InputNode() { if (mStreamPort) { mStreamPort->Destroy(); } } size_t SizeOfExcludingThis(MallocSizeOf aMallocSizeOf) const
--- a/dom/media/webaudio/AudioNodeEngine.h +++ b/dom/media/webaudio/AudioNodeEngine.h @@ -22,27 +22,29 @@ class DelayNodeEngine; class AudioNodeStream; /** * This class holds onto a set of immutable channel buffers. The storage * for the buffers must be malloced, but the buffer pointers and the malloc * pointers can be different (e.g. if the buffers are contained inside * some malloced object). */ -class ThreadSharedFloatArrayBufferList : public ThreadSharedObject { +class ThreadSharedFloatArrayBufferList final : public ThreadSharedObject +{ public: /** * Construct with null data. */ explicit ThreadSharedFloatArrayBufferList(uint32_t aCount) { mContents.SetLength(aCount); } - struct Storage { + struct Storage final + { Storage() : mDataToFree(nullptr), mFree(nullptr), mSampleData(nullptr) {} ~Storage() { if (mFree) { mFree(mDataToFree); @@ -229,17 +231,18 @@ AudioBlockPanStereoToStereo(const float */ float AudioBufferSumOfSquares(const float* aInput, uint32_t aLength); /** * All methods of this class and its subclasses are called on the * MediaStreamGraph thread. */ -class AudioNodeEngine { +class AudioNodeEngine +{ public: // This should be compatible with AudioNodeStream::OutputChunks. typedef nsAutoTArray<AudioChunk, 1> OutputChunks; explicit AudioNodeEngine(dom::AudioNode* aNode) : mNode(aNode) , mNodeMutex("AudioNodeEngine::mNodeMutex") , mInputCount(aNode ? aNode->NumberOfInputs() : 1)
--- a/dom/media/webaudio/AudioNodeExternalInputStream.h +++ b/dom/media/webaudio/AudioNodeExternalInputStream.h @@ -13,24 +13,27 @@ namespace mozilla { /** * This is a MediaStream implementation that acts for a Web Audio node but * unlike other AudioNodeStreams, supports any kind of MediaStream as an * input --- handling any number of audio tracks and handling blocking of * the input MediaStream. */ -class AudioNodeExternalInputStream : public AudioNodeStream { +class AudioNodeExternalInputStream final : public AudioNodeStream +{ public: - AudioNodeExternalInputStream(AudioNodeEngine* aEngine, TrackRate aSampleRate, uint32_t aContextId); + AudioNodeExternalInputStream(AudioNodeEngine* aEngine, TrackRate aSampleRate, + uint32_t aContextId); protected: ~AudioNodeExternalInputStream(); public: - virtual void ProcessInput(GraphTime aFrom, GraphTime aTo, uint32_t aFlags) override; + virtual void ProcessInput(GraphTime aFrom, GraphTime aTo, + uint32_t aFlags) override; private: /** * Determines if this is enabled or not. Disabled nodes produce silence. * This node becomes disabled if the document principal does not subsume the * DOMMediaStream principal. */ bool IsEnabled();
--- a/dom/media/webaudio/AudioNodeStream.cpp +++ b/dom/media/webaudio/AudioNodeStream.cpp @@ -90,23 +90,25 @@ AudioNodeStream::SizeOfAudioNodesIncludi mEngine->SizeOfIncludingThis(aMallocSizeOf, aUsage); } } void AudioNodeStream::SetStreamTimeParameter(uint32_t aIndex, AudioContext* aContext, double aStreamTime) { - class Message : public ControlMessage { + class Message final : public ControlMessage + { public: Message(AudioNodeStream* aStream, uint32_t aIndex, MediaStream* aRelativeToStream, double aStreamTime) : ControlMessage(aStream), mStreamTime(aStreamTime), - mRelativeToStream(aRelativeToStream), mIndex(aIndex) {} - virtual void Run() + mRelativeToStream(aRelativeToStream), mIndex(aIndex) + {} + virtual void Run() override { static_cast<AudioNodeStream*>(mStream)-> SetStreamTimeParameterImpl(mIndex, mRelativeToStream, mStreamTime); } double mStreamTime; MediaStream* mRelativeToStream; uint32_t mIndex; }; @@ -122,151 +124,163 @@ AudioNodeStream::SetStreamTimeParameterI { StreamTime ticks = TicksFromDestinationTime(aRelativeToStream, aStreamTime); mEngine->SetStreamTimeParameter(aIndex, ticks); } void AudioNodeStream::SetDoubleParameter(uint32_t aIndex, double aValue) { - class Message : public ControlMessage { + class Message final : public ControlMessage + { public: Message(AudioNodeStream* aStream, uint32_t aIndex, double aValue) - : ControlMessage(aStream), mValue(aValue), mIndex(aIndex) {} - virtual void Run() + : ControlMessage(aStream), mValue(aValue), mIndex(aIndex) + {} + virtual void Run() override { static_cast<AudioNodeStream*>(mStream)->Engine()-> SetDoubleParameter(mIndex, mValue); } double mValue; uint32_t mIndex; }; GraphImpl()->AppendMessage(new Message(this, aIndex, aValue)); } void AudioNodeStream::SetInt32Parameter(uint32_t aIndex, int32_t aValue) { - class Message : public ControlMessage { + class Message final : public ControlMessage + { public: Message(AudioNodeStream* aStream, uint32_t aIndex, int32_t aValue) - : ControlMessage(aStream), mValue(aValue), mIndex(aIndex) {} - virtual void Run() + : ControlMessage(aStream), mValue(aValue), mIndex(aIndex) + {} + virtual void Run() override { static_cast<AudioNodeStream*>(mStream)->Engine()-> SetInt32Parameter(mIndex, mValue); } int32_t mValue; uint32_t mIndex; }; GraphImpl()->AppendMessage(new Message(this, aIndex, aValue)); } void AudioNodeStream::SetTimelineParameter(uint32_t aIndex, const AudioParamTimeline& aValue) { - class Message : public ControlMessage { + class Message final : public ControlMessage + { public: Message(AudioNodeStream* aStream, uint32_t aIndex, const AudioParamTimeline& aValue) : ControlMessage(aStream), mValue(aValue), mSampleRate(aStream->SampleRate()), - mIndex(aIndex) {} - virtual void Run() + mIndex(aIndex) + {} + virtual void Run() override { static_cast<AudioNodeStream*>(mStream)->Engine()-> SetTimelineParameter(mIndex, mValue, mSampleRate); } AudioParamTimeline mValue; TrackRate mSampleRate; uint32_t mIndex; }; GraphImpl()->AppendMessage(new Message(this, aIndex, aValue)); } void AudioNodeStream::SetThreeDPointParameter(uint32_t aIndex, const ThreeDPoint& aValue) { - class Message : public ControlMessage { + class Message final : public ControlMessage + { public: Message(AudioNodeStream* aStream, uint32_t aIndex, const ThreeDPoint& aValue) - : ControlMessage(aStream), mValue(aValue), mIndex(aIndex) {} - virtual void Run() + : ControlMessage(aStream), mValue(aValue), mIndex(aIndex) + {} + virtual void Run() override { static_cast<AudioNodeStream*>(mStream)->Engine()-> SetThreeDPointParameter(mIndex, mValue); } ThreeDPoint mValue; uint32_t mIndex; }; GraphImpl()->AppendMessage(new Message(this, aIndex, aValue)); } void AudioNodeStream::SetBuffer(already_AddRefed<ThreadSharedFloatArrayBufferList>&& aBuffer) { - class Message : public ControlMessage { + class Message final : public ControlMessage + { public: Message(AudioNodeStream* aStream, already_AddRefed<ThreadSharedFloatArrayBufferList>& aBuffer) - : ControlMessage(aStream), mBuffer(aBuffer) {} - virtual void Run() + : ControlMessage(aStream), mBuffer(aBuffer) + {} + virtual void Run() override { static_cast<AudioNodeStream*>(mStream)->Engine()-> SetBuffer(mBuffer.forget()); } nsRefPtr<ThreadSharedFloatArrayBufferList> mBuffer; }; GraphImpl()->AppendMessage(new Message(this, aBuffer)); } void AudioNodeStream::SetRawArrayData(nsTArray<float>& aData) { - class Message : public ControlMessage { + class Message final : public ControlMessage + { public: Message(AudioNodeStream* aStream, nsTArray<float>& aData) : ControlMessage(aStream) { mData.SwapElements(aData); } - virtual void Run() + virtual void Run() override { static_cast<AudioNodeStream*>(mStream)->Engine()->SetRawArrayData(mData); } nsTArray<float> mData; }; GraphImpl()->AppendMessage(new Message(this, aData)); } void AudioNodeStream::SetChannelMixingParameters(uint32_t aNumberOfChannels, ChannelCountMode aChannelCountMode, ChannelInterpretation aChannelInterpretation) { - class Message : public ControlMessage { + class Message final : public ControlMessage + { public: Message(AudioNodeStream* aStream, uint32_t aNumberOfChannels, ChannelCountMode aChannelCountMode, ChannelInterpretation aChannelInterpretation) : ControlMessage(aStream), mNumberOfChannels(aNumberOfChannels), mChannelCountMode(aChannelCountMode), mChannelInterpretation(aChannelInterpretation) {} - virtual void Run() + virtual void Run() override { static_cast<AudioNodeStream*>(mStream)-> SetChannelMixingParametersImpl(mNumberOfChannels, mChannelCountMode, mChannelInterpretation); } uint32_t mNumberOfChannels; ChannelCountMode mChannelCountMode; ChannelInterpretation mChannelInterpretation; @@ -275,21 +289,23 @@ AudioNodeStream::SetChannelMixingParamet GraphImpl()->AppendMessage(new Message(this, aNumberOfChannels, aChannelCountMode, aChannelInterpretation)); } void AudioNodeStream::SetPassThrough(bool aPassThrough) { - class Message : public ControlMessage { + class Message final : public ControlMessage + { public: Message(AudioNodeStream* aStream, bool aPassThrough) - : ControlMessage(aStream), mPassThrough(aPassThrough) {} - virtual void Run() + : ControlMessage(aStream), mPassThrough(aPassThrough) + {} + virtual void Run() override { static_cast<AudioNodeStream*>(mStream)->mPassThrough = mPassThrough; } bool mPassThrough; }; GraphImpl()->AppendMessage(new Message(this, aPassThrough)); }
--- a/dom/media/webaudio/AudioNodeStream.h +++ b/dom/media/webaudio/AudioNodeStream.h @@ -26,17 +26,18 @@ class AudioNodeEngine; * The start time of the AudioTrack is aligned to the start time of the * AudioContext's destination node stream, plus some multiple of BLOCK_SIZE * samples. * * An AudioNodeStream has an AudioNodeEngine plugged into it that does the * actual audio processing. AudioNodeStream contains the glue code that * integrates audio processing with the MediaStreamGraph. */ -class AudioNodeStream : public ProcessedMediaStream { +class AudioNodeStream : public ProcessedMediaStream +{ typedef dom::ChannelCountMode ChannelCountMode; typedef dom::ChannelInterpretation ChannelInterpretation; public: typedef mozilla::dom::AudioContext AudioContext; enum { AUDIO_TRACK = 1 };
--- a/dom/media/webaudio/AudioProcessingEvent.h +++ b/dom/media/webaudio/AudioProcessingEvent.h @@ -9,17 +9,17 @@ #include "AudioBuffer.h" #include "ScriptProcessorNode.h" #include "mozilla/dom/Event.h" namespace mozilla { namespace dom { -class AudioProcessingEvent : public Event +class AudioProcessingEvent final : public Event { public: AudioProcessingEvent(ScriptProcessorNode* aOwner, nsPresContext* aPresContext, WidgetEvent* aEvent); NS_DECL_ISUPPORTS_INHERITED NS_FORWARD_TO_EVENT
--- a/dom/media/webaudio/BiquadFilterNode.cpp +++ b/dom/media/webaudio/BiquadFilterNode.cpp @@ -68,17 +68,17 @@ SetParamsOnBiquad(WebCore::Biquad& aBiqu aBiquad.setAllpassParams(normalizedFrequency, aQ); break; default: NS_NOTREACHED("We should never see the alternate names here"); break; } } -class BiquadFilterNodeEngine : public AudioNodeEngine +class BiquadFilterNodeEngine final : public AudioNodeEngine { public: BiquadFilterNodeEngine(AudioNode* aNode, AudioDestinationNode* aDestination) : AudioNodeEngine(aNode) , mSource(nullptr) , mDestination(static_cast<AudioNodeStream*> (aDestination->Stream())) // Keep the default values in sync with the default values in // BiquadFilterNode::BiquadFilterNode
--- a/dom/media/webaudio/BiquadFilterNode.h +++ b/dom/media/webaudio/BiquadFilterNode.h @@ -11,17 +11,17 @@ #include "AudioParam.h" #include "mozilla/dom/BiquadFilterNodeBinding.h" namespace mozilla { namespace dom { class AudioContext; -class BiquadFilterNode : public AudioNode +class BiquadFilterNode final : public AudioNode { public: explicit BiquadFilterNode(AudioContext* aContext); NS_DECL_ISUPPORTS_INHERITED NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(BiquadFilterNode, AudioNode) virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
--- a/dom/media/webaudio/BufferDecoder.h +++ b/dom/media/webaudio/BufferDecoder.h @@ -13,17 +13,17 @@ #include "mozilla/ReentrantMonitor.h" namespace mozilla { /** * This class provides a decoder object which decodes a media file that lives in * a memory buffer. */ -class BufferDecoder : public AbstractMediaDecoder +class BufferDecoder final : public AbstractMediaDecoder { public: // This class holds a weak pointer to MediaResource. It's the responsibility // of the caller to manage the memory of the MediaResource object. explicit BufferDecoder(MediaResource* aResource); NS_DECL_THREADSAFE_ISUPPORTS
--- a/dom/media/webaudio/ChannelMergerNode.cpp +++ b/dom/media/webaudio/ChannelMergerNode.cpp @@ -9,17 +9,17 @@ #include "AudioNodeEngine.h" #include "AudioNodeStream.h" namespace mozilla { namespace dom { NS_IMPL_ISUPPORTS_INHERITED0(ChannelMergerNode, AudioNode) -class ChannelMergerNodeEngine : public AudioNodeEngine +class ChannelMergerNodeEngine final : public AudioNodeEngine { public: explicit ChannelMergerNodeEngine(ChannelMergerNode* aNode) : AudioNodeEngine(aNode) { MOZ_ASSERT(NS_IsMainThread()); }
--- a/dom/media/webaudio/ChannelMergerNode.h +++ b/dom/media/webaudio/ChannelMergerNode.h @@ -9,17 +9,17 @@ #include "AudioNode.h" namespace mozilla { namespace dom { class AudioContext; -class ChannelMergerNode : public AudioNode +class ChannelMergerNode final : public AudioNode { public: ChannelMergerNode(AudioContext* aContext, uint16_t aInputCount); NS_DECL_ISUPPORTS_INHERITED virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
--- a/dom/media/webaudio/ChannelSplitterNode.cpp +++ b/dom/media/webaudio/ChannelSplitterNode.cpp @@ -9,17 +9,17 @@ #include "AudioNodeEngine.h" #include "AudioNodeStream.h" namespace mozilla { namespace dom { NS_IMPL_ISUPPORTS_INHERITED0(ChannelSplitterNode, AudioNode) -class ChannelSplitterNodeEngine : public AudioNodeEngine +class ChannelSplitterNodeEngine final : public AudioNodeEngine { public: explicit ChannelSplitterNodeEngine(ChannelSplitterNode* aNode) : AudioNodeEngine(aNode) { MOZ_ASSERT(NS_IsMainThread()); }
--- a/dom/media/webaudio/ChannelSplitterNode.h +++ b/dom/media/webaudio/ChannelSplitterNode.h @@ -9,17 +9,17 @@ #include "AudioNode.h" namespace mozilla { namespace dom { class AudioContext; -class ChannelSplitterNode : public AudioNode +class ChannelSplitterNode final : public AudioNode { public: ChannelSplitterNode(AudioContext* aContext, uint16_t aOutputCount); NS_DECL_ISUPPORTS_INHERITED virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
--- a/dom/media/webaudio/ConvolverNode.cpp +++ b/dom/media/webaudio/ConvolverNode.cpp @@ -17,17 +17,17 @@ namespace dom { NS_IMPL_CYCLE_COLLECTION_INHERITED(ConvolverNode, AudioNode, mBuffer) NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(ConvolverNode) NS_INTERFACE_MAP_END_INHERITING(AudioNode) NS_IMPL_ADDREF_INHERITED(ConvolverNode, AudioNode) NS_IMPL_RELEASE_INHERITED(ConvolverNode, AudioNode) -class ConvolverNodeEngine : public AudioNodeEngine +class ConvolverNodeEngine final : public AudioNodeEngine { typedef PlayingRefChangeHandler PlayingRefChanged; public: ConvolverNodeEngine(AudioNode* aNode, bool aNormalize) : AudioNodeEngine(aNode) , mBufferLength(0) , mLeftOverData(INT32_MIN) , mSampleRate(0.0f)
--- a/dom/media/webaudio/ConvolverNode.h +++ b/dom/media/webaudio/ConvolverNode.h @@ -8,17 +8,17 @@ #define ConvolverNode_h_ #include "AudioNode.h" #include "AudioBuffer.h" namespace mozilla { namespace dom { -class ConvolverNode : public AudioNode +class ConvolverNode final : public AudioNode { public: explicit ConvolverNode(AudioContext* aContext); NS_DECL_ISUPPORTS_INHERITED NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(ConvolverNode, AudioNode); virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
--- a/dom/media/webaudio/DelayBuffer.h +++ b/dom/media/webaudio/DelayBuffer.h @@ -8,17 +8,18 @@ #define DelayBuffer_h_ #include "nsTArray.h" #include "AudioSegment.h" #include "mozilla/dom/AudioNodeBinding.h" // for ChannelInterpretation namespace mozilla { -class DelayBuffer { +class DelayBuffer final +{ typedef dom::ChannelInterpretation ChannelInterpretation; public: // See WebAudioUtils::ComputeSmoothingRate() for frame to frame exponential // |smoothingRate| multiplier. DelayBuffer(double aMaxDelayTicks, double aSmoothingRate) : mSmoothingRate(aSmoothingRate) , mCurrentDelay(-1.0)
--- a/dom/media/webaudio/DelayNode.cpp +++ b/dom/media/webaudio/DelayNode.cpp @@ -20,17 +20,17 @@ NS_IMPL_CYCLE_COLLECTION_INHERITED(Delay mDelay) NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(DelayNode) NS_INTERFACE_MAP_END_INHERITING(AudioNode) NS_IMPL_ADDREF_INHERITED(DelayNode, AudioNode) NS_IMPL_RELEASE_INHERITED(DelayNode, AudioNode) -class DelayNodeEngine : public AudioNodeEngine +class DelayNodeEngine final : public AudioNodeEngine { typedef PlayingRefChangeHandler PlayingRefChanged; public: DelayNodeEngine(AudioNode* aNode, AudioDestinationNode* aDestination, double aMaxDelayTicks) : AudioNodeEngine(aNode) , mSource(nullptr) , mDestination(static_cast<AudioNodeStream*> (aDestination->Stream()))
--- a/dom/media/webaudio/DelayNode.h +++ b/dom/media/webaudio/DelayNode.h @@ -10,17 +10,17 @@ #include "AudioNode.h" #include "AudioParam.h" namespace mozilla { namespace dom { class AudioContext; -class DelayNode : public AudioNode +class DelayNode final : public AudioNode { public: DelayNode(AudioContext* aContext, double aMaxDelay); NS_DECL_ISUPPORTS_INHERITED NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(DelayNode, AudioNode) virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
--- a/dom/media/webaudio/DynamicsCompressorNode.cpp +++ b/dom/media/webaudio/DynamicsCompressorNode.cpp @@ -25,17 +25,17 @@ NS_IMPL_CYCLE_COLLECTION_INHERITED(Dynam mRelease) NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(DynamicsCompressorNode) NS_INTERFACE_MAP_END_INHERITING(AudioNode) NS_IMPL_ADDREF_INHERITED(DynamicsCompressorNode, AudioNode) NS_IMPL_RELEASE_INHERITED(DynamicsCompressorNode, AudioNode) -class DynamicsCompressorNodeEngine : public AudioNodeEngine +class DynamicsCompressorNodeEngine final : public AudioNodeEngine { public: explicit DynamicsCompressorNodeEngine(AudioNode* aNode, AudioDestinationNode* aDestination) : AudioNodeEngine(aNode) , mSource(nullptr) , mDestination(static_cast<AudioNodeStream*> (aDestination->Stream())) // Keep the default value in sync with the default value in @@ -146,26 +146,26 @@ public: return aMallocSizeOf(this) + SizeOfExcludingThis(aMallocSizeOf); } private: void SendReductionParamToMainThread(AudioNodeStream* aStream, float aReduction) { MOZ_ASSERT(!NS_IsMainThread()); - class Command : public nsRunnable + class Command final : public nsRunnable { public: Command(AudioNodeStream* aStream, float aReduction) : mStream(aStream) , mReduction(aReduction) { } - NS_IMETHODIMP Run() + NS_IMETHOD Run() override { nsRefPtr<DynamicsCompressorNode> 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());
--- a/dom/media/webaudio/DynamicsCompressorNode.h +++ b/dom/media/webaudio/DynamicsCompressorNode.h @@ -10,17 +10,17 @@ #include "AudioNode.h" #include "AudioParam.h" namespace mozilla { namespace dom { class AudioContext; -class DynamicsCompressorNode : public AudioNode +class DynamicsCompressorNode final : public AudioNode { public: explicit DynamicsCompressorNode(AudioContext* aContext); NS_DECL_ISUPPORTS_INHERITED NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(DynamicsCompressorNode, AudioNode) virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
--- a/dom/media/webaudio/FFTBlock.h +++ b/dom/media/webaudio/FFTBlock.h @@ -11,17 +11,18 @@ #include "AudioNodeEngine.h" #include "kiss_fft/kiss_fftr.h" namespace mozilla { // This class defines an FFT block, loosely modeled after Blink's FFTFrame // class to make sharing code with Blink easy. // Currently it's implemented on top of KissFFT on all platforms. -class FFTBlock { +class FFTBlock final +{ public: explicit FFTBlock(uint32_t aFFTSize) : mFFT(nullptr) , mIFFT(nullptr) , mFFTSize(aFFTSize) { MOZ_COUNT_CTOR(FFTBlock); mOutputBuffer.SetLength(aFFTSize / 2 + 1);
--- a/dom/media/webaudio/GainNode.cpp +++ b/dom/media/webaudio/GainNode.cpp @@ -18,17 +18,17 @@ NS_IMPL_CYCLE_COLLECTION_INHERITED(GainN mGain) NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(GainNode) NS_INTERFACE_MAP_END_INHERITING(AudioNode) NS_IMPL_ADDREF_INHERITED(GainNode, AudioNode) NS_IMPL_RELEASE_INHERITED(GainNode, AudioNode) -class GainNodeEngine : public AudioNodeEngine +class GainNodeEngine final : public AudioNodeEngine { public: GainNodeEngine(AudioNode* aNode, AudioDestinationNode* aDestination) : AudioNodeEngine(aNode) , mSource(nullptr) , mDestination(static_cast<AudioNodeStream*> (aDestination->Stream())) // Keep the default value in sync with the default value in GainNode::GainNode. , mGain(1.f)
--- a/dom/media/webaudio/GainNode.h +++ b/dom/media/webaudio/GainNode.h @@ -10,17 +10,17 @@ #include "AudioNode.h" #include "AudioParam.h" namespace mozilla { namespace dom { class AudioContext; -class GainNode : public AudioNode +class GainNode final : public AudioNode { public: explicit GainNode(AudioContext* aContext); NS_DECL_ISUPPORTS_INHERITED NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(GainNode, AudioNode) virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
--- a/dom/media/webaudio/MediaBufferDecoder.cpp +++ b/dom/media/webaudio/MediaBufferDecoder.cpp @@ -45,17 +45,17 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN(WebAudioDecodeJob) NS_IMPL_CYCLE_COLLECTION_TRACE_END NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(WebAudioDecodeJob, AddRef) NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(WebAudioDecodeJob, Release) using namespace dom; -class ReportResultTask : public nsRunnable +class ReportResultTask final : public nsRunnable { public: ReportResultTask(WebAudioDecodeJob& aDecodeJob, WebAudioDecodeJob::ResultFn aFunction, WebAudioDecodeJob::ErrorCode aErrorCode) : mDecodeJob(aDecodeJob) , mFunction(aFunction) , mErrorCode(aErrorCode) @@ -77,23 +77,24 @@ private: // Therefore, it is not safe to do anything fancy with it in this class. // Really, this class is only used because nsRunnableMethod doesn't support // methods accepting arguments. WebAudioDecodeJob& mDecodeJob; WebAudioDecodeJob::ResultFn mFunction; WebAudioDecodeJob::ErrorCode mErrorCode; }; -enum class PhaseEnum : int { +enum class PhaseEnum : int +{ Decode, AllocateBuffer, Done }; -class MediaDecodeTask : public nsRunnable +class MediaDecodeTask final : public nsRunnable { public: MediaDecodeTask(const char* aContentType, uint8_t* aBuffer, uint32_t aLength, WebAudioDecodeJob& aDecodeJob) : mContentType(aContentType) , mBuffer(aBuffer) , mLength(aLength) @@ -209,17 +210,18 @@ MediaDecodeTask::CreateReader() if (!mDecoderReader->EnsureTaskQueue()) { return false; } return true; } -class AutoResampler { +class AutoResampler final +{ public: AutoResampler() : mResampler(nullptr) {} ~AutoResampler() { if (mResampler) { speex_resampler_destroy(mResampler);
--- a/dom/media/webaudio/MediaElementAudioSourceNode.h +++ b/dom/media/webaudio/MediaElementAudioSourceNode.h @@ -7,17 +7,17 @@ #ifndef MediaElementAudioSourceNode_h_ #define MediaElementAudioSourceNode_h_ #include "MediaStreamAudioSourceNode.h" namespace mozilla { namespace dom { -class MediaElementAudioSourceNode : public MediaStreamAudioSourceNode +class MediaElementAudioSourceNode final : public MediaStreamAudioSourceNode { public: MediaElementAudioSourceNode(AudioContext* aContext, DOMMediaStream* aStream); virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override; virtual const char* NodeType() const override
--- a/dom/media/webaudio/MediaStreamAudioDestinationNode.h +++ b/dom/media/webaudio/MediaStreamAudioDestinationNode.h @@ -7,17 +7,17 @@ #ifndef MediaStreamAudioDestinationNode_h_ #define MediaStreamAudioDestinationNode_h_ #include "AudioNode.h" namespace mozilla { namespace dom { -class MediaStreamAudioDestinationNode : public AudioNode +class MediaStreamAudioDestinationNode final : public AudioNode { public: explicit MediaStreamAudioDestinationNode(AudioContext* aContext); NS_DECL_ISUPPORTS_INHERITED NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(MediaStreamAudioDestinationNode, AudioNode) virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
--- a/dom/media/webaudio/MediaStreamAudioSourceNode.h +++ b/dom/media/webaudio/MediaStreamAudioSourceNode.h @@ -10,17 +10,17 @@ #include "AudioNode.h" #include "DOMMediaStream.h" #include "AudioNodeEngine.h" namespace mozilla { namespace dom { -class MediaStreamAudioSourceNodeEngine : public AudioNodeEngine +class MediaStreamAudioSourceNodeEngine final : public AudioNodeEngine { public: explicit MediaStreamAudioSourceNodeEngine(AudioNode* aNode) : AudioNodeEngine(aNode), mEnabled(false) {} bool IsEnabled() const { return mEnabled; } enum Parameters { ENABLE
--- a/dom/media/webaudio/OfflineAudioCompletionEvent.h +++ b/dom/media/webaudio/OfflineAudioCompletionEvent.h @@ -10,17 +10,17 @@ #include "AudioBuffer.h" #include "mozilla/dom/Event.h" namespace mozilla { namespace dom { class AudioContext; -class OfflineAudioCompletionEvent : public Event +class OfflineAudioCompletionEvent final : public Event { public: OfflineAudioCompletionEvent(AudioContext* aOwner, nsPresContext* aPresContext, WidgetEvent* aEvent); NS_DECL_ISUPPORTS_INHERITED NS_FORWARD_TO_EVENT
--- a/dom/media/webaudio/OscillatorNode.cpp +++ b/dom/media/webaudio/OscillatorNode.cpp @@ -18,17 +18,17 @@ NS_IMPL_CYCLE_COLLECTION_INHERITED(Oscil mPeriodicWave, mFrequency, mDetune) NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(OscillatorNode) NS_INTERFACE_MAP_END_INHERITING(AudioNode) NS_IMPL_ADDREF_INHERITED(OscillatorNode, AudioNode) NS_IMPL_RELEASE_INHERITED(OscillatorNode, AudioNode) -class OscillatorNodeEngine : public AudioNodeEngine +class OscillatorNodeEngine final : public AudioNodeEngine { public: OscillatorNodeEngine(AudioNode* aNode, AudioDestinationNode* aDestination) : AudioNodeEngine(aNode) , mSource(nullptr) , mDestination(static_cast<AudioNodeStream*> (aDestination->Stream())) , mStart(-1) , mStop(STREAM_TIME_MAX) @@ -510,22 +510,22 @@ OscillatorNode::Stop(double aWhen, Error ns->SetStreamTimeParameter(OscillatorNodeEngine::STOP, Context(), std::max(0.0, aWhen)); } void OscillatorNode::NotifyMainThreadStateChanged() { if (mStream->IsFinished()) { - class EndedEventDispatcher : public nsRunnable + class EndedEventDispatcher final : public nsRunnable { public: explicit EndedEventDispatcher(OscillatorNode* aNode) : mNode(aNode) {} - NS_IMETHODIMP Run() + NS_IMETHOD Run() override { // If it's not safe to run scripts right now, schedule this to run later if (!nsContentUtils::IsSafeToRunScript()) { nsContentUtils::AddScriptRunner(this); return NS_OK; } mNode->DispatchTrustedEvent(NS_LITERAL_STRING("ended"));
--- a/dom/media/webaudio/OscillatorNode.h +++ b/dom/media/webaudio/OscillatorNode.h @@ -13,18 +13,18 @@ #include "mozilla/dom/OscillatorNodeBinding.h" #include "mozilla/Preferences.h" namespace mozilla { namespace dom { class AudioContext; -class OscillatorNode : public AudioNode, - public MainThreadMediaStreamListener +class OscillatorNode final : public AudioNode, + public MainThreadMediaStreamListener { public: explicit OscillatorNode(AudioContext* aContext); NS_DECL_ISUPPORTS_INHERITED NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(OscillatorNode, AudioNode) virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
--- a/dom/media/webaudio/PannerNode.cpp +++ b/dom/media/webaudio/PannerNode.cpp @@ -34,17 +34,17 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(PannerNode) NS_INTERFACE_MAP_END_INHERITING(AudioNode) NS_IMPL_ADDREF_INHERITED(PannerNode, AudioNode) NS_IMPL_RELEASE_INHERITED(PannerNode, AudioNode) -class PannerNodeEngine : public AudioNodeEngine +class PannerNodeEngine final : public AudioNodeEngine { public: explicit PannerNodeEngine(AudioNode* aNode) : AudioNodeEngine(aNode) // Please keep these default values consistent with PannerNode::PannerNode below. , mPanningModelFunction(&PannerNodeEngine::EqualPowerPanningFunction) , mDistanceModelFunction(&PannerNodeEngine::InverseGainFunction) , mPosition()
--- a/dom/media/webaudio/PannerNode.h +++ b/dom/media/webaudio/PannerNode.h @@ -16,18 +16,18 @@ #include <set> namespace mozilla { namespace dom { class AudioContext; class AudioBufferSourceNode; -class PannerNode : public AudioNode, - public SupportsWeakPtr<PannerNode> +class PannerNode final : public AudioNode, + public SupportsWeakPtr<PannerNode> { public: MOZ_DECLARE_WEAKREFERENCE_TYPENAME(PannerNode) explicit PannerNode(AudioContext* aContext); virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override; virtual void DestroyMediaStream() override;
--- a/dom/media/webaudio/PlayingRefChangeHandler.h +++ b/dom/media/webaudio/PlayingRefChangeHandler.h @@ -8,17 +8,17 @@ #define PlayingRefChangeHandler_h__ #include "nsThreadUtils.h" #include "AudioNodeStream.h" namespace mozilla { namespace dom { -class PlayingRefChangeHandler : public nsRunnable +class PlayingRefChangeHandler final : public nsRunnable { public: enum ChangeType { ADDREF, RELEASE }; PlayingRefChangeHandler(AudioNodeStream* aStream, ChangeType aChange) : mStream(aStream) , mChange(aChange) { }
--- a/dom/media/webaudio/ReportDecodeResultTask.h +++ b/dom/media/webaudio/ReportDecodeResultTask.h @@ -7,17 +7,17 @@ #ifndef ReportDecodeResultTask_h_ #define ReportDecodeResultTask_h_ #include "mozilla/Attributes.h" #include "MediaBufferDecoder.h" namespace mozilla { -class ReportDecodeResultTask : public nsRunnable +class ReportDecodeResultTask final : public nsRunnable { public: ReportDecodeResultTask(DecodeJob& aDecodeJob, DecodeJob::ResultFn aFunction) : mDecodeJob(aDecodeJob) , mFunction(aFunction) { MOZ_ASSERT(aFunction);
--- a/dom/media/webaudio/ScriptProcessorNode.cpp +++ b/dom/media/webaudio/ScriptProcessorNode.cpp @@ -23,20 +23,20 @@ namespace dom { // The maximum latency, in seconds, that we can live with before dropping // buffers. static const float MAX_LATENCY_S = 0.5; NS_IMPL_ISUPPORTS_INHERITED0(ScriptProcessorNode, AudioNode) // This class manages a queue of output buffers shared between // the main thread and the Media Stream Graph thread. -class SharedBuffers +class SharedBuffers final { private: - class OutputQueue + class OutputQueue final { public: explicit OutputQueue(const char* aName) : mMutex(aName) {} size_t SizeOfExcludingThis(MallocSizeOf aMallocSizeOf) const { @@ -232,17 +232,17 @@ private: float mLatency; // This is the time at which we last produced a buffer, to detect if the main // thread has been blocked. TimeStamp mLastEventTime; // True if we should be dropping buffers. bool mDroppingBuffers; }; -class ScriptProcessorNodeEngine : public AudioNodeEngine +class ScriptProcessorNodeEngine final : public AudioNodeEngine { public: typedef nsAutoTArray<nsAutoArrayPtr<float>, 2> InputChannels; ScriptProcessorNodeEngine(ScriptProcessorNode* aNode, AudioDestinationNode* aDestination, uint32_t aBufferSize, uint32_t aNumberOfInputChannels) @@ -356,17 +356,17 @@ private: // Add the duration of the current sample playbackTick += WEBAUDIO_BLOCK_SIZE; // Add the delay caused by the main thread playbackTick += mSharedBuffers->DelaySoFar(); // Compute the playback time in the coordinate system of the destination double playbackTime = mSource->DestinationTimeFromTicks(mDestination, playbackTick); - class Command : public nsRunnable + class Command final : public nsRunnable { public: Command(AudioNodeStream* aStream, InputChannels& aInputChannels, double aPlaybackTime, bool aNullInput) : mStream(aStream) , mPlaybackTime(aPlaybackTime) @@ -375,17 +375,17 @@ private: mInputChannels.SetLength(aInputChannels.Length()); if (!aNullInput) { for (uint32_t i = 0; i < mInputChannels.Length(); ++i) { mInputChannels[i] = aInputChannels[i].forget(); } } } - NS_IMETHODIMP Run() + NS_IMETHOD Run() override { nsRefPtr<ScriptProcessorNode> node = static_cast<ScriptProcessorNode*> (mStream->Engine()->NodeMainThread()); if (!node) { return NS_OK; } AudioContext* context = node->Context(); if (!context) {
--- a/dom/media/webaudio/ScriptProcessorNode.h +++ b/dom/media/webaudio/ScriptProcessorNode.h @@ -11,17 +11,17 @@ #include "nsAutoPtr.h" namespace mozilla { namespace dom { class AudioContext; class SharedBuffers; -class ScriptProcessorNode : public AudioNode +class ScriptProcessorNode final : public AudioNode { public: ScriptProcessorNode(AudioContext* aContext, uint32_t aBufferSize, uint32_t aNumberOfInputChannels, uint32_t aNumberOfOutputChannels); NS_DECL_ISUPPORTS_INHERITED
--- a/dom/media/webaudio/StereoPannerNode.cpp +++ b/dom/media/webaudio/StereoPannerNode.cpp @@ -22,17 +22,17 @@ using namespace std; NS_IMPL_CYCLE_COLLECTION_INHERITED(StereoPannerNode, AudioNode, mPan) NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(StereoPannerNode) NS_INTERFACE_MAP_END_INHERITING(AudioNode) NS_IMPL_ADDREF_INHERITED(StereoPannerNode, AudioNode) NS_IMPL_RELEASE_INHERITED(StereoPannerNode, AudioNode) -class StereoPannerNodeEngine : public AudioNodeEngine +class StereoPannerNodeEngine final : public AudioNodeEngine { public: StereoPannerNodeEngine(AudioNode* aNode, AudioDestinationNode* aDestination) : AudioNodeEngine(aNode) , mSource(nullptr) , mDestination(static_cast<AudioNodeStream*>(aDestination->Stream())) // Keep the default value in sync with the default value in
--- a/dom/media/webaudio/StereoPannerNode.h +++ b/dom/media/webaudio/StereoPannerNode.h @@ -10,17 +10,17 @@ #include "AudioNode.h" #include "mozilla/dom/StereoPannerNodeBinding.h" namespace mozilla { namespace dom { class AudioContext; -class StereoPannerNode : public AudioNode +class StereoPannerNode final : public AudioNode { public: MOZ_DECLARE_REFCOUNTED_TYPENAME(StereoPannerNode) explicit StereoPannerNode(AudioContext* aContext); virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override; virtual void SetChannelCount(uint32_t aChannelCount, ErrorResult& aRv) override
--- a/dom/media/webaudio/ThreeDPoint.h +++ b/dom/media/webaudio/ThreeDPoint.h @@ -9,17 +9,18 @@ #include <cmath> #include <algorithm> namespace mozilla { namespace dom { -struct ThreeDPoint { +struct ThreeDPoint final +{ ThreeDPoint() : x(0.) , y(0.) , z(0.) { } ThreeDPoint(double aX, double aY, double aZ) : x(aX)
--- a/dom/media/webaudio/WaveShaperNode.cpp +++ b/dom/media/webaudio/WaveShaperNode.cpp @@ -43,17 +43,17 @@ static uint32_t ValueOf(OverSampleType a case OverSampleType::_2x: return 2; case OverSampleType::_4x: return 4; default: NS_NOTREACHED("We should never reach here"); return 1; } } -class Resampler +class Resampler final { public: Resampler() : mType(OverSampleType::None) , mUpSampler(nullptr) , mDownSampler(nullptr) , mChannels(0) , mSampleRate(0) @@ -156,17 +156,17 @@ private: OverSampleType mType; SpeexResamplerState* mUpSampler; SpeexResamplerState* mDownSampler; uint32_t mChannels; TrackRate mSampleRate; nsTArray<float> mBuffer; }; -class WaveShaperNodeEngine : public AudioNodeEngine +class WaveShaperNodeEngine final : public AudioNodeEngine { public: explicit WaveShaperNodeEngine(AudioNode* aNode) : AudioNodeEngine(aNode) , mType(OverSampleType::None) { }
--- a/dom/media/webaudio/WaveShaperNode.h +++ b/dom/media/webaudio/WaveShaperNode.h @@ -11,17 +11,17 @@ #include "mozilla/dom/WaveShaperNodeBinding.h" #include "mozilla/dom/TypedArray.h" namespace mozilla { namespace dom { class AudioContext; -class WaveShaperNode : public AudioNode +class WaveShaperNode final : public AudioNode { public: explicit WaveShaperNode(AudioContext *aContext); NS_DECL_ISUPPORTS_INHERITED NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(WaveShaperNode, AudioNode) virtual JSObject* WrapObject(JSContext *aCx, JS::Handle<JSObject*> aGivenProto) override;