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

Unified Diff: content/browser/gpu/gpu_data_manager_impl_private.cc

Issue 237903002: Clean up mac gpu switching code a little. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix linux test Created 6 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/gpu/gpu_data_manager_impl_private.cc
diff --git a/content/browser/gpu/gpu_data_manager_impl_private.cc b/content/browser/gpu/gpu_data_manager_impl_private.cc
index 42b7db1805757a7d59d40d85c10f00ffba139248..52d8cc1966aabfb35c31c96036608d30907ab55d 100644
--- a/content/browser/gpu/gpu_data_manager_impl_private.cc
+++ b/content/browser/gpu/gpu_data_manager_impl_private.cc
@@ -217,17 +217,25 @@ void DisplayReconfigCallback(CGDirectDisplayID display,
reinterpret_cast<GpuDataManagerImpl*>(gpu_data_manager);
DCHECK(manager);
+ // Display change.
+ bool display_changed = false;
uint32_t displayCount;
CGGetActiveDisplayList(0, NULL, &displayCount);
-
- bool fireGpuSwitch = flags & kCGDisplayAddFlag;
-
if (displayCount != manager->GetDisplayCount()) {
manager->SetDisplayCount(displayCount);
- fireGpuSwitch = true;
+ display_changed = true;
+ }
+
+ // Gpu change.
+ bool gpu_changed = false;
+ if (flags & kCGDisplayAddFlag) {
+ uint32 vendor_id, device_id;
+ if (gpu::CollectGpuID(&vendor_id, &device_id) == gpu::kGpuIDSuccess) {
+ gpu_changed = manager->UpdateActiveGpu(vendor_id, device_id);
+ }
}
- if (fireGpuSwitch)
+ if (display_changed || gpu_changed)
manager->HandleGpuSwitch();
}
#endif // OS_MACOSX
@@ -882,34 +890,36 @@ base::ListValue* GpuDataManagerImplPrivate::GetLogMessages() const {
}
void GpuDataManagerImplPrivate::HandleGpuSwitch() {
- // Check if the active gpu has changed.
- uint32 vendor_id, device_id;
- gpu::GPUInfo::GPUDevice* active = NULL;
- gpu::GPUInfo::GPUDevice* old_active = NULL;
- if (gpu::CollectGpuID(&vendor_id, &device_id) == gpu::kGpuIDSuccess) {
+ GpuDataManagerImpl::UnlockedSession session(owner_);
+ observer_list_->Notify(&GpuDataManagerObserver::OnGpuSwitching);
+}
+
+bool GpuDataManagerImplPrivate::UpdateActiveGpu(
+ uint32 vendor_id, uint32 device_id) {
+ if (gpu_info_.gpu.vendor_id == vendor_id &&
+ gpu_info_.gpu.device_id == device_id) {
+ // The primary GPU is active.
if (gpu_info_.gpu.active)
- old_active = &gpu_info_.gpu;
- if (gpu_info_.gpu.vendor_id == vendor_id &&
- gpu_info_.gpu.device_id == device_id)
- active = &gpu_info_.gpu;
+ return false;
+ gpu_info_.gpu.active = true;
+ for (size_t ii = 0; ii < gpu_info_.secondary_gpus.size(); ++ii)
+ gpu_info_.secondary_gpus[ii].active = false;
+ } else {
+ // A secondary GPU is active.
for (size_t ii = 0; ii < gpu_info_.secondary_gpus.size(); ++ii) {
- gpu::GPUInfo::GPUDevice& gpu = gpu_info_.secondary_gpus[ii];
- if (gpu.active)
- old_active = &gpu;
- if (gpu.vendor_id == vendor_id && gpu.device_id == device_id)
- active = &gpu;
- }
- DCHECK(active && old_active);
- if (active != old_active) { // A different GPU is used.
- old_active->active = false;
- active->active = true;
- UpdateGpuInfoHelper();
+ if (gpu_info_.secondary_gpus[ii].vendor_id == vendor_id &&
+ gpu_info_.secondary_gpus[ii].device_id == device_id) {
+ if (gpu_info_.secondary_gpus[ii].active)
+ return false;
+ gpu_info_.secondary_gpus[ii].active = true;
+ } else {
+ gpu_info_.secondary_gpus[ii].active = false;
+ }
}
+ gpu_info_.gpu.active = false;
}
- {
- GpuDataManagerImpl::UnlockedSession session(owner_);
- observer_list_->Notify(&GpuDataManagerObserver::OnGpuSwitching);
- }
+ UpdateGpuInfoHelper();
+ return true;
}
bool GpuDataManagerImplPrivate::CanUseGpuBrowserCompositor() const {
« no previous file with comments | « content/browser/gpu/gpu_data_manager_impl_private.h ('k') | content/browser/gpu/gpu_data_manager_impl_private_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698