| // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_GPU_DATA_MANAGER_H_ |
| #define CHROME_BROWSER_GPU_DATA_MANAGER_H_ |
| #pragma once |
| |
| #include <set> |
| #include <string> |
| |
| #include "base/callback.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "base/memory/singleton.h" |
| #include "base/synchronization/lock.h" |
| #include "base/values.h" |
| #include "content/common/gpu/gpu_info.h" |
| #include "content/common/gpu_feature_flags.h" |
| |
| class CommandLine; |
| class GpuBlacklist; |
| |
| class GpuDataManager { |
| public: |
| // Getter for the singleton. This will return NULL on failure. |
| static GpuDataManager* GetInstance(); |
| |
| // Requests complete GPUinfo if it has not already been requested |
| void RequestCompleteGpuInfoIfNeeded(); |
| |
| // Only update if the current GPUInfo is not finalized. |
| void UpdateGpuInfo(const GPUInfo& gpu_info); |
| |
| const GPUInfo& gpu_info() const; |
| |
| // Returns status of various GPU features. Return type is |
| // GpuBlacklist::GetFeatureStatus, or NULL if blacklist is |
| // uninitialized. Caller is responsible for deleting the returned value. |
| Value* GetFeatureStatus(); |
| |
| std::string GetBlacklistVersion() const; |
| |
| void AddLogMessage(Value* msg); |
| |
| const ListValue& log_messages() const; |
| |
| // Can be called on any thread. |
| GpuFeatureFlags GetGpuFeatureFlags(); |
| |
| // This indicator might change because we could collect more GPU info or |
| // because the GPU blacklist could be updated. |
| // If this returns false, any further GPU access, including launching GPU |
| // process, establish GPU channel, and GPU info collection, should be |
| // blocked. |
| // Can be called on any thread. |
| bool GpuAccessAllowed(); |
| |
| // Add a callback. |
| void AddGpuInfoUpdateCallback(Callback0::Type* callback); |
| |
| // Remove a callback. |
| // Returns true if removed, or false if it was not found. |
| bool RemoveGpuInfoUpdateCallback(Callback0::Type* callback); |
| |
| // Inserting disable-feature switches into renderer process command-line |
| // in correspondance to preliminary gpu feature flags. |
| void AppendRendererCommandLine(CommandLine* command_line); |
| |
| // Gives ownership of the latest blacklist. This is always called on the UI |
| // thread. |
| void UpdateGpuBlacklist(GpuBlacklist* gpu_blacklist); |
| |
| private: |
| friend struct DefaultSingletonTraits<GpuDataManager>; |
| |
| GpuDataManager(); |
| virtual ~GpuDataManager(); |
| |
| // Check if we should go ahead and use gpu blacklist. |
| // If not, return NULL; otherwise, update and return the current list. |
| GpuBlacklist* GetGpuBlacklist(); |
| |
| // If flags hasn't been set and GPUInfo is available, run through blacklist |
| // and compute the flags. |
| void UpdateGpuFeatureFlags(); |
| |
| // Call all callbacks. |
| void RunGpuInfoUpdateCallbacks(); |
| |
| bool complete_gpu_info_already_requested_; |
| |
| bool gpu_feature_flags_set_; |
| GpuFeatureFlags gpu_feature_flags_; |
| |
| GPUInfo gpu_info_; |
| mutable base::Lock gpu_info_lock_; |
| |
| scoped_ptr<GpuBlacklist> gpu_blacklist_; |
| |
| // Map of callbacks. |
| std::set<Callback0::Type*> gpu_info_update_callbacks_; |
| |
| ListValue log_messages_; |
| |
| DISALLOW_COPY_AND_ASSIGN(GpuDataManager); |
| }; |
| |
| #endif // CHROME_BROWSER_GPU_DATA_MANAGER_H_ |