diff options
author | zmo@chromium.org <zmo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-10 20:42:52 +0000 |
---|---|---|
committer | zmo@chromium.org <zmo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-10 20:42:52 +0000 |
commit | d7867f32ddeb1118191871e2a7cec81bfd9766ad (patch) | |
tree | e57b0a618cb050c1c856bb5fde08d1a6ae699be4 /content/browser/gpu/gpu_internals_ui.cc | |
parent | 0078195f0a0ca601ad4d5d5d5090ffc5128d1396 (diff) | |
download | chromium_src-d7867f32ddeb1118191871e2a7cec81bfd9766ad.zip chromium_src-d7867f32ddeb1118191871e2a7cec81bfd9766ad.tar.gz chromium_src-d7867f32ddeb1118191871e2a7cec81bfd9766ad.tar.bz2 |
Refactor GpuDataManagerImpl to make it thread-safe, now and forever.
The original impl of GpuDataManagerImpl is thread-safe, but gradurally it regressed.
In order to make sure this class is thread-safe in the future, we move all code to GpuDataManagerImplPrivate, and make GpuDataManagerImpl a simple wrapper around GpuDataManagerImplPrivate's public functions, where each function call is guarded by lock, thus thread-safe.
BUG=232556
TEST=asan bots no longer crashes as described in crbug.com/232556
R=joi@chromium.org, kbr@chromium.org, piman@chromium.org
Review URL: https://codereview.chromium.org/14794006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@199530 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/gpu/gpu_internals_ui.cc')
-rw-r--r-- | content/browser/gpu/gpu_internals_ui.cc | 19 |
1 files changed, 4 insertions, 15 deletions
diff --git a/content/browser/gpu/gpu_internals_ui.cc b/content/browser/gpu/gpu_internals_ui.cc index eb7646c..6419ba8 100644 --- a/content/browser/gpu/gpu_internals_ui.cc +++ b/content/browser/gpu/gpu_internals_ui.cc @@ -479,9 +479,7 @@ class GpuMessageHandler // GpuDataManagerObserver implementation. virtual void OnGpuInfoUpdate() OVERRIDE; - - // Gpu switch handler. - void OnGpuSwitch(); + virtual void OnGpuSwitching() OVERRIDE; // Messages void OnBrowserBridgeInitialized(const base::ListValue* list); @@ -496,8 +494,6 @@ class GpuMessageHandler // DCHECK). bool observing_; - GpuDataManagerImpl::GpuSwitchCallback gpu_switch_callback_; - DISALLOW_COPY_AND_ASSIGN(GpuMessageHandler); }; @@ -508,15 +504,11 @@ class GpuMessageHandler //////////////////////////////////////////////////////////////////////////////// GpuMessageHandler::GpuMessageHandler() - : observing_(false), - gpu_switch_callback_(base::Bind(&GpuMessageHandler::OnGpuSwitch, - base::Unretained(this))) { + : observing_(false) { } GpuMessageHandler::~GpuMessageHandler() { GpuDataManagerImpl::GetInstance()->RemoveObserver(this); - GpuDataManagerImpl::GetInstance()->RemoveGpuSwitchCallback( - gpu_switch_callback_); } /* BrowserBridge.callAsync prepends a requestID to these messages. */ @@ -583,11 +575,8 @@ void GpuMessageHandler::OnBrowserBridgeInitialized( DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); // Watch for changes in GPUInfo - if (!observing_) { + if (!observing_) GpuDataManagerImpl::GetInstance()->AddObserver(this); - GpuDataManagerImpl::GetInstance()->AddGpuSwitchCallback( - gpu_switch_callback_); - } observing_ = true; // Tell GpuDataManager it should have full GpuInfo. If the @@ -639,7 +628,7 @@ void GpuMessageHandler::OnGpuInfoUpdate() { *(gpu_info_val.get())); } -void GpuMessageHandler::OnGpuSwitch() { +void GpuMessageHandler::OnGpuSwitching() { GpuDataManagerImpl::GetInstance()->RequestCompleteGpuInfoIfNeeded(); } |