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

Unified Diff: chrome/common/json_pref_store.cc

Issue 11027070: Moved JsonPrefStore to use SequencedWorkerPool (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 8 years, 2 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
Index: chrome/common/json_pref_store.cc
diff --git a/chrome/common/json_pref_store.cc b/chrome/common/json_pref_store.cc
index ed30346ff048190d9ad004b210f14be3ffca8cf7..3c6a643ae6840ba1af70cbaee4334dbd95e39139 100644
--- a/chrome/common/json_pref_store.cc
+++ b/chrome/common/json_pref_store.cc
@@ -13,6 +13,8 @@
#include "base/json/json_string_value_serializer.h"
#include "base/memory/ref_counted.h"
#include "base/message_loop_proxy.h"
+#include "base/sequenced_task_runner.h"
+#include "base/threading/sequenced_worker_pool.h"
#include "base/values.h"
namespace {
@@ -26,25 +28,25 @@ class FileThreadDeserializer
: public base::RefCountedThreadSafe<FileThreadDeserializer> {
public:
FileThreadDeserializer(JsonPrefStore* delegate,
- base::MessageLoopProxy* file_loop_proxy)
+ base::SequencedTaskRunner* sequenced_task_runner)
: no_dir_(false),
error_(PersistentPrefStore::PREF_READ_ERROR_NONE),
delegate_(delegate),
- file_loop_proxy_(file_loop_proxy),
+ sequenced_task_runner_(sequenced_task_runner),
origin_loop_proxy_(base::MessageLoopProxy::current()) {
}
void Start(const FilePath& path) {
DCHECK(origin_loop_proxy_->BelongsToCurrentThread());
- file_loop_proxy_->PostTask(
+ sequenced_task_runner_->PostTask(
FROM_HERE,
base::Bind(&FileThreadDeserializer::ReadFileAndReport,
this, path));
}
- // Deserializes JSON on the file thread.
+ // Deserializes JSON on the sequenced task runner.
void ReadFileAndReport(const FilePath& path) {
- DCHECK(file_loop_proxy_->BelongsToCurrentThread());
+ DCHECK(sequenced_task_runner_->RunsTasksOnCurrentThread());
value_.reset(DoReading(path, &error_, &no_dir_));
@@ -84,9 +86,9 @@ class FileThreadDeserializer
bool no_dir_;
PersistentPrefStore::PrefReadError error_;
scoped_ptr<Value> value_;
- scoped_refptr<JsonPrefStore> delegate_;
- scoped_refptr<base::MessageLoopProxy> file_loop_proxy_;
- scoped_refptr<base::MessageLoopProxy> origin_loop_proxy_;
+ const scoped_refptr<JsonPrefStore> delegate_;
+ const scoped_refptr<base::SequencedTaskRunner> sequenced_task_runner_;
+ const scoped_refptr<base::MessageLoopProxy> origin_loop_proxy_;
};
// static
@@ -137,13 +139,25 @@ void FileThreadDeserializer::HandleErrors(
} // namespace
+scoped_refptr<base::SequencedTaskRunner> JsonPrefStore::GetTaskRunnerForFile(
+ const FilePath& filename, base::SequencedWorkerPool* worker_pool) {
Mattias Nissler (ping if slow) 2012/10/22 17:28:21 parameters on separate lines.
zel 2012/10/24 02:20:11 Done.
+ return worker_pool->GetSequencedTaskRunnerWithShutdownBehavior(
+ worker_pool->GetNamedSequenceToken(filename.AsUTF8Unsafe()),
Mattias Nissler (ping if slow) 2012/10/22 17:28:21 indentation
Mattias Nissler (ping if slow) 2012/10/22 17:28:21 The token name should probably be json_pref_store-
zel 2012/10/24 02:20:11 Done.
zel 2012/10/24 02:20:11 Done.
+ base::SequencedWorkerPool::BLOCK_SHUTDOWN);
+}
+
+JsonPrefStore* JsonPrefStore::Create(
+ const FilePath& filename, base::SequencedTaskRunner* task_runner) {
Mattias Nissler (ping if slow) 2012/10/22 17:28:21 ditto. Also, what is this factory function good f
zel 2012/10/24 02:20:11 long time ago it used to do waaay more but then CR
+ return new JsonPrefStore(filename, task_runner);
+}
+
JsonPrefStore::JsonPrefStore(const FilePath& filename,
- base::MessageLoopProxy* file_message_loop_proxy)
+ base::SequencedTaskRunner* sequenced_task_runner)
: path_(filename),
- file_message_loop_proxy_(file_message_loop_proxy),
+ sequenced_task_runner_(sequenced_task_runner),
prefs_(new DictionaryValue()),
read_only_(false),
- writer_(filename, file_message_loop_proxy),
+ writer_(filename, sequenced_task_runner),
error_delegate_(NULL),
initialized_(false),
read_error_(PREF_READ_ERROR_OTHER) {
@@ -245,7 +259,7 @@ void JsonPrefStore::ReadPrefsAsync(ReadErrorDelegate *error_delegate) {
// Start async reading of the preferences file. It will delete itself
// in the end.
scoped_refptr<FileThreadDeserializer> deserializer(
- new FileThreadDeserializer(this, file_message_loop_proxy_.get()));
+ new FileThreadDeserializer(this, sequenced_task_runner_.get()));
deserializer->Start(path_);
}

Powered by Google App Engine
This is Rietveld 408576698