diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-12 14:27:29 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-13 09:35:20 +0000 |
commit | c30a6232df03e1efbd9f3b226777b07e087a1122 (patch) | |
tree | e992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/components/performance_manager/persistence | |
parent | 7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff) | |
download | qtwebengine-chromium-85-based.tar.gz |
BASELINE: Update Chromium to 85.0.4183.14085-based
Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/components/performance_manager/persistence')
10 files changed, 83 insertions, 138 deletions
diff --git a/chromium/components/performance_manager/persistence/site_data/non_recording_site_data_cache.cc b/chromium/components/performance_manager/persistence/site_data/non_recording_site_data_cache.cc index a207284070d..73c5d04f659 100644 --- a/chromium/components/performance_manager/persistence/site_data/non_recording_site_data_cache.cc +++ b/chromium/components/performance_manager/persistence/site_data/non_recording_site_data_cache.cc @@ -43,10 +43,14 @@ std::unique_ptr<SiteDataWriter> NonRecordingSiteDataCache::GetWriterForOrigin( return base::WrapUnique(writer); } -bool NonRecordingSiteDataCache::IsRecordingForTesting() { +bool NonRecordingSiteDataCache::IsRecordingForTesting() const { return false; } +int NonRecordingSiteDataCache::Size() const { + return 0; +} + const char* NonRecordingSiteDataCache::GetDataCacheName() { return "NonRecordingSiteDataCache"; } diff --git a/chromium/components/performance_manager/persistence/site_data/non_recording_site_data_cache.h b/chromium/components/performance_manager/persistence/site_data/non_recording_site_data_cache.h index 72295ec5058..faea2ccdf03 100644 --- a/chromium/components/performance_manager/persistence/site_data/non_recording_site_data_cache.h +++ b/chromium/components/performance_manager/persistence/site_data/non_recording_site_data_cache.h @@ -32,7 +32,8 @@ class NonRecordingSiteDataCache : public SiteDataCache, std::unique_ptr<SiteDataWriter> GetWriterForOrigin( const url::Origin& origin, performance_manager::TabVisibility tab_visibility) override; - bool IsRecordingForTesting() override; + bool IsRecordingForTesting() const override; + int Size() const override; // SiteDataCacheInspector: const char* GetDataCacheName() override; diff --git a/chromium/components/performance_manager/persistence/site_data/site_data_cache.h b/chromium/components/performance_manager/persistence/site_data/site_data_cache.h index f37d0997fa1..6e1c430f4ad 100644 --- a/chromium/components/performance_manager/persistence/site_data/site_data_cache.h +++ b/chromium/components/performance_manager/persistence/site_data/site_data_cache.h @@ -36,7 +36,10 @@ class SiteDataCache { // Indicate if the SiteDataWriter served by this data cache // actually persist information. - virtual bool IsRecordingForTesting() = 0; + virtual bool IsRecordingForTesting() const = 0; + + // Returns the number of element in the cache. + virtual int Size() const = 0; private: DISALLOW_COPY_AND_ASSIGN(SiteDataCache); diff --git a/chromium/components/performance_manager/persistence/site_data/site_data_cache_factory.cc b/chromium/components/performance_manager/persistence/site_data/site_data_cache_factory.cc index 6789c9b60f2..a66ba58b3b0 100644 --- a/chromium/components/performance_manager/persistence/site_data/site_data_cache_factory.cc +++ b/chromium/components/performance_manager/persistence/site_data/site_data_cache_factory.cc @@ -23,55 +23,25 @@ namespace { SiteDataCacheFactory* g_instance = nullptr; } // namespace -SiteDataCacheFactory* SiteDataCacheFactory::GetInstance() { - return g_instance; -} - SiteDataCacheFactory::SiteDataCacheFactory() { - DETACH_FROM_SEQUENCE(sequence_checker_); - DCHECK_EQ(nullptr, g_instance); + DCHECK(!g_instance); g_instance = this; } SiteDataCacheFactory::~SiteDataCacheFactory() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_EQ(this, g_instance); + // Clear the cache map before unsetting |g_instance| as this will cause some + // calls to |SetDataCacheInspectorForBrowserContext|. + data_cache_map_.clear(); + for (const auto& iter : data_cache_map_) + DCHECK_EQ(0, iter.second->Size()); g_instance = nullptr; } // static -void SiteDataCacheFactory::OnBrowserContextCreatedOnUIThread( - SiteDataCacheFactory* factory, - content::BrowserContext* browser_context, - content::BrowserContext* parent_context) { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - DCHECK(factory); - - // As |factory| will be deleted on its task runner it's safe to pass the raw - // pointer to BindOnce, it's guaranteed that this task will run before the - // factory. - base::Optional<std::string> parent_context_id; - if (parent_context) { - DCHECK(browser_context->IsOffTheRecord()); - parent_context_id = parent_context->UniqueId(); - } - PerformanceManagerImpl::CallOnGraphImpl( - FROM_HERE, - base::BindOnce(&SiteDataCacheFactory::OnBrowserContextCreated, - base::Unretained(factory), browser_context->UniqueId(), - browser_context->GetPath(), parent_context_id)); -} - -// static -void SiteDataCacheFactory::OnBrowserContextDestroyedOnUIThread( - SiteDataCacheFactory* factory, - content::BrowserContext* browser_context) { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - DCHECK(factory); - PerformanceManagerImpl::CallOnGraphImpl( - FROM_HERE, - base::BindOnce(&SiteDataCacheFactory::OnBrowserContextDestroyed, - base::Unretained(factory), browser_context->UniqueId())); +SiteDataCacheFactory* SiteDataCacheFactory::GetInstance() { + return g_instance; } SiteDataCache* SiteDataCacheFactory::GetDataCacheForBrowserContext( @@ -106,35 +76,29 @@ void SiteDataCacheFactory::SetDataCacheInspectorForBrowserContext( } } -void SiteDataCacheFactory::IsDataCacheRecordingForTesting( - const std::string& browser_context_id, - base::OnceCallback<void(bool)> cb) { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - PerformanceManagerImpl::CallOnGraphImpl( - FROM_HERE, base::BindOnce( - [](SiteDataCacheFactory* factory, - const std::string& browser_context_id, - base::OnceCallback<void(bool)> cb) { - auto it = - factory->data_cache_map_.find(browser_context_id); - CHECK(it != factory->data_cache_map_.end()); - std::move(cb).Run(it->second->IsRecordingForTesting()); - }, - this, browser_context_id, std::move(cb))); +bool SiteDataCacheFactory::IsDataCacheRecordingForTesting( + const std::string& browser_context_id) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + auto it = data_cache_map_.find(browser_context_id); + CHECK(it != data_cache_map_.end()); + return it->second->IsRecordingForTesting(); } -void SiteDataCacheFactory::ReplaceCacheForTesting( +void SiteDataCacheFactory::SetCacheForTesting( const std::string& browser_context_id, - std::unique_ptr<SiteDataCacheImpl> cache) { + std::unique_ptr<SiteDataCache> cache) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - auto* cache_raw = cache.get(); - DCHECK(base::Contains(data_cache_map_, browser_context_id)); data_cache_map_.erase(browser_context_id); data_cache_map_.emplace(browser_context_id, std::move(cache)); +} +void SiteDataCacheFactory::SetCacheInspectorForTesting( + const std::string& browser_context_id, + SiteDataCacheInspector* inspector) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(!base::Contains(data_cache_inspector_map_, browser_context_id)); - data_cache_inspector_map_.emplace(browser_context_id, cache_raw); + data_cache_inspector_map_.emplace(browser_context_id, inspector); } void SiteDataCacheFactory::OnBrowserContextCreated( diff --git a/chromium/components/performance_manager/persistence/site_data/site_data_cache_factory.h b/chromium/components/performance_manager/persistence/site_data/site_data_cache_factory.h index 2173d53f449..9d9c89586f2 100644 --- a/chromium/components/performance_manager/persistence/site_data/site_data_cache_factory.h +++ b/chromium/components/performance_manager/persistence/site_data/site_data_cache_factory.h @@ -17,7 +17,6 @@ #include "base/sequence_checker.h" #include "base/sequenced_task_runner.h" #include "components/performance_manager/persistence/site_data/site_data_cache.h" -#include "components/performance_manager/public/graph/graph.h" #include "content/public/browser/browser_context.h" namespace content { @@ -27,53 +26,26 @@ class BrowserContext; namespace performance_manager { class SiteDataCacheInspector; -class SiteDataCacheImpl; // This class is responsible for tracking the SiteDataCache instances associated -// with each browser context. It is meant to be used as a bridge between the -// browser contexts living on the UI thread and the PerformanceManager -// sequence. -// -// This can be created on any sequence but it then should be passed to the -// graph and used on the PerformanceManager sequence. -class SiteDataCacheFactory : public GraphOwnedDefaultImpl { +// with each browser context. Instances of this class should be created and used +// from the same sequence (this is enforced via a sequence checker). It is the +// counterpart of the SiteDataCacheFacadeFactory living on the UI thread. +class SiteDataCacheFactory { public: SiteDataCacheFactory(); - ~SiteDataCacheFactory() override; + ~SiteDataCacheFactory(); - // Retrieves the currently registered instance. - // The caller needs to ensure that the lifetime of the registered instance - // exceeds the use of this function and the retrieved pointer. - // This function can be called from any sequence with those caveats. + // Returns a pointer to the global instance. static SiteDataCacheFactory* GetInstance(); - // Functions that should be called when a new browser context is created or - // destroyed. They should be called from the UI thread, a task will then be - // posted to the task_runner owned by |factory| to create the data store - // associated with this browser context. - // - // If this browser context is inheriting from a parent context (e.g. if it's - // off the record) then this parent context should be specified via - // |parent_context|. - static void OnBrowserContextCreatedOnUIThread( - SiteDataCacheFactory* factory, - content::BrowserContext* browser_context, - content::BrowserContext* parent_context); - static void OnBrowserContextDestroyedOnUIThread( - SiteDataCacheFactory* factory, - content::BrowserContext* browser_context); - // Returns a pointer to the data cache associated with |browser_context_id|, // or null if there's no cache for this context yet. - // - // Should only be called from the Performance Manager sequence. SiteDataCache* GetDataCacheForBrowserContext( const std::string& browser_context_id) const; // Returns the data cache inspector associated with |browser_context_id|, or // null if there's no data cache inspector for this context yet. - // - // Should only be called from the Performance Manager sequence. SiteDataCacheInspector* GetInspectorForBrowserContext( const std::string& browser_context_id) const; @@ -83,23 +55,22 @@ class SiteDataCacheFactory : public GraphOwnedDefaultImpl { // |inspector| or |browser_context| are deleted. // The intent is for this to be called from the SiteDataCache implementation // class' constructors and destructors. - // - // Should only be called from the Performance Manager sequence. void SetDataCacheInspectorForBrowserContext( SiteDataCacheInspector* inspector, const std::string& browser_context_id); // Testing functions to check if the data cache associated with - // |browser_context_id| is recording. This will be completed asynchronously - // and |cb| will be called on the caller's sequence. This should be called - // only on the UI thread. - void IsDataCacheRecordingForTesting(const std::string& browser_context_id, - base::OnceCallback<void(bool)> cb); + // |browser_context_id| is recording. + bool IsDataCacheRecordingForTesting(const std::string& browser_context_id); - void ReplaceCacheForTesting(const std::string& browser_context_id, - std::unique_ptr<SiteDataCacheImpl> cache); + // Set the cache for a given browser context, this will replace any existing + // cache. + void SetCacheForTesting(const std::string& browser_context_id, + std::unique_ptr<SiteDataCache> cache); + + void SetCacheInspectorForTesting(const std::string& browser_context_id, + SiteDataCacheInspector* inspector); - private: // Implementation of the corresponding *OnUIThread public static functions // that runs on this object's task runner. void OnBrowserContextCreated(const std::string& browser_context_id, @@ -107,6 +78,7 @@ class SiteDataCacheFactory : public GraphOwnedDefaultImpl { base::Optional<std::string> parent_context_id); void OnBrowserContextDestroyed(const std::string& browser_context_id); + private: // A map that associates a BrowserContext's ID with a SiteDataCache. This // object owns the caches. base::flat_map<std::string, std::unique_ptr<SiteDataCache>> data_cache_map_; diff --git a/chromium/components/performance_manager/persistence/site_data/site_data_cache_factory_unittest.cc b/chromium/components/performance_manager/persistence/site_data/site_data_cache_factory_unittest.cc index 4383f02159c..a8b23f675bf 100644 --- a/chromium/components/performance_manager/persistence/site_data/site_data_cache_factory_unittest.cc +++ b/chromium/components/performance_manager/persistence/site_data/site_data_cache_factory_unittest.cc @@ -9,10 +9,12 @@ #include "base/macros.h" #include "base/memory/ptr_util.h" +#include "base/optional.h" #include "base/run_loop.h" #include "base/sequenced_task_runner.h" #include "base/task/post_task.h" #include "base/test/bind_test_util.h" +#include "base/threading/sequence_bound.h" #include "components/performance_manager/performance_manager_impl.h" #include "content/public/test/browser_task_environment.h" #include "content/public/test/test_browser_context.h" @@ -23,59 +25,49 @@ namespace performance_manager { TEST(SiteDataCacheFactoryTest, EndToEnd) { content::BrowserTaskEnvironment task_environment; auto performance_manager = PerformanceManagerImpl::Create(base::DoNothing()); - std::unique_ptr<SiteDataCacheFactory> factory = - std::make_unique<SiteDataCacheFactory>(); - SiteDataCacheFactory* factory_raw = factory.get(); - PerformanceManagerImpl::CallOnGraphImpl( - FROM_HERE, - base::BindOnce( - [](std::unique_ptr<SiteDataCacheFactory> site_data_cache_factory, - performance_manager::GraphImpl* graph) { - graph->PassToGraph(std::move(site_data_cache_factory)); - }, - std::move(factory))); + base::SequenceBound<SiteDataCacheFactory> cache_factory( + PerformanceManager::GetTaskRunner()); content::TestBrowserContext browser_context; - SiteDataCacheFactory::OnBrowserContextCreatedOnUIThread( - factory_raw, &browser_context, nullptr); + cache_factory.Post(FROM_HERE, &SiteDataCacheFactory::OnBrowserContextCreated, + browser_context.UniqueId(), browser_context.GetPath(), + base::nullopt); { base::RunLoop run_loop; - PerformanceManagerImpl::CallOnGraphImpl( + cache_factory.PostTaskWithThisObject( FROM_HERE, base::BindOnce( - [](SiteDataCacheFactory* factory, - const std::string& browser_context_id, - base::OnceClosure quit_closure) { - DCHECK_NE(nullptr, factory->GetDataCacheForBrowserContext( + [](const std::string& browser_context_id, + base::OnceClosure quit_closure, SiteDataCacheFactory* factory) { + EXPECT_TRUE(factory); + EXPECT_NE(nullptr, factory->GetDataCacheForBrowserContext( browser_context_id)); - DCHECK_NE(nullptr, factory->GetInspectorForBrowserContext( + EXPECT_NE(nullptr, factory->GetInspectorForBrowserContext( browser_context_id)); std::move(quit_closure).Run(); }, - base::Unretained(factory_raw), browser_context.UniqueId(), - run_loop.QuitClosure())); + browser_context.UniqueId(), run_loop.QuitClosure())); run_loop.Run(); } - SiteDataCacheFactory::OnBrowserContextDestroyedOnUIThread(factory_raw, - &browser_context); + cache_factory.Post(FROM_HERE, + &SiteDataCacheFactory::OnBrowserContextDestroyed, + browser_context.UniqueId()); { base::RunLoop run_loop; - PerformanceManagerImpl::CallOnGraphImpl( + cache_factory.PostTaskWithThisObject( FROM_HERE, base::BindOnce( - [](SiteDataCacheFactory* factory, - const std::string& browser_context_id, - base::OnceClosure quit_closure) { - DCHECK_EQ(nullptr, factory->GetDataCacheForBrowserContext( + [](const std::string& browser_context_id, + base::OnceClosure quit_closure, SiteDataCacheFactory* factory) { + EXPECT_EQ(nullptr, factory->GetDataCacheForBrowserContext( browser_context_id)); - DCHECK_EQ(nullptr, factory->GetInspectorForBrowserContext( + EXPECT_EQ(nullptr, factory->GetInspectorForBrowserContext( browser_context_id)); std::move(quit_closure).Run(); }, - base::Unretained(factory_raw), browser_context.UniqueId(), - run_loop.QuitClosure())); + browser_context.UniqueId(), run_loop.QuitClosure())); run_loop.Run(); } diff --git a/chromium/components/performance_manager/persistence/site_data/site_data_cache_impl.cc b/chromium/components/performance_manager/persistence/site_data/site_data_cache_impl.cc index fafd3036fdb..96ab9fcfb97 100644 --- a/chromium/components/performance_manager/persistence/site_data/site_data_cache_impl.cc +++ b/chromium/components/performance_manager/persistence/site_data/site_data_cache_impl.cc @@ -63,11 +63,16 @@ std::unique_ptr<SiteDataWriter> SiteDataCacheImpl::GetWriterForOrigin( return base::WrapUnique(data_writer); } -bool SiteDataCacheImpl::IsRecordingForTesting() { +bool SiteDataCacheImpl::IsRecordingForTesting() const { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); return true; } +int SiteDataCacheImpl::Size() const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + return origin_data_map_.size(); +} + const char* SiteDataCacheImpl::GetDataCacheName() { return "SiteDataCache"; } diff --git a/chromium/components/performance_manager/persistence/site_data/site_data_cache_impl.h b/chromium/components/performance_manager/persistence/site_data/site_data_cache_impl.h index 587ce99fdc9..508ad2e16ba 100644 --- a/chromium/components/performance_manager/persistence/site_data/site_data_cache_impl.h +++ b/chromium/components/performance_manager/persistence/site_data/site_data_cache_impl.h @@ -43,7 +43,8 @@ class SiteDataCacheImpl : public SiteDataCache, std::unique_ptr<SiteDataWriter> GetWriterForOrigin( const url::Origin& origin, performance_manager::TabVisibility tab_visibility) override; - bool IsRecordingForTesting() override; + bool IsRecordingForTesting() const override; + int Size() const override; const SiteDataMap& origin_data_map_for_testing() const { return origin_data_map_; diff --git a/chromium/components/performance_manager/persistence/site_data/site_data_impl.h b/chromium/components/performance_manager/persistence/site_data/site_data_impl.h index 55620e18649..eef1eb145af 100644 --- a/chromium/components/performance_manager/persistence/site_data/site_data_impl.h +++ b/chromium/components/performance_manager/persistence/site_data/site_data_impl.h @@ -27,6 +27,7 @@ namespace performance_manager { class SiteDataCacheImpl; class SiteDataReaderTest; class SiteDataWriterTest; +class MockDataCache; FORWARD_DECLARE_TEST(SiteDataReaderTest, DestroyingReaderCancelsPendingCallbacks); @@ -155,6 +156,7 @@ class SiteDataImpl : public base::RefCounted<SiteDataImpl> { friend class SiteDataImplTest; friend class performance_manager::SiteDataReaderTest; friend class performance_manager::SiteDataWriterTest; + friend class performance_manager::MockDataCache; SiteDataImpl(const url::Origin& origin, OnDestroyDelegate* delegate, diff --git a/chromium/components/performance_manager/persistence/site_data/site_data_writer.h b/chromium/components/performance_manager/persistence/site_data/site_data_writer.h index 7bd7176d4fa..eca8da39dd1 100644 --- a/chromium/components/performance_manager/persistence/site_data/site_data_writer.h +++ b/chromium/components/performance_manager/persistence/site_data/site_data_writer.h @@ -43,6 +43,7 @@ class SiteDataWriter { protected: friend class SiteDataWriterTest; friend class SiteDataCacheImpl; + friend class LenientMockDataWriter; // Protected constructor, these objects are meant to be created by a site data // store. |