Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(74)

Unified Diff: Source/modules/webaudio/PannerNode.h

Issue 189143010: Cache values for panning and spatialization effects to enhance performance on pannerNode. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | Source/modules/webaudio/PannerNode.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/modules/webaudio/PannerNode.h
diff --git a/Source/modules/webaudio/PannerNode.h b/Source/modules/webaudio/PannerNode.h
index de9d6e578e0cac5f2298d0f85a666cddd4a99d29..3f5ef90618a2ba36a15dfe43c0675e7e40552d7f 100644
--- a/Source/modules/webaudio/PannerNode.h
+++ b/Source/modules/webaudio/PannerNode.h
@@ -75,7 +75,7 @@ public:
virtual void initialize() OVERRIDE;
virtual void uninitialize() OVERRIDE;
- // Listener
+ // AudioContext's listener
AudioListener* listener();
// Panning model
@@ -84,13 +84,13 @@ public:
void setPanningModel(const String&);
// Position
- void setPosition(float x, float y, float z) { m_position = FloatPoint3D(x, y, z); }
+ void setPosition(float x, float y, float z);
// Orientation
- void setOrientation(float x, float y, float z) { m_orientation = FloatPoint3D(x, y, z); }
+ void setOrientation(float x, float y, float z);
// Velocity
- void setVelocity(float x, float y, float z) { m_velocity = FloatPoint3D(x, y, z); }
+ void setVelocity(float x, float y, float z);
// Distance parameters
String distanceModel() const;
@@ -116,8 +116,7 @@ public:
double coneOuterGain() const { return m_coneEffect.outerGain(); }
void setConeOuterGain(double angle) { m_coneEffect.setOuterGain(angle); }
- void getAzimuthElevation(double* outAzimuth, double* outElevation);
- float dopplerRate();
+ double dopplerRate();
virtual double tailTime() const OVERRIDE { return m_panner ? m_panner->tailTime() : 0; }
virtual double latencyTime() const OVERRIDE { return m_panner ? m_panner->latencyTime() : 0; }
@@ -125,20 +124,38 @@ public:
private:
PannerNode(AudioContext*, float sampleRate);
+ void calculateAzimuthElevation(double* outAzimuth, double* outElevation);
// Returns the combined distance and cone gain attenuation.
+ float calculateDistanceConeGain();
+ double calculateDopplerRate();
+
+ void azimuthElevation(double* outAzimuth, double* outElevation);
float distanceConeGain();
+ bool isAzimuthElevationDirty();
+ bool isDistanceConeGainDirty();
+ bool isDopplerRateDirty();
+
// Notifies any AudioBufferSourceNodes connected to us either directly or indirectly about our existence.
// This is in order to handle the pitch change necessary for the doppler shift.
void notifyAudioSourcesConnectedToNode(AudioNode*, HashMap<AudioNode*, bool> &visitedNodes);
+ void updateCachedListener();
+ void updateCachedSourceLocationInfo();
+
OwnPtr<Panner> m_panner;
unsigned m_panningModel;
+ // Current source location information
FloatPoint3D m_position;
FloatPoint3D m_orientation;
FloatPoint3D m_velocity;
+ // Cached source location information
+ FloatPoint3D m_cachedPosition;
+ FloatPoint3D m_cachedOrientation;
+ FloatPoint3D m_cachedVelocity;
+
// Gain
RefPtr<AudioParam> m_distanceGain;
RefPtr<AudioParam> m_coneGain;
@@ -146,9 +163,17 @@ private:
ConeEffect m_coneEffect;
float m_lastGain;
- // HRTF Database loader
+ double m_cachedAzimuth;
+ double m_cachedElevation;
+ float m_cachedDistanceConeGain;
+ double m_cachedDopplerRate;
+
+ // Cached listener parameters after processing.
+ RefPtr<AudioListener> m_cachedListener;
+
RefPtr<HRTFDatabaseLoader> m_hrtfDatabaseLoader;
+ // AudioContext's connection count
unsigned m_connectionCount;
// Synchronize process() and setPanningModel() which can change the panner.
« no previous file with comments | « no previous file | Source/modules/webaudio/PannerNode.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698