Index: content/browser/gpu/gpu_data_manager.cc |
=================================================================== |
--- content/browser/gpu/gpu_data_manager.cc (revision 107010) |
+++ content/browser/gpu/gpu_data_manager.cc (working copy) |
@@ -8,6 +8,8 @@ |
#include <CoreGraphics/CGDisplayConfiguration.h> |
#endif |
+#include "base/bind.h" |
+#include "base/bind_helpers.h" |
#include "base/command_line.h" |
#include "base/metrics/histogram.h" |
#include "base/stringprintf.h" |
@@ -187,7 +189,8 @@ |
} |
GpuDataManager::GpuDataManager() |
- : complete_gpu_info_already_requested_(false) { |
+ : complete_gpu_info_already_requested_(false), |
+ observer_list_(new GpuDataManagerObserverList) { |
Initialize(); |
} |
@@ -239,7 +242,7 @@ |
return; |
} |
- RunGpuInfoUpdateCallbacks(); |
+ NotifyGpuInfoUpdate(); |
{ |
base::AutoLock auto_lock(gpu_info_lock_); |
@@ -410,20 +413,12 @@ |
return (gpu_feature_flags_.flags() & mask) == 0; |
} |
-void GpuDataManager::AddGpuInfoUpdateCallback(Callback0::Type* callback) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- gpu_info_update_callbacks_.insert(callback); |
+void GpuDataManager::AddObserver(Observer* observer) { |
+ observer_list_->AddObserver(observer); |
} |
-bool GpuDataManager::RemoveGpuInfoUpdateCallback(Callback0::Type* callback) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- std::set<Callback0::Type*>::iterator i = |
- gpu_info_update_callbacks_.find(callback); |
- if (i != gpu_info_update_callbacks_.end()) { |
- gpu_info_update_callbacks_.erase(i); |
- return true; |
- } |
- return false; |
+void GpuDataManager::RemoveObserver(Observer* observer) { |
+ observer_list_->RemoveObserver(observer); |
} |
void GpuDataManager::AppendRendererCommandLine( |
@@ -570,23 +565,16 @@ |
return info; |
} |
-void GpuDataManager::RunGpuInfoUpdateCallbacks() { |
- if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { |
- BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
- NewRunnableMethod(this, &GpuDataManager::RunGpuInfoUpdateCallbacks)); |
- return; |
- } |
- |
- std::set<Callback0::Type*>::iterator i = gpu_info_update_callbacks_.begin(); |
- for (; i != gpu_info_update_callbacks_.end(); ++i) { |
- (*i)->Run(); |
- } |
+void GpuDataManager::NotifyGpuInfoUpdate() { |
+ observer_list_->Notify(&GpuDataManager::Observer::OnGpuInfoUpdate); |
} |
void GpuDataManager::UpdateGpuFeatureFlags() { |
if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { |
- BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
- NewRunnableMethod(this, &GpuDataManager::UpdateGpuFeatureFlags)); |
+ BrowserThread::PostTask( |
+ BrowserThread::UI, FROM_HERE, |
+ base::Bind(&GpuDataManager::UpdateGpuFeatureFlags, |
+ base::Unretained(this))); |
return; |
} |
@@ -605,7 +593,7 @@ |
} |
// Notify clients that GpuInfo state has changed |
- RunGpuInfoUpdateCallbacks(); |
+ NotifyGpuInfoUpdate(); |
uint32 flags = gpu_feature_flags_.flags(); |
uint32 max_entry_id = gpu_blacklist->max_entry_id(); |