Chromium Code Reviews| Index: content/browser/gpu/gpu_data_manager_impl_private.h |
| =================================================================== |
| --- content/browser/gpu/gpu_data_manager_impl_private.h (revision 199087) |
| +++ content/browser/gpu/gpu_data_manager_impl_private.h (working copy) |
| @@ -1,9 +1,9 @@ |
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| +// Copyright (c) 2013 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 CONTENT_BROWSER_GPU_GPU_DATA_MANAGER_IMPL_H_ |
| -#define CONTENT_BROWSER_GPU_GPU_DATA_MANAGER_IMPL_H_ |
| +#ifndef CONTENT_BROWSER_GPU_GPU_DATA_MANAGER_IMPL_PRIVATE_H_ |
| +#define CONTENT_BROWSER_GPU_GPU_DATA_MANAGER_IMPL_PRIVATE_H_ |
| #include <list> |
| #include <map> |
| @@ -11,117 +11,62 @@ |
| #include <string> |
| #include <vector> |
| -#include "base/callback.h" |
| -#include "base/compiler_specific.h" |
| -#include "base/files/file_path.h" |
| -#include "base/gtest_prod_util.h" |
| #include "base/memory/ref_counted.h" |
| #include "base/memory/singleton.h" |
| #include "base/observer_list_threadsafe.h" |
| -#include "base/process_util.h" |
| -#include "base/synchronization/lock.h" |
| -#include "base/time.h" |
| -#include "base/values.h" |
| #include "content/browser/gpu/gpu_blacklist.h" |
| +#include "content/browser/gpu/gpu_data_manager_impl.h" |
| #include "content/browser/gpu/gpu_driver_bug_list.h" |
| #include "content/browser/gpu/gpu_switching_list.h" |
| -#include "content/public/browser/gpu_data_manager.h" |
| -#include "content/public/common/gpu_info.h" |
| -#include "content/public/common/gpu_memory_stats.h" |
| -#include "content/public/common/gpu_switching_option.h" |
| -#include "content/public/common/three_d_api_types.h" |
| -class CommandLine; |
| -class GURL; |
| -struct WebPreferences; |
| - |
| namespace content { |
| -class CONTENT_EXPORT GpuDataManagerImpl |
| - : public NON_EXPORTED_BASE(GpuDataManager) { |
| +class CONTENT_EXPORT GpuDataManagerImplPrivate { |
|
Ken Russell (switch to Gerrit)
2013/05/09 20:21:16
Does this class really need to be CONTENT_EXPORT?
Zhenyao Mo
2013/05/09 23:35:12
Removed.
|
| public: |
| - // Indicates the guilt level of a domain which caused a GPU reset. |
| - // If a domain is 100% known to be guilty of resetting the GPU, then |
| - // it will generally not cause other domains' use of 3D APIs to be |
| - // blocked, unless system stability would be compromised. |
| - enum DomainGuilt { |
| - DOMAIN_GUILT_KNOWN, |
| - DOMAIN_GUILT_UNKNOWN |
| - }; |
| - |
| - // Indicates the reason that access to a given client API (like |
| - // WebGL or Pepper 3D) was blocked or not. This state is distinct |
| - // from blacklisting of an entire feature. |
| - enum DomainBlockStatus { |
| - DOMAIN_BLOCK_STATUS_BLOCKED, |
| - DOMAIN_BLOCK_STATUS_ALL_DOMAINS_BLOCKED, |
| - DOMAIN_BLOCK_STATUS_NOT_BLOCKED |
| - }; |
| - |
| - // Getter for the singleton. This will return NULL on failure. |
| - static GpuDataManagerImpl* GetInstance(); |
| - |
| - // GpuDataManager implementation. |
| - virtual void InitializeForTesting( |
| + void InitializeForTesting( |
| const std::string& gpu_blacklist_json, |
| - const GPUInfo& gpu_info) OVERRIDE; |
| - virtual bool IsFeatureBlacklisted(int feature) const OVERRIDE; |
| - virtual GPUInfo GetGPUInfo() const OVERRIDE; |
| - virtual void GetGpuProcessHandles( |
| - const GetGpuProcessHandlesCallback& callback) const OVERRIDE; |
| - virtual bool GpuAccessAllowed(std::string* reason) const OVERRIDE; |
| - virtual void RequestCompleteGpuInfoIfNeeded() OVERRIDE; |
| - virtual bool IsCompleteGpuInfoAvailable() const OVERRIDE; |
| - virtual void RequestVideoMemoryUsageStatsUpdate() const OVERRIDE; |
| - virtual bool ShouldUseSwiftShader() const OVERRIDE; |
| - virtual void RegisterSwiftShaderPath(const base::FilePath& path) OVERRIDE; |
| - virtual void AddObserver(GpuDataManagerObserver* observer) OVERRIDE; |
| - virtual void RemoveObserver(GpuDataManagerObserver* observer) OVERRIDE; |
| - virtual void UnblockDomainFrom3DAPIs(const GURL& url) OVERRIDE; |
| - virtual void DisableGpuWatchdog() OVERRIDE; |
| - virtual void SetGLStrings(const std::string& gl_vendor, |
| - const std::string& gl_renderer, |
| - const std::string& gl_version) OVERRIDE; |
| - virtual void GetGLStrings(std::string* gl_vendor, |
| - std::string* gl_renderer, |
| - std::string* gl_version) OVERRIDE; |
| - virtual void DisableHardwareAcceleration() OVERRIDE; |
| + const GPUInfo& gpu_info); |
| + bool IsFeatureBlacklisted(int feature) const; |
| + GPUInfo GetGPUInfo() const; |
| + void GetGpuProcessHandles( |
| + const GpuDataManager::GetGpuProcessHandlesCallback& callback) const; |
| + bool GpuAccessAllowed(std::string* reason) const; |
| + void RequestCompleteGpuInfoIfNeeded(); |
| + bool IsCompleteGpuInfoAvailable() const; |
| + void RequestVideoMemoryUsageStatsUpdate() const; |
| + bool ShouldUseSwiftShader() const; |
| + void RegisterSwiftShaderPath(const base::FilePath& path); |
| + void AddObserver(GpuDataManagerObserver* observer); |
| + void RemoveObserver(GpuDataManagerObserver* observer); |
| + void UnblockDomainFrom3DAPIs(const GURL& url); |
| + void DisableGpuWatchdog(); |
| + void SetGLStrings(const std::string& gl_vendor, |
| + const std::string& gl_renderer, |
| + const std::string& gl_version); |
| + void GetGLStrings(std::string* gl_vendor, |
| + std::string* gl_renderer, |
| + std::string* gl_version); |
| + void DisableHardwareAcceleration(); |
| - // This collects preliminary GPU info, load GpuBlacklist, and compute the |
| - // preliminary blacklisted features; it should only be called at browser |
| - // startup time in UI thread before the IO restriction is turned on. |
| void Initialize(); |
| - // Only update if the current GPUInfo is not finalized. If blacklist is |
| - // loaded, run through blacklist and update blacklisted features. |
| void UpdateGpuInfo(const GPUInfo& gpu_info); |
| void UpdateVideoMemoryUsageStats( |
| const GPUVideoMemoryUsageStats& video_memory_usage_stats); |
| - // Insert disable-feature switches corresponding to preliminary gpu feature |
| - // flags into the renderer process command line. |
| void AppendRendererCommandLine(CommandLine* command_line) const; |
| - // Insert switches into gpu process command line: kUseGL, |
| - // kDisableGLMultisampling. |
| void AppendGpuCommandLine(CommandLine* command_line) const; |
| - // Insert switches into plugin process command line: |
| - // kDisableCoreAnimationPlugins. |
| void AppendPluginCommandLine(CommandLine* command_line) const; |
| - // Update WebPreferences for renderer based on blacklisting decisions. |
| void UpdateRendererWebPrefs(WebPreferences* prefs) const; |
| GpuSwitchingOption GetGpuSwitchingOption() const; |
| std::string GetBlacklistVersion() const; |
| - // Returns the reasons for the latest run of blacklisting decisions. |
| - // For the structure of returned value, see documentation for |
| - // GpuBlacklist::GetBlacklistedReasons(). |
| - // Caller is responsible to release the returned value. |
| base::ListValue* GetBlacklistReasons() const; |
| void AddLogMessage(int level, |
| @@ -130,11 +75,8 @@ |
| void ProcessCrashed(base::TerminationStatus exit_code); |
| - // Returns a new copy of the ListValue. Caller is responsible to release |
| - // the returned value. |
| base::ListValue* GetLogMessages() const; |
| - // Called when switching gpu. |
| void HandleGpuSwitch(); |
| #if defined(OS_WIN) |
| @@ -143,47 +85,27 @@ |
| bool IsUsingAcceleratedSurface() const; |
| #endif |
| - // Maintenance of domains requiring explicit user permission before |
| - // using client-facing 3D APIs (WebGL, Pepper 3D), either because |
| - // the domain has caused the GPU to reset, or because too many GPU |
| - // resets have been observed globally recently, and system stability |
| - // might be compromised. |
| - // |
| - // The given URL may be a partial URL (including at least the host) |
| - // or a full URL to a page. |
| - // |
| - // Note that the unblocking API must be part of the content API |
| - // because it is called from Chrome side code. |
| - void BlockDomainFrom3DAPIs(const GURL& url, DomainGuilt guilt); |
| + void BlockDomainFrom3DAPIs( |
| + const GURL& url, GpuDataManagerImpl::DomainGuilt guilt); |
| bool Are3DAPIsBlocked(const GURL& url, |
| int render_process_id, |
| int render_view_id, |
| ThreeDAPIType requester); |
| - // Disables domain blocking for 3D APIs. For use only in tests. |
| void DisableDomainBlockingFor3DAPIsForTesting(); |
| - // Get number of features being blacklisted. |
| size_t GetBlacklistedFeatureCount() const; |
| typedef base::Callback<void()> GpuSwitchCallback; |
| - // Add and remove gpu switch callback. |
| void AddGpuSwitchCallback(const GpuSwitchCallback& callback); |
| void RemoveGpuSwitchCallback(const GpuSwitchCallback& callback); |
| - private: |
| - struct DomainBlockEntry { |
| - DomainGuilt last_guilt; |
| - }; |
| + GpuDataManagerImplPrivate(); |
| + virtual ~GpuDataManagerImplPrivate(); |
| - typedef std::map<std::string, DomainBlockEntry> DomainBlockMap; |
| - |
| - typedef ObserverListThreadSafe<GpuDataManagerObserver> |
| - GpuDataManagerObserverList; |
| - |
| + private: |
| friend class GpuDataManagerImplTest; |
| - friend struct DefaultSingletonTraits<GpuDataManagerImpl>; |
| FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplTest, GpuSideBlacklisting); |
| FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplTest, GpuSideExceptions); |
| @@ -209,9 +131,15 @@ |
| FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplTest, GpuDriverBugListSingle); |
| FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplTest, GpuDriverBugListMultiple); |
| - GpuDataManagerImpl(); |
| - virtual ~GpuDataManagerImpl(); |
| + struct DomainBlockEntry { |
| + GpuDataManagerImpl::DomainGuilt last_guilt; |
| + }; |
| + typedef std::map<std::string, DomainBlockEntry> DomainBlockMap; |
| + |
| + typedef ObserverListThreadSafe<GpuDataManagerObserver> |
| + GpuDataManagerObserverList; |
| + |
| void InitializeImpl(const std::string& gpu_blacklist_json, |
| const std::string& gpu_switching_list_json, |
| const std::string& gpu_driver_bug_list_json, |
| @@ -238,9 +166,10 @@ |
| // Implementation functions for blocking of 3D graphics APIs, used |
| // for unit testing. |
| - void BlockDomainFrom3DAPIsAtTime( |
| - const GURL& url, DomainGuilt guilt, base::Time at_time); |
| - DomainBlockStatus Are3DAPIsBlockedAtTime( |
| + void BlockDomainFrom3DAPIsAtTime(const GURL& url, |
| + GpuDataManagerImpl::DomainGuilt guilt, |
| + base::Time at_time); |
| + GpuDataManagerImpl::DomainBlockStatus Are3DAPIsBlockedAtTime( |
| const GURL& url, base::Time at_time) const; |
| int64 GetBlockAllDomainsDurationInMs() const; |
| @@ -259,7 +188,6 @@ |
| std::set<int> gpu_driver_bugs_; |
| GPUInfo gpu_info_; |
| - mutable base::Lock gpu_info_lock_; |
| scoped_ptr<GpuBlacklist> gpu_blacklist_; |
| scoped_ptr<GpuSwitchingList> gpu_switching_list_; |
| @@ -268,7 +196,6 @@ |
| const scoped_refptr<GpuDataManagerObserverList> observer_list_; |
| ListValue log_messages_; |
| - mutable base::Lock log_messages_lock_; |
| bool use_swiftshader_; |
| @@ -291,9 +218,10 @@ |
| std::vector<GpuSwitchCallback> gpu_switch_callbacks_; |
| - DISALLOW_COPY_AND_ASSIGN(GpuDataManagerImpl); |
| + DISALLOW_COPY_AND_ASSIGN(GpuDataManagerImplPrivate); |
| }; |
| } // namespace content |
| -#endif // CONTENT_BROWSER_GPU_GPU_DATA_MANAGER_IMPL_H_ |
| +#endif // CONTENT_BROWSER_GPU_GPU_DATA_MANAGER_IMPL_PRIVATE_H_ |
| + |