Web Audio: Don't create unnecessary DelayNode object.
We can check maxDelayTime argument in the factory to avoid unnecessary DelayNode
creation.
This CL doesn't change user-visible behavior.
BUG=
Review URL: https://codereview.chromium.org/1026663002
git-svn-id: svn://svn.chromium.org/blink/trunk@192303 bbb929c8-8fbe-4397-9dbb-9b2b20218538
diff --git a/Source/modules/webaudio/DelayNode.cpp b/Source/modules/webaudio/DelayNode.cpp
index 65b6a88..53b18f0 100644
--- a/Source/modules/webaudio/DelayNode.cpp
+++ b/Source/modules/webaudio/DelayNode.cpp
@@ -35,18 +35,23 @@
const double maximumAllowedDelayTime = 180;
-DelayNode::DelayNode(AudioContext* context, float sampleRate, double maxDelayTime, ExceptionState& exceptionState)
+DelayNode::DelayNode(AudioContext* context, float sampleRate, double maxDelayTime)
: AudioBasicProcessorNode(NodeTypeDelay, context, sampleRate)
{
+ m_processor = new DelayProcessor(context, sampleRate, 1, maxDelayTime);
+}
+
+DelayNode* DelayNode::create(AudioContext* context, float sampleRate, double maxDelayTime, ExceptionState& exceptionState)
+{
if (maxDelayTime <= 0 || maxDelayTime >= maximumAllowedDelayTime) {
exceptionState.throwDOMException(
NotSupportedError,
"max delay time (" + String::number(maxDelayTime)
+ ") must be between 0 and " + String::number(maximumAllowedDelayTime)
+ ", exclusive.");
- return;
+ return nullptr;
}
- m_processor = new DelayProcessor(context, sampleRate, 1, maxDelayTime);
+ return new DelayNode(context, sampleRate, maxDelayTime);
}
AudioParam* DelayNode::delayTime()
diff --git a/Source/modules/webaudio/DelayNode.h b/Source/modules/webaudio/DelayNode.h
index 997d524..5cdd602 100644
--- a/Source/modules/webaudio/DelayNode.h
+++ b/Source/modules/webaudio/DelayNode.h
@@ -37,15 +37,11 @@
class DelayNode final : public AudioBasicProcessorNode {
DEFINE_WRAPPERTYPEINFO();
public:
- static DelayNode* create(AudioContext* context, float sampleRate, double maxDelayTime, ExceptionState& exceptionState)
- {
- return new DelayNode(context, sampleRate, maxDelayTime, exceptionState);
- }
-
+ static DelayNode* create(AudioContext*, float sampleRate, double maxDelayTime, ExceptionState&);
AudioParam* delayTime();
private:
- DelayNode(AudioContext*, float sampleRate, double maxDelayTime, ExceptionState&);
+ DelayNode(AudioContext*, float sampleRate, double maxDelayTime);
DelayProcessor* delayProcessor() { return static_cast<DelayProcessor*>(processor()); }
};