Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1321)

Side by Side Diff: content/browser/gpu/gpu_data_manager_impl_private.cc

Issue 435383002: adds WARP support to Chromium, for Metro mode only, on Windows 8 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: first round of tryfixes Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/gpu/gpu_data_manager_impl_private.h" 5 #include "content/browser/gpu/gpu_data_manager_impl_private.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 } 264 }
265 265
266 bool GpuDataManagerImplPrivate::IsFeatureBlacklisted(int feature) const { 266 bool GpuDataManagerImplPrivate::IsFeatureBlacklisted(int feature) const {
267 #if defined(OS_CHROMEOS) 267 #if defined(OS_CHROMEOS)
268 if (feature == gpu::GPU_FEATURE_TYPE_PANEL_FITTING && 268 if (feature == gpu::GPU_FEATURE_TYPE_PANEL_FITTING &&
269 base::CommandLine::ForCurrentProcess()->HasSwitch( 269 base::CommandLine::ForCurrentProcess()->HasSwitch(
270 switches::kDisablePanelFitting)) { 270 switches::kDisablePanelFitting)) {
271 return true; 271 return true;
272 } 272 }
273 #endif // OS_CHROMEOS 273 #endif // OS_CHROMEOS
274 if (use_swiftshader_) { 274 if (use_swiftshader_ || gpu_info_.use_warp) {
275 // Skia's software rendering is probably more efficient than going through 275 // Skia's software rendering is probably more efficient than going through
276 // software emulation of the GPU, so use that. 276 // software emulation of the GPU, so use that.
277 if (feature == gpu::GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS) 277 if (feature == gpu::GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS)
278 return true; 278 return true;
279 return false; 279 return false;
280 } 280 }
281 281
282 return (blacklisted_features_.count(feature) == 1); 282 return (blacklisted_features_.count(feature) == 1);
283 } 283 }
284 284
285 bool GpuDataManagerImplPrivate::IsDriverBugWorkaroundActive(int feature) const { 285 bool GpuDataManagerImplPrivate::IsDriverBugWorkaroundActive(int feature) const {
286 return (gpu_driver_bugs_.count(feature) == 1); 286 return (gpu_driver_bugs_.count(feature) == 1);
287 } 287 }
288 288
289 size_t GpuDataManagerImplPrivate::GetBlacklistedFeatureCount() const { 289 size_t GpuDataManagerImplPrivate::GetBlacklistedFeatureCount() const {
290 if (use_swiftshader_) 290 if (use_swiftshader_ || gpu_info_.use_warp)
291 return 1; 291 return 1;
292 return blacklisted_features_.size(); 292 return blacklisted_features_.size();
293 } 293 }
294 294
295 void GpuDataManagerImplPrivate::SetDisplayCount(unsigned int display_count) { 295 void GpuDataManagerImplPrivate::SetDisplayCount(unsigned int display_count) {
296 display_count_ = display_count; 296 display_count_ = display_count;
297 } 297 }
298 298
299 unsigned int GpuDataManagerImplPrivate::GetDisplayCount() const { 299 unsigned int GpuDataManagerImplPrivate::GetDisplayCount() const {
300 return display_count_; 300 return display_count_;
301 } 301 }
302 302
303 gpu::GPUInfo GpuDataManagerImplPrivate::GetGPUInfo() const { 303 gpu::GPUInfo GpuDataManagerImplPrivate::GetGPUInfo() const {
304 return gpu_info_; 304 return gpu_info_;
305 } 305 }
306 306
307 void GpuDataManagerImplPrivate::GetGpuProcessHandles( 307 void GpuDataManagerImplPrivate::GetGpuProcessHandles(
308 const GpuDataManager::GetGpuProcessHandlesCallback& callback) const { 308 const GpuDataManager::GetGpuProcessHandlesCallback& callback) const {
309 GpuProcessHost::GetProcessHandles(callback); 309 GpuProcessHost::GetProcessHandles(callback);
310 } 310 }
311 311
312 bool GpuDataManagerImplPrivate::GpuAccessAllowed( 312 bool GpuDataManagerImplPrivate::GpuAccessAllowed(
313 std::string* reason) const { 313 std::string* reason) const {
314 if (use_swiftshader_) 314 if (use_swiftshader_ || gpu_info_.use_warp)
315 return true; 315 return true;
316 316
317 if (!gpu_process_accessible_) { 317 if (!gpu_process_accessible_) {
318 if (reason) { 318 if (reason) {
319 *reason = "GPU process launch failed."; 319 *reason = "GPU process launch failed.";
320 } 320 }
321 return false; 321 return false;
322 } 322 }
323 323
324 if (card_blacklisted_) { 324 if (card_blacklisted_) {
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
464 void GpuDataManagerImplPrivate::GetGLStrings(std::string* gl_vendor, 464 void GpuDataManagerImplPrivate::GetGLStrings(std::string* gl_vendor,
465 std::string* gl_renderer, 465 std::string* gl_renderer,
466 std::string* gl_version) { 466 std::string* gl_version) {
467 DCHECK(gl_vendor && gl_renderer && gl_version); 467 DCHECK(gl_vendor && gl_renderer && gl_version);
468 468
469 *gl_vendor = gpu_info_.gl_vendor; 469 *gl_vendor = gpu_info_.gl_vendor;
470 *gl_renderer = gpu_info_.gl_renderer; 470 *gl_renderer = gpu_info_.gl_renderer;
471 *gl_version = gpu_info_.gl_version; 471 *gl_version = gpu_info_.gl_version;
472 } 472 }
473 473
474 void GpuDataManagerImplPrivate::SetShouldUseWarp(bool use_warp) {
475 gpu_info_.use_warp = use_warp;
Zhenyao Mo 2014/08/20 21:02:09 This is incorrect. gpu_info_ could be updated mul
luken 2014/08/27 20:43:46 Deprecated code.
476 // Let the observers know, particularly the GpuPrefManager, so it can update
477 // its persistent state about using warp or not.
478 NotifyGpuInfoUpdate();
479 }
480
481 bool GpuDataManagerImplPrivate::ShouldUseWarp() const {
482 return gpu_info_.use_warp ||
483 base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kUseWarp);
484 }
485
474 void GpuDataManagerImplPrivate::Initialize() { 486 void GpuDataManagerImplPrivate::Initialize() {
475 TRACE_EVENT0("startup", "GpuDataManagerImpl::Initialize"); 487 TRACE_EVENT0("startup", "GpuDataManagerImpl::Initialize");
476 if (finalized_) { 488 if (finalized_) {
477 DVLOG(0) << "GpuDataManagerImpl marked as finalized; skipping Initialize"; 489 DVLOG(0) << "GpuDataManagerImpl marked as finalized; skipping Initialize";
478 return; 490 return;
479 } 491 }
480 492
481 const base::CommandLine* command_line = 493 const base::CommandLine* command_line =
482 base::CommandLine::ForCurrentProcess(); 494 base::CommandLine::ForCurrentProcess();
483 if (command_line->HasSwitch(switches::kSkipGpuDataLoading)) 495 if (command_line->HasSwitch(switches::kSkipGpuDataLoading))
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
538 } 550 }
539 gpu::GpuDriverBugList::AppendWorkaroundsFromCommandLine( 551 gpu::GpuDriverBugList::AppendWorkaroundsFromCommandLine(
540 &gpu_driver_bugs_, *base::CommandLine::ForCurrentProcess()); 552 &gpu_driver_bugs_, *base::CommandLine::ForCurrentProcess());
541 553
542 // We have to update GpuFeatureType before notify all the observers. 554 // We have to update GpuFeatureType before notify all the observers.
543 NotifyGpuInfoUpdate(); 555 NotifyGpuInfoUpdate();
544 } 556 }
545 557
546 void GpuDataManagerImplPrivate::UpdateGpuInfo(const gpu::GPUInfo& gpu_info) { 558 void GpuDataManagerImplPrivate::UpdateGpuInfo(const gpu::GPUInfo& gpu_info) {
547 // No further update of gpu_info if falling back to SwiftShader. 559 // No further update of gpu_info if falling back to SwiftShader.
548 if (use_swiftshader_) 560 if (use_swiftshader_ || gpu_info_.use_warp)
549 return; 561 return;
550 562
551 gpu::MergeGPUInfo(&gpu_info_, gpu_info); 563 gpu::MergeGPUInfo(&gpu_info_, gpu_info);
552 complete_gpu_info_already_requested_ = 564 complete_gpu_info_already_requested_ =
553 complete_gpu_info_already_requested_ || gpu_info_.finalized; 565 complete_gpu_info_already_requested_ || gpu_info_.finalized;
554 566
555 UpdateGpuInfoHelper(); 567 UpdateGpuInfoHelper();
556 } 568 }
557 569
558 void GpuDataManagerImplPrivate::UpdateVideoMemoryUsageStats( 570 void GpuDataManagerImplPrivate::UpdateVideoMemoryUsageStats(
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
638 // device_id, driver_vendor, driver_version for deciding whether we need to 650 // device_id, driver_vendor, driver_version for deciding whether we need to
639 // collect full info (on Linux) and for crash reporting purpose. 651 // collect full info (on Linux) and for crash reporting purpose.
640 command_line->AppendSwitchASCII(switches::kGpuVendorID, 652 command_line->AppendSwitchASCII(switches::kGpuVendorID,
641 base::StringPrintf("0x%04x", gpu_info_.gpu.vendor_id)); 653 base::StringPrintf("0x%04x", gpu_info_.gpu.vendor_id));
642 command_line->AppendSwitchASCII(switches::kGpuDeviceID, 654 command_line->AppendSwitchASCII(switches::kGpuDeviceID,
643 base::StringPrintf("0x%04x", gpu_info_.gpu.device_id)); 655 base::StringPrintf("0x%04x", gpu_info_.gpu.device_id));
644 command_line->AppendSwitchASCII(switches::kGpuDriverVendor, 656 command_line->AppendSwitchASCII(switches::kGpuDriverVendor,
645 gpu_info_.driver_vendor); 657 gpu_info_.driver_vendor);
646 command_line->AppendSwitchASCII(switches::kGpuDriverVersion, 658 command_line->AppendSwitchASCII(switches::kGpuDriverVersion,
647 gpu_info_.driver_version); 659 gpu_info_.driver_version);
660
661 if (ShouldUseWarp())
662 command_line->AppendSwitch(switches::kUseWarp);
648 } 663 }
649 664
650 void GpuDataManagerImplPrivate::AppendPluginCommandLine( 665 void GpuDataManagerImplPrivate::AppendPluginCommandLine(
651 base::CommandLine* command_line) const { 666 base::CommandLine* command_line) const {
652 DCHECK(command_line); 667 DCHECK(command_line);
653 668
654 #if defined(OS_MACOSX) 669 #if defined(OS_MACOSX)
655 // TODO(jbauman): Add proper blacklist support for core animation plugins so 670 // TODO(jbauman): Add proper blacklist support for core animation plugins so
656 // special-casing this video card won't be necessary. See 671 // special-casing this video card won't be necessary. See
657 // http://crbug.com/134015 672 // http://crbug.com/134015
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
812 gpu_info_.secondary_gpus[ii].active = false; 827 gpu_info_.secondary_gpus[ii].active = false;
813 } 828 }
814 } 829 }
815 gpu_info_.gpu.active = false; 830 gpu_info_.gpu.active = false;
816 } 831 }
817 UpdateGpuInfoHelper(); 832 UpdateGpuInfoHelper();
818 return true; 833 return true;
819 } 834 }
820 835
821 bool GpuDataManagerImplPrivate::CanUseGpuBrowserCompositor() const { 836 bool GpuDataManagerImplPrivate::CanUseGpuBrowserCompositor() const {
837 if (gpu_info_.use_warp)
Zhenyao Mo 2014/08/20 21:02:09 You should use ShouldUseWarp() here to be consiste
luken 2014/08/27 20:43:46 Done.
838 return true;
822 if (ShouldUseSwiftShader()) 839 if (ShouldUseSwiftShader())
823 return false; 840 return false;
824 if (IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_GPU_COMPOSITING)) 841 if (IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_GPU_COMPOSITING))
825 return false; 842 return false;
826 return true; 843 return true;
827 } 844 }
828 845
829 void GpuDataManagerImplPrivate::BlockDomainFrom3DAPIs( 846 void GpuDataManagerImplPrivate::BlockDomainFrom3DAPIs(
830 const GURL& url, GpuDataManagerImpl::DomainGuilt guilt) { 847 const GURL& url, GpuDataManagerImpl::DomainGuilt guilt) {
831 BlockDomainFrom3DAPIsAtTime(url, guilt, base::Time::Now()); 848 BlockDomainFrom3DAPIsAtTime(url, guilt, base::Time::Now());
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
1079 1096
1080 void GpuDataManagerImplPrivate::OnGpuProcessInitFailure() { 1097 void GpuDataManagerImplPrivate::OnGpuProcessInitFailure() {
1081 gpu_process_accessible_ = false; 1098 gpu_process_accessible_ = false;
1082 gpu_info_.finalized = true; 1099 gpu_info_.finalized = true;
1083 complete_gpu_info_already_requested_ = true; 1100 complete_gpu_info_already_requested_ = true;
1084 // Some observers might be waiting. 1101 // Some observers might be waiting.
1085 NotifyGpuInfoUpdate(); 1102 NotifyGpuInfoUpdate();
1086 } 1103 }
1087 1104
1088 } // namespace content 1105 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698