| Index: Source/core/platform/audio/HRTFDatabaseLoader.h
|
| diff --git a/Source/core/platform/audio/HRTFDatabaseLoader.h b/Source/core/platform/audio/HRTFDatabaseLoader.h
|
| index 4562db7665e52b54512937aaab2486f5484cf62d..9422dfb063817fac006e2e229055365022702a77 100644
|
| --- a/Source/core/platform/audio/HRTFDatabaseLoader.h
|
| +++ b/Source/core/platform/audio/HRTFDatabaseLoader.h
|
| @@ -30,10 +30,11 @@
|
| #define HRTFDatabaseLoader_h
|
|
|
| #include "core/platform/audio/HRTFDatabase.h"
|
| -#include <wtf/PassRefPtr.h>
|
| -#include <wtf/RefCounted.h>
|
| -#include <wtf/RefPtr.h>
|
| -#include <wtf/Threading.h>
|
| +#include "wtf/HashMap.h"
|
| +#include "wtf/PassRefPtr.h"
|
| +#include "wtf/RefCounted.h"
|
| +#include "wtf/RefPtr.h"
|
| +#include "wtf/Threading.h"
|
|
|
| namespace WebCore {
|
|
|
| @@ -41,14 +42,12 @@ namespace WebCore {
|
|
|
| class HRTFDatabaseLoader : public RefCounted<HRTFDatabaseLoader> {
|
| public:
|
| - // Lazily creates the singleton HRTFDatabaseLoader (if not already created) and starts loading asynchronously (when created the first time).
|
| - // Returns the singleton HRTFDatabaseLoader.
|
| + // Lazily creates a HRTFDatabaseLoader (if not already created) for the given sample-rate
|
| + // and starts loading asynchronously (when created the first time).
|
| + // Returns the HRTFDatabaseLoader.
|
| // Must be called from the main thread.
|
| static PassRefPtr<HRTFDatabaseLoader> createAndLoadAsynchronouslyIfNecessary(float sampleRate);
|
|
|
| - // Returns the singleton HRTFDatabaseLoader.
|
| - static HRTFDatabaseLoader* loader() { return s_loader; }
|
| -
|
| // Both constructor and destructor must be called from the main thread.
|
| ~HRTFDatabaseLoader();
|
|
|
| @@ -65,13 +64,15 @@ public:
|
| // Called in asynchronous loading thread.
|
| void load();
|
|
|
| - // defaultHRTFDatabase() gives access to the loaded database.
|
| - // This can be called from any thread, but it is the callers responsibilty to call this while the context (and thus HRTFDatabaseLoader)
|
| - // is still alive. Otherwise this will return 0.
|
| - static HRTFDatabase* defaultHRTFDatabase();
|
| -
|
| void reportMemoryUsage(MemoryObjectInfo*) const;
|
|
|
| + class LoaderMap : public HashMap<double, RefPtr<HRTFDatabaseLoader> > {
|
| + public:
|
| + void reportMemoryUsage(MemoryObjectInfo*) const;
|
| + };
|
| +
|
| + static HRTFDatabaseLoader::LoaderMap* loaderMap() { return s_loaderMap; }
|
| +
|
| private:
|
| // Both constructor and destructor must be called from the main thread.
|
| explicit HRTFDatabaseLoader(float sampleRate);
|
| @@ -80,7 +81,9 @@ private:
|
| // This must be called from the main thread.
|
| void loadAsynchronously();
|
|
|
| - static HRTFDatabaseLoader* s_loader; // singleton
|
| + // Keeps track of loaders on a per-sample-rate basis.
|
| + static LoaderMap* s_loaderMap; // singleton
|
| +
|
| OwnPtr<HRTFDatabase> m_hrtfDatabase;
|
|
|
| // Holding a m_threadLock is required when accessing m_databaseLoaderThread.
|
|
|