gpu_mode_manager.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/gpu/gpu_mode_manager.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/bind.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_registry_simple.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/browser_process.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/pref_names.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/gpu_data_manager.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GpuModeManager::RegisterPrefs(PrefRegistrySimple* registry) {
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  registry->RegisterBooleanPref(
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs::kHardwareAccelerationModeEnabled, true);
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)GpuModeManager::GpuModeManager()
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    : initial_gpu_mode_pref_(true) {
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (g_browser_process->local_state()) {  // Skip for unit tests
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    pref_registrar_.Init(g_browser_process->local_state());
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Do nothing when the pref changes. It takes effect after
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // chrome restarts.
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    pref_registrar_.Add(
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        prefs::kHardwareAccelerationModeEnabled,
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        base::Bind(&base::DoNothing));
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    initial_gpu_mode_pref_ = IsGpuModePrefEnabled();
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if (!initial_gpu_mode_pref_) {
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      content::GpuDataManager* gpu_data_manager =
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          content::GpuDataManager::GetInstance();
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      DCHECK(gpu_data_manager);
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      gpu_data_manager->DisableHardwareAcceleration();
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)GpuModeManager::~GpuModeManager() {
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool GpuModeManager::initial_gpu_mode_pref() const {
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return initial_gpu_mode_pref_;
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool GpuModeManager::IsGpuModePrefEnabled() {
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  PrefService* service = g_browser_process->local_state();
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DCHECK(service);
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return service->GetBoolean(
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs::kHardwareAccelerationModeEnabled);
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
56