15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/gpu/gpu_data_manager_impl.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/gpu/gpu_data_manager_impl_private.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GpuDataManager* GpuDataManager::GetInstance() { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GpuDataManagerImpl::GetInstance(); 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GpuDataManagerImpl* GpuDataManagerImpl::GetInstance() { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return Singleton<GpuDataManagerImpl>::get(); 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GpuDataManagerImpl::InitializeForTesting( 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& gpu_blacklist_json, const gpu::GPUInfo& gpu_info) { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::AutoLock auto_lock(lock_); 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private_->InitializeForTesting(gpu_blacklist_json, gpu_info); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GpuDataManagerImpl::IsFeatureBlacklisted(int feature) const { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::AutoLock auto_lock(lock_); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return private_->IsFeatureBlacklisted(feature); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GpuDataManagerImpl::IsDriverBugWorkaroundActive(int feature) const { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::AutoLock auto_lock(lock_); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return private_->IsDriverBugWorkaroundActive(feature); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gpu::GPUInfo GpuDataManagerImpl::GetGPUInfo() const { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::AutoLock auto_lock(lock_); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return private_->GetGPUInfo(); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GpuDataManagerImpl::GetGpuProcessHandles( 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GetGpuProcessHandlesCallback& callback) const { 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::AutoLock auto_lock(lock_); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private_->GetGpuProcessHandles(callback); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GpuDataManagerImpl::GpuAccessAllowed(std::string* reason) const { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::AutoLock auto_lock(lock_); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return private_->GpuAccessAllowed(reason); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GpuDataManagerImpl::RequestCompleteGpuInfoIfNeeded() { 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::AutoLock auto_lock(lock_); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private_->RequestCompleteGpuInfoIfNeeded(); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GpuDataManagerImpl::IsEssentialGpuInfoAvailable() const { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::AutoLock auto_lock(lock_); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return private_->IsEssentialGpuInfoAvailable(); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GpuDataManagerImpl::IsCompleteGpuInfoAvailable() const { 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::AutoLock auto_lock(lock_); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return private_->IsCompleteGpuInfoAvailable(); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GpuDataManagerImpl::RequestVideoMemoryUsageStatsUpdate() const { 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::AutoLock auto_lock(lock_); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private_->RequestVideoMemoryUsageStatsUpdate(); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GpuDataManagerImpl::ShouldUseSwiftShader() const { 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::AutoLock auto_lock(lock_); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return private_->ShouldUseSwiftShader(); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GpuDataManagerImpl::RegisterSwiftShaderPath( 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::FilePath& path) { 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::AutoLock auto_lock(lock_); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private_->RegisterSwiftShaderPath(path); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GpuDataManagerImpl::ShouldUseWarp() const { 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::AutoLock auto_lock(lock_); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return private_->ShouldUseWarp(); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GpuDataManagerImpl::AddObserver( 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GpuDataManagerObserver* observer) { 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::AutoLock auto_lock(lock_); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private_->AddObserver(observer); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GpuDataManagerImpl::RemoveObserver( 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GpuDataManagerObserver* observer) { 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::AutoLock auto_lock(lock_); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private_->RemoveObserver(observer); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GpuDataManagerImpl::UnblockDomainFrom3DAPIs(const GURL& url) { 102 base::AutoLock auto_lock(lock_); 103 private_->UnblockDomainFrom3DAPIs(url); 104} 105 106void GpuDataManagerImpl::DisableGpuWatchdog() { 107 base::AutoLock auto_lock(lock_); 108 private_->DisableGpuWatchdog(); 109} 110 111void GpuDataManagerImpl::SetGLStrings(const std::string& gl_vendor, 112 const std::string& gl_renderer, 113 const std::string& gl_version) { 114 base::AutoLock auto_lock(lock_); 115 private_->SetGLStrings(gl_vendor, gl_renderer, gl_version); 116} 117 118void GpuDataManagerImpl::GetGLStrings(std::string* gl_vendor, 119 std::string* gl_renderer, 120 std::string* gl_version) { 121 base::AutoLock auto_lock(lock_); 122 private_->GetGLStrings(gl_vendor, gl_renderer, gl_version); 123} 124 125void GpuDataManagerImpl::DisableHardwareAcceleration() { 126 base::AutoLock auto_lock(lock_); 127 private_->DisableHardwareAcceleration(); 128} 129 130bool GpuDataManagerImpl::CanUseGpuBrowserCompositor() const { 131 base::AutoLock auto_lock(lock_); 132 return private_->CanUseGpuBrowserCompositor(); 133} 134 135void GpuDataManagerImpl::Initialize() { 136 base::AutoLock auto_lock(lock_); 137 private_->Initialize(); 138} 139 140void GpuDataManagerImpl::UpdateGpuInfo(const gpu::GPUInfo& gpu_info) { 141 base::AutoLock auto_lock(lock_); 142 private_->UpdateGpuInfo(gpu_info); 143} 144 145void GpuDataManagerImpl::UpdateVideoMemoryUsageStats( 146 const GPUVideoMemoryUsageStats& video_memory_usage_stats) { 147 base::AutoLock auto_lock(lock_); 148 private_->UpdateVideoMemoryUsageStats(video_memory_usage_stats); 149} 150 151void GpuDataManagerImpl::AppendRendererCommandLine( 152 base::CommandLine* command_line) const { 153 base::AutoLock auto_lock(lock_); 154 private_->AppendRendererCommandLine(command_line); 155} 156 157void GpuDataManagerImpl::AppendGpuCommandLine( 158 base::CommandLine* command_line) const { 159 base::AutoLock auto_lock(lock_); 160 private_->AppendGpuCommandLine(command_line); 161} 162 163void GpuDataManagerImpl::AppendPluginCommandLine( 164 base::CommandLine* command_line) const { 165 base::AutoLock auto_lock(lock_); 166 private_->AppendPluginCommandLine(command_line); 167} 168 169void GpuDataManagerImpl::UpdateRendererWebPrefs( 170 WebPreferences* prefs) const { 171 base::AutoLock auto_lock(lock_); 172 private_->UpdateRendererWebPrefs(prefs); 173} 174 175std::string GpuDataManagerImpl::GetBlacklistVersion() const { 176 base::AutoLock auto_lock(lock_); 177 return private_->GetBlacklistVersion(); 178} 179 180std::string GpuDataManagerImpl::GetDriverBugListVersion() const { 181 base::AutoLock auto_lock(lock_); 182 return private_->GetDriverBugListVersion(); 183} 184 185void GpuDataManagerImpl::GetBlacklistReasons(base::ListValue* reasons) const { 186 base::AutoLock auto_lock(lock_); 187 private_->GetBlacklistReasons(reasons); 188} 189 190void GpuDataManagerImpl::GetDriverBugWorkarounds( 191 base::ListValue* workarounds) const { 192 base::AutoLock auto_lock(lock_); 193 private_->GetDriverBugWorkarounds(workarounds); 194} 195 196void GpuDataManagerImpl::AddLogMessage(int level, 197 const std::string& header, 198 const std::string& message) { 199 base::AutoLock auto_lock(lock_); 200 private_->AddLogMessage(level, header, message); 201} 202 203void GpuDataManagerImpl::ProcessCrashed( 204 base::TerminationStatus exit_code) { 205 base::AutoLock auto_lock(lock_); 206 private_->ProcessCrashed(exit_code); 207} 208 209base::ListValue* GpuDataManagerImpl::GetLogMessages() const { 210 base::AutoLock auto_lock(lock_); 211 return private_->GetLogMessages(); 212} 213 214void GpuDataManagerImpl::HandleGpuSwitch() { 215 base::AutoLock auto_lock(lock_); 216 private_->HandleGpuSwitch(); 217} 218 219void GpuDataManagerImpl::BlockDomainFrom3DAPIs( 220 const GURL& url, DomainGuilt guilt) { 221 base::AutoLock auto_lock(lock_); 222 private_->BlockDomainFrom3DAPIs(url, guilt); 223} 224 225bool GpuDataManagerImpl::Are3DAPIsBlocked(const GURL& url, 226 int render_process_id, 227 int render_view_id, 228 ThreeDAPIType requester) { 229 base::AutoLock auto_lock(lock_); 230 return private_->Are3DAPIsBlocked( 231 url, render_process_id, render_view_id, requester); 232} 233 234void GpuDataManagerImpl::DisableDomainBlockingFor3DAPIsForTesting() { 235 base::AutoLock auto_lock(lock_); 236 private_->DisableDomainBlockingFor3DAPIsForTesting(); 237} 238 239size_t GpuDataManagerImpl::GetBlacklistedFeatureCount() const { 240 base::AutoLock auto_lock(lock_); 241 return private_->GetBlacklistedFeatureCount(); 242} 243 244void GpuDataManagerImpl::SetDisplayCount(unsigned int display_count) { 245 base::AutoLock auto_lock(lock_); 246 private_->SetDisplayCount(display_count); 247} 248 249unsigned int GpuDataManagerImpl::GetDisplayCount() const { 250 base::AutoLock auto_lock(lock_); 251 return private_->GetDisplayCount(); 252} 253 254bool GpuDataManagerImpl::UpdateActiveGpu(uint32 vendor_id, uint32 device_id) { 255 base::AutoLock auto_lock(lock_); 256 return private_->UpdateActiveGpu(vendor_id, device_id); 257} 258 259void GpuDataManagerImpl::Notify3DAPIBlocked(const GURL& url, 260 int render_process_id, 261 int render_view_id, 262 ThreeDAPIType requester) { 263 base::AutoLock auto_lock(lock_); 264 private_->Notify3DAPIBlocked( 265 url, render_process_id, render_view_id, requester); 266} 267 268void GpuDataManagerImpl::OnGpuProcessInitFailure() { 269 base::AutoLock auto_lock(lock_); 270 private_->OnGpuProcessInitFailure(); 271} 272 273GpuDataManagerImpl::GpuDataManagerImpl() 274 : private_(GpuDataManagerImplPrivate::Create(this)) { 275} 276 277GpuDataManagerImpl::~GpuDataManagerImpl() { 278} 279 280} // namespace content 281