Chromium Code Reviews| Index: content/browser/gpu/gpu_data_manager.h |
| =================================================================== |
| --- content/browser/gpu/gpu_data_manager.h (revision 107010) |
| +++ content/browser/gpu/gpu_data_manager.h (working copy) |
| @@ -9,9 +9,9 @@ |
| #include <set> |
| #include <string> |
| -#include "base/callback_old.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "base/memory/singleton.h" |
| +#include "base/observer_list_threadsafe.h" |
| #include "base/synchronization/lock.h" |
| #include "base/task.h" |
| #include "base/values.h" |
| @@ -24,6 +24,17 @@ |
| class CONTENT_EXPORT GpuDataManager { |
| public: |
| + // Observers can register themselves via GpuDataManager::AddObserver, and |
| + // can un-register with GpuDataManager::RemoveObserver. |
| + class Observer { |
| + public: |
| + // Called for any observers whenever there is a GPU info update. |
| + virtual void OnGpuInfoUpdate() = 0; |
| + |
| + protected: |
| + virtual ~Observer() {} |
| + }; |
| + |
| // Getter for the singleton. This will return NULL on failure. |
| static GpuDataManager* GetInstance(); |
| @@ -82,12 +93,13 @@ |
| // Can be called on any thread. |
| bool GpuAccessAllowed(); |
| - // Add a callback. |
| - void AddGpuInfoUpdateCallback(Callback0::Type* callback); |
| + // Registers |observer|. The thread on which this is called is the thread |
| + // on which |observer| will be called back with notifications. |
| + void AddObserver(Observer* observer); |
|
James Hawkins
2011/10/26 00:21:29
|observer| must not be NULL? Here and RemoveObser
csilv
2011/10/26 01:35:31
Wouldn't observer != NULL be assumed? ;-) Done.
James Hawkins
2011/10/26 01:45:28
I understand where you're coming from, but I've re
|
| - // Remove a callback. |
| - // Returns true if removed, or false if it was not found. |
| - bool RemoveGpuInfoUpdateCallback(Callback0::Type* callback); |
| + // Unregisters |observer| from receiving notifications. This must be called |
|
James Hawkins
2011/10/26 00:21:29
Single space between comments.
csilv
2011/10/26 01:35:31
Done.
|
| + // on the same thread on which AddObserver() was called. |
| + void RemoveObserver(Observer* observer); |
| // Inserting disable-feature switches into renderer process command-line |
| // in correspondance to preliminary gpu feature flags. |
| @@ -157,6 +169,9 @@ |
| std::string use_gl_; |
| }; |
| + typedef ObserverListThreadSafe<GpuDataManager::Observer> |
|
James Hawkins
2011/10/26 00:21:29
Document var.
James Hawkins
2011/10/26 01:32:16
Oops, nm.
|
| + GpuDataManagerObserverList; |
| + |
| friend struct DefaultSingletonTraits<GpuDataManager>; |
| GpuDataManager(); |
| @@ -172,8 +187,8 @@ |
| // and compute the flags. |
| void UpdateGpuFeatureFlags(); |
| - // Call all callbacks. |
| - void RunGpuInfoUpdateCallbacks(); |
| + // Notify all observers whenever there is a GPU info update. |
| + void NotifyGpuInfoUpdate(); |
| // If use-gl switch is osmesa or any, return true. |
| bool UseGLIsOSMesaOrAny(); |
| @@ -199,8 +214,8 @@ |
| scoped_ptr<GpuBlacklist> gpu_blacklist_; |
| - // Map of callbacks. |
| - std::set<Callback0::Type*> gpu_info_update_callbacks_; |
| + // Observers. |
| + const scoped_refptr<GpuDataManagerObserverList> observer_list_; |
|
James Hawkins
2011/10/26 00:21:29
Why const?
csilv
2011/10/26 01:35:31
observer_list_ is initialized in the constructor a
James Hawkins
2011/10/26 01:45:28
No, was just curious.
|
| ListValue log_messages_; |