diff options
author | kinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-28 08:28:04 +0000 |
---|---|---|
committer | kinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-28 08:28:04 +0000 |
commit | 28fb3081aaecd2abbdd9ed511ee7a9f03866461d (patch) | |
tree | b90c2b6769ca05a860cf209fc0f88a46fbc20302 /webkit/browser/fileapi/sandbox_file_system_backend_delegate.cc | |
parent | 4113a6555fab1995a9ab5b475bf96d74d00f582a (diff) | |
download | chromium_src-28fb3081aaecd2abbdd9ed511ee7a9f03866461d.zip chromium_src-28fb3081aaecd2abbdd9ed511ee7a9f03866461d.tar.gz chromium_src-28fb3081aaecd2abbdd9ed511ee7a9f03866461d.tar.bz2 |
Retry: Prepopulate primary origin's directory database if possible.
Before (with primary origin patch)
140~170 ms
After (excluding 1st launch for a new profile)
30~90 ms
The very first launch for a fresh profile is still slow as
it needs to go through full initialization.
BUG=306030
TEST=manual
TEST=valgrind
Review URL: https://codereview.chromium.org/44463002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@231294 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/browser/fileapi/sandbox_file_system_backend_delegate.cc')
-rw-r--r-- | webkit/browser/fileapi/sandbox_file_system_backend_delegate.cc | 38 |
1 files changed, 28 insertions, 10 deletions
diff --git a/webkit/browser/fileapi/sandbox_file_system_backend_delegate.cc b/webkit/browser/fileapi/sandbox_file_system_backend_delegate.cc index 6f1ff0e7..593e1a0 100644 --- a/webkit/browser/fileapi/sandbox_file_system_backend_delegate.cc +++ b/webkit/browser/fileapi/sandbox_file_system_backend_delegate.cc @@ -43,6 +43,11 @@ const char kTemporaryDirectoryName[] = "t"; const char kPersistentDirectoryName[] = "p"; const char kSyncableDirectoryName[] = "s"; +const char* kPrepopulateTypes[] = { + kPersistentDirectoryName, + kTemporaryDirectoryName +}; + enum FileSystemError { kOK = 0, kIncognito, @@ -129,6 +134,12 @@ void DidOpenFileSystem( callback.Run(*error); } +template <typename T> +void DeleteSoon(base::SequencedTaskRunner* runner, T* ptr) { + if (!runner->DeleteSoon(FROM_HERE, ptr)) + delete ptr; +} + } // namespace const base::FilePath::CharType @@ -178,21 +189,28 @@ SandboxFileSystemBackendDelegate::SandboxFileSystemBackendDelegate( file_system_options_(file_system_options), is_filesystem_opened_(false), weak_factory_(this) { + // Prepopulate database only if it can run asynchronously (i.e. the current + // thread is not file_task_runner). Usually this is the case but may not + // in test code. + if (!file_task_runner_->RunsTasksOnCurrentThread()) { + std::vector<std::string> types_to_prepopulate( + &kPrepopulateTypes[0], + &kPrepopulateTypes[arraysize(kPrepopulateTypes)]); + file_task_runner_->PostTask( + FROM_HERE, + base::Bind(&ObfuscatedFileUtil::MaybePrepopulateDatabase, + base::Unretained(obfuscated_file_util()), + types_to_prepopulate)); + } } SandboxFileSystemBackendDelegate::~SandboxFileSystemBackendDelegate() { io_thread_checker_.DetachFromThread(); + if (!file_task_runner_->RunsTasksOnCurrentThread()) { - AsyncFileUtil* sandbox_file_util = sandbox_file_util_.release(); - SandboxQuotaObserver* quota_observer = quota_observer_.release(); - FileSystemUsageCache* file_system_usage_cache = - file_system_usage_cache_.release(); - if (!file_task_runner_->DeleteSoon(FROM_HERE, sandbox_file_util)) - delete sandbox_file_util; - if (!file_task_runner_->DeleteSoon(FROM_HERE, quota_observer)) - delete quota_observer; - if (!file_task_runner_->DeleteSoon(FROM_HERE, file_system_usage_cache)) - delete file_system_usage_cache; + DeleteSoon(file_task_runner_.get(), sandbox_file_util_.release()); + DeleteSoon(file_task_runner_.get(), quota_observer_.release()); + DeleteSoon(file_task_runner_.get(), file_system_usage_cache_.release()); } } |