Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(931)

Unified Diff: content/browser/gpu/gpu_data_manager_impl.h

Issue 17565002: Merge crbug.com/232556 to M28 branch (1500). (Closed) Base URL: svn://svn.chromium.org/chrome/branches/1500/src/
Patch Set: Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | content/browser/gpu/gpu_data_manager_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/gpu/gpu_data_manager_impl.h
===================================================================
--- content/browser/gpu/gpu_data_manager_impl.h (revision 207877)
+++ content/browser/gpu/gpu_data_manager_impl.h (working copy)
@@ -1,30 +1,22 @@
-// 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_
-#include <list>
-#include <map>
-#include <set>
#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/logging.h"
+#include "base/memory/scoped_ptr.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_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"
@@ -37,6 +29,8 @@
namespace content {
+class GpuDataManagerImplPrivate;
+
class CONTENT_EXPORT GpuDataManagerImpl
: public NON_EXPORTED_BASE(GpuDataManager) {
public:
@@ -163,134 +157,49 @@
// Disables domain blocking for 3D APIs. For use only in tests.
void DisableDomainBlockingFor3DAPIsForTesting();
+ void Notify3DAPIBlocked(const GURL& url,
+ int render_process_id,
+ int render_view_id,
+ ThreeDAPIType requester);
+
// 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;
- };
+ friend class GpuDataManagerImplPrivate;
+ friend class GpuDataManagerImplPrivateTest;
+ friend struct DefaultSingletonTraits<GpuDataManagerImpl>;
- typedef std::map<std::string, DomainBlockEntry> DomainBlockMap;
+ // It's similar to AutoUnlock, but we want to make it a no-op
+ // if the owner GpuDataManagerImpl is null.
+ // This should only be used by GpuDataManagerImplPrivate where
+ // callbacks are called, during which re-entering
+ // GpuDataManagerImpl is possible.
+ class UnlockedSession {
+ public:
+ explicit UnlockedSession(GpuDataManagerImpl* owner)
+ : owner_(owner) {
+ DCHECK(owner_);
+ owner_->lock_.AssertAcquired();
+ owner_->lock_.Release();
+ }
- typedef ObserverListThreadSafe<GpuDataManagerObserver>
- GpuDataManagerObserverList;
+ ~UnlockedSession() {
+ DCHECK(owner_);
+ owner_->lock_.Acquire();
+ }
- friend class GpuDataManagerImplTest;
- friend struct DefaultSingletonTraits<GpuDataManagerImpl>;
+ private:
+ GpuDataManagerImpl* owner_;
+ DISALLOW_COPY_AND_ASSIGN(UnlockedSession);
+ };
- FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplTest, GpuSideBlacklisting);
- FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplTest, GpuSideExceptions);
- FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplTest,
- DisableHardwareAcceleration);
- FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplTest, SwiftShaderRendering);
- FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplTest, SwiftShaderRendering2);
- FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplTest, GpuInfoUpdate);
- FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplTest,
- NoGpuInfoUpdateWithSwiftShader);
- FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplTest,
- GPUVideoMemoryUsageStatsUpdate);
- FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplTest,
- BlockAllDomainsFrom3DAPIs);
- FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplTest,
- UnblockGuiltyDomainFrom3DAPIs);
- FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplTest,
- UnblockDomainOfUnknownGuiltFrom3DAPIs);
- FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplTest,
- UnblockOtherDomainFrom3DAPIs);
- FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplTest,
- UnblockThisDomainFrom3DAPIs);
- FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplTest, GpuDriverBugListSingle);
- FRIEND_TEST_ALL_PREFIXES(GpuDataManagerImplTest, GpuDriverBugListMultiple);
-
GpuDataManagerImpl();
virtual ~GpuDataManagerImpl();
- 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);
+ mutable base::Lock lock_;
+ scoped_ptr<GpuDataManagerImplPrivate> private_;
- 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, DomainGuilt guilt, base::Time at_time);
- DomainBlockStatus Are3DAPIsBlockedAtTime(
- const GURL& url, base::Time at_time) const;
- int64 GetBlockAllDomainsDurationInMs() const;
-
- void Notify3DAPIBlocked(const GURL& url,
- int render_process_id,
- int render_view_id,
- ThreeDAPIType requester);
-
- 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_;
- mutable base::Lock gpu_info_lock_;
-
- 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_;
- mutable base::Lock log_messages_lock_;
-
- 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_;
-
- std::vector<GpuSwitchCallback> gpu_switch_callbacks_;
-
DISALLOW_COPY_AND_ASSIGN(GpuDataManagerImpl);
};
« no previous file with comments | « no previous file | content/browser/gpu/gpu_data_manager_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698