1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef UI_GL_GPU_SWITCHING_MANAGER_H_ 6 #define UI_GL_GPU_SWITCHING_MANAGER_H_ 7 8 #include <vector> 9 10 #include "base/memory/singleton.h" 11 #include "ui/gl/gl_export.h" 12 #include "ui/gl/gpu_preference.h" 13 14 #if defined(OS_MACOSX) 15 #include <OpenGL/OpenGL.h> 16 #endif // OS_MACOSX 17 18 namespace ui { 19 20 class GL_EXPORT GpuSwitchingManager { 21 public: 22 // Getter for the singleton. This will return NULL on failure. 23 static GpuSwitchingManager* GetInstance(); 24 25 // Set the switching option to PreferIntegratedGpu. 26 void ForceUseOfIntegratedGpu(); 27 // Set the switching option to PreferDiscreteGpu; switch to discrete GPU 28 // immediately on Mac where dual GPU switching is supported. 29 void ForceUseOfDiscreteGpu(); 30 31 // If no GPU is forced, return the original GpuPreference; otherwise, return 32 // the forced GPU. 33 gfx::GpuPreference AdjustGpuPreference(gfx::GpuPreference gpu_preference); 34 35 // In the browser process, the value for this flag is computed the first time 36 // this function is called. 37 // In the GPU process, the value is passed from the browser process using the 38 // --supports-dual-gpus commandline switch. 39 bool SupportsDualGpus(); 40 41 void SetGpuCount(size_t gpu_count); 42 43 private: 44 friend struct DefaultSingletonTraits<GpuSwitchingManager>; 45 46 GpuSwitchingManager(); 47 virtual ~GpuSwitchingManager(); 48 49 #if defined(OS_MACOSX) 50 void SwitchToDiscreteGpuMac(); 51 52 CGLPixelFormatObj discrete_pixel_format_; 53 #endif // OS_MACOSX 54 55 gfx::GpuPreference gpu_switching_option_; 56 bool gpu_switching_option_set_; 57 58 bool supports_dual_gpus_; 59 bool supports_dual_gpus_set_; 60 61 size_t gpu_count_; 62 63 DISALLOW_COPY_AND_ASSIGN(GpuSwitchingManager); 64 }; 65 66 } // namespace ui 67 68 #endif // UI_GL_GPU_SWITCHING_MANAGER_H_ 69