| Index: content/browser/gpu/gpu_data_manager_impl_private.h
|
| ===================================================================
|
| --- content/browser/gpu/gpu_data_manager_impl_private.h (revision 0)
|
| +++ content/browser/gpu/gpu_data_manager_impl_private.h (revision 0)
|
| @@ -0,0 +1,239 @@
|
| +// 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_PRIVATE_H_
|
| +#define CONTENT_BROWSER_GPU_GPU_DATA_MANAGER_IMPL_PRIVATE_H_
|
| +
|
| +#include <list>
|
| +#include <map>
|
| +#include <set>
|
| +#include <string>
|
| +
|
| +#include "base/memory/ref_counted.h"
|
| +#include "base/memory/singleton.h"
|
| +#include "base/observer_list_threadsafe.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"
|
| +
|
| +namespace content {
|
| +
|
| +class CONTENT_EXPORT GpuDataManagerImplPrivate {
|
| + public:
|
| + static GpuDataManagerImplPrivate* Create(GpuDataManagerImpl* owner);
|
| +
|
| + void InitializeForTesting(
|
| + const std::string& gpu_blacklist_json,
|
| + 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();
|
| +
|
| + void Initialize();
|
| +
|
| + void UpdateGpuInfo(const GPUInfo& gpu_info);
|
| +
|
| + void UpdateVideoMemoryUsageStats(
|
| + const GPUVideoMemoryUsageStats& video_memory_usage_stats);
|
| +
|
| + void AppendRendererCommandLine(CommandLine* command_line) const;
|
| +
|
| + void AppendGpuCommandLine(CommandLine* command_line) const;
|
| +
|
| + void AppendPluginCommandLine(CommandLine* command_line) const;
|
| +
|
| + void UpdateRendererWebPrefs(WebPreferences* prefs) const;
|
| +
|
| + GpuSwitchingOption GetGpuSwitchingOption() const;
|
| +
|
| + std::string GetBlacklistVersion() const;
|
| +
|
| + base::ListValue* GetBlacklistReasons() const;
|
| +
|
| + void AddLogMessage(int level,
|
| + const std::string& header,
|
| + const std::string& message);
|
| +
|
| + void ProcessCrashed(base::TerminationStatus exit_code);
|
| +
|
| + base::ListValue* GetLogMessages() const;
|
| +
|
| + void HandleGpuSwitch();
|
| +
|
| +#if defined(OS_WIN)
|
| + // Is the GPU process using the accelerated surface to present, instead of
|
| + // presenting by itself.
|
| + bool IsUsingAcceleratedSurface() const;
|
| +#endif
|
| +
|
| + void BlockDomainFrom3DAPIs(
|
| + const GURL& url, GpuDataManagerImpl::DomainGuilt guilt);
|
| + bool Are3DAPIsBlocked(const GURL& url,
|
| + int render_process_id,
|
| + int render_view_id,
|
| + ThreeDAPIType requester);
|
| +
|
| + void DisableDomainBlockingFor3DAPIsForTesting();
|
| +
|
| + void Notify3DAPIBlocked(const GURL& url,
|
| + int render_process_id,
|
| + int render_view_id,
|
| + ThreeDAPIType requester);
|
| +
|
| + size_t GetBlacklistedFeatureCount() const;
|
| +
|
| + virtual ~GpuDataManagerImplPrivate();
|
| +
|
| + private:
|
| + friend class GpuDataManagerImplPrivateTest;
|
| +
|
| + FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplPrivateTest,
|
| + GpuSideBlacklisting);
|
| + FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplPrivateTest,
|
| + GpuSideExceptions);
|
| + FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplPrivateTest,
|
| + DisableHardwareAcceleration);
|
| + FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplPrivateTest,
|
| + SwiftShaderRendering);
|
| + FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplPrivateTest,
|
| + SwiftShaderRendering2);
|
| + FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplPrivateTest,
|
| + GpuInfoUpdate);
|
| + FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplPrivateTest,
|
| + NoGpuInfoUpdateWithSwiftShader);
|
| + FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplPrivateTest,
|
| + GPUVideoMemoryUsageStatsUpdate);
|
| + FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplPrivateTest,
|
| + BlockAllDomainsFrom3DAPIs);
|
| + FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplPrivateTest,
|
| + UnblockGuiltyDomainFrom3DAPIs);
|
| + FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplPrivateTest,
|
| + UnblockDomainOfUnknownGuiltFrom3DAPIs);
|
| + FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplPrivateTest,
|
| + UnblockOtherDomainFrom3DAPIs);
|
| + FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplPrivateTest,
|
| + UnblockThisDomainFrom3DAPIs);
|
| +#if defined(OS_LINUX)
|
| + FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplPrivateTest,
|
| + SetGLStrings);
|
| + FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplPrivateTest,
|
| + SetGLStringsNoEffects);
|
| +#endif
|
| + FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplPrivateTest,
|
| + GpuDriverBugListSingle);
|
| + FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplPrivateTest,
|
| + GpuDriverBugListMultiple);
|
| + FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplPrivateTest,
|
| + BlacklistAllFeatures);
|
| +
|
| + struct DomainBlockEntry {
|
| + GpuDataManagerImpl::DomainGuilt last_guilt;
|
| + };
|
| +
|
| + typedef std::map<std::string, DomainBlockEntry> DomainBlockMap;
|
| +
|
| + typedef ObserverListThreadSafe<GpuDataManagerObserver>
|
| + GpuDataManagerObserverList;
|
| +
|
| + explicit GpuDataManagerImplPrivate(GpuDataManagerImpl* owner);
|
| +
|
| + void InitializeImpl(const std::string& gpu_blacklist_json,
|
| + const std::string& gpu_switching_list_json,
|
| + const std::string& gpu_driver_bug_list_json,
|
| + const GPUInfo& gpu_info);
|
| +
|
| + void UpdateBlacklistedFeatures(const std::set<int>& features);
|
| +
|
| + // This should only be called once at initialization time, when preliminary
|
| + // gpu info is collected.
|
| + void UpdatePreliminaryBlacklistedFeatures();
|
| +
|
| + // Update the GPU switching status.
|
| + // This should only be called once at initialization time.
|
| + void UpdateGpuSwitchingManager(const GPUInfo& gpu_info);
|
| +
|
| + // Notify all observers whenever there is a GPU info update.
|
| + void NotifyGpuInfoUpdate();
|
| +
|
| + // Try to switch to SwiftShader rendering, if possible and necessary.
|
| + void EnableSwiftShaderIfNecessary();
|
| +
|
| + // Helper to extract the domain from a given URL.
|
| + std::string GetDomainFromURL(const GURL& url) const;
|
| +
|
| + // Implementation functions for blocking of 3D graphics APIs, used
|
| + // for unit testing.
|
| + 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;
|
| +
|
| + bool complete_gpu_info_already_requested_;
|
| +
|
| + std::set<int> blacklisted_features_;
|
| + std::set<int> preliminary_blacklisted_features_;
|
| +
|
| + GpuSwitchingOption gpu_switching_;
|
| +
|
| + std::set<int> gpu_driver_bugs_;
|
| +
|
| + GPUInfo gpu_info_;
|
| +
|
| + scoped_ptr<GpuBlacklist> gpu_blacklist_;
|
| + scoped_ptr<GpuSwitchingList> gpu_switching_list_;
|
| + scoped_ptr<GpuDriverBugList> gpu_driver_bug_list_;
|
| +
|
| + const scoped_refptr<GpuDataManagerObserverList> observer_list_;
|
| +
|
| + ListValue log_messages_;
|
| +
|
| + bool use_swiftshader_;
|
| +
|
| + base::FilePath swiftshader_path_;
|
| +
|
| + // Current card force-blacklisted due to GPU crashes, or disabled through
|
| + // the --disable-gpu commandline switch.
|
| + bool card_blacklisted_;
|
| +
|
| + // We disable histogram stuff in testing, especially in unit tests because
|
| + // they cause random failures.
|
| + bool update_histograms_;
|
| +
|
| + // Number of currently open windows, to be used in gpu memory allocation.
|
| + int window_count_;
|
| +
|
| + DomainBlockMap blocked_domains_;
|
| + mutable std::list<base::Time> timestamps_of_gpu_resets_;
|
| + bool domain_blocking_enabled_;
|
| +
|
| + GpuDataManagerImpl* owner_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(GpuDataManagerImplPrivate);
|
| +};
|
| +
|
| +} // namespace content
|
| +
|
| +#endif // CONTENT_BROWSER_GPU_GPU_DATA_MANAGER_IMPL_PRIVATE_H_
|
| +
|
|
|
| Property changes on: content/browser/gpu/gpu_data_manager_impl_private.h
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|