summaryrefslogtreecommitdiff
path: root/chromium/components/performance_manager/persistence
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-12 14:27:29 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-13 09:35:20 +0000
commitc30a6232df03e1efbd9f3b226777b07e087a1122 (patch)
treee992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/components/performance_manager/persistence
parent7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff)
downloadqtwebengine-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')
-rw-r--r--chromium/components/performance_manager/persistence/site_data/non_recording_site_data_cache.cc6
-rw-r--r--chromium/components/performance_manager/persistence/site_data/non_recording_site_data_cache.h3
-rw-r--r--chromium/components/performance_manager/persistence/site_data/site_data_cache.h5
-rw-r--r--chromium/components/performance_manager/persistence/site_data/site_data_cache_factory.cc80
-rw-r--r--chromium/components/performance_manager/persistence/site_data/site_data_cache_factory.h60
-rw-r--r--chromium/components/performance_manager/persistence/site_data/site_data_cache_factory_unittest.cc54
-rw-r--r--chromium/components/performance_manager/persistence/site_data/site_data_cache_impl.cc7
-rw-r--r--chromium/components/performance_manager/persistence/site_data/site_data_cache_impl.h3
-rw-r--r--chromium/components/performance_manager/persistence/site_data/site_data_impl.h2
-rw-r--r--chromium/components/performance_manager/persistence/site_data/site_data_writer.h1
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.