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

Unified Diff: content/browser/appcache/appcache_storage_impl.cc

Issue 924723002: [appcache] Don't write during startup. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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 | « content/browser/appcache/appcache_storage_impl.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/appcache/appcache_storage_impl.cc
diff --git a/content/browser/appcache/appcache_storage_impl.cc b/content/browser/appcache/appcache_storage_impl.cc
index 5df1d3ebdd15055a11c3b757d14a9070cdbf5f14..24a96504511a7b978c0ed3f821e90804c2eeb3ec 100644
--- a/content/browser/appcache/appcache_storage_impl.cc
+++ b/content/browser/appcache/appcache_storage_impl.cc
@@ -14,6 +14,7 @@
#include "base/files/file_util.h"
#include "base/logging.h"
#include "base/message_loop/message_loop.h"
+#include "base/profiler/scoped_tracker.h"
#include "base/single_thread_task_runner.h"
#include "base/stl_util.h"
#include "base/strings/string_util.h"
@@ -285,6 +286,8 @@ class AppCacheStorageImpl::InitTask : public DatabaseTask {
};
void AppCacheStorageImpl::InitTask::Run() {
+ tracked_objects::ScopedTracker tracking_profile(
+ FROM_HERE_WITH_EXPLICIT_FUNCTION("AppCacheStorageImpl::InitTask"));
// If there is no sql database, ensure there is no disk cache either.
if (!db_file_path_.empty() &&
!base::PathExists(db_file_path_) &&
@@ -310,12 +313,12 @@ void AppCacheStorageImpl::InitTask::RunCompleted() {
if (!storage_->is_disabled()) {
storage_->usage_map_.swap(usage_map_);
- const base::TimeDelta kDelay = base::TimeDelta::FromMinutes(5);
+ const base::TimeDelta k5Minutes = base::TimeDelta::FromMinutes(5);
cmumford 2015/02/17 19:26:39 My preference would be to have a name that describ
michaeln 2015/02/17 19:46:26 Done.
base::MessageLoop::current()->PostDelayedTask(
FROM_HERE,
base::Bind(&AppCacheStorageImpl::DelayedStartDeletingUnusedResponses,
storage_->weak_factory_.GetWeakPtr()),
- kDelay);
+ k5Minutes);
}
if (storage_->service()->quota_client())
@@ -357,6 +360,8 @@ class AppCacheStorageImpl::GetAllInfoTask : public DatabaseTask {
};
void AppCacheStorageImpl::GetAllInfoTask::Run() {
+ tracked_objects::ScopedTracker tracking_profile(
+ FROM_HERE_WITH_EXPLICIT_FUNCTION("AppCacheStorageImpl::GetAllInfoTask"));
std::set<GURL> origins;
database_->FindOriginsWithGroups(&origins);
for (std::set<GURL>::const_iterator origin = origins.begin();
@@ -512,14 +517,16 @@ class AppCacheStorageImpl::CacheLoadTask : public StoreOrLoadTask {
};
void AppCacheStorageImpl::CacheLoadTask::Run() {
+ tracked_objects::ScopedTracker tracking_profile(
+ FROM_HERE_WITH_EXPLICIT_FUNCTION("AppCacheStorageImpl::CacheLoadTask"));
success_ =
database_->FindCache(cache_id_, &cache_record_) &&
database_->FindGroup(cache_record_.group_id, &group_record_) &&
FindRelatedCacheRecords(cache_id_);
if (success_)
- database_->UpdateGroupLastAccessTime(group_record_.group_id,
- base::Time::Now());
+ database_->LazyUpdateLastAccessTime(group_record_.group_id,
+ base::Time::Now());
}
void AppCacheStorageImpl::CacheLoadTask::RunCompleted() {
@@ -527,6 +534,7 @@ void AppCacheStorageImpl::CacheLoadTask::RunCompleted() {
scoped_refptr<AppCache> cache;
scoped_refptr<AppCacheGroup> group;
if (success_ && !storage_->is_disabled()) {
+ storage_->LazilyCommitLastAccessTimes();
DCHECK(cache_record_.cache_id == cache_id_);
CreateCacheAndGroupFromRecords(&cache, &group);
}
@@ -554,14 +562,16 @@ class AppCacheStorageImpl::GroupLoadTask : public StoreOrLoadTask {
};
void AppCacheStorageImpl::GroupLoadTask::Run() {
+ tracked_objects::ScopedTracker tracking_profile(
+ FROM_HERE_WITH_EXPLICIT_FUNCTION("AppCacheStorageImpl::GroupLoadTask"));
success_ =
database_->FindGroupForManifestUrl(manifest_url_, &group_record_) &&
database_->FindCacheForGroup(group_record_.group_id, &cache_record_) &&
FindRelatedCacheRecords(cache_record_.cache_id);
if (success_)
- database_->UpdateGroupLastAccessTime(group_record_.group_id,
- base::Time::Now());
+ database_->LazyUpdateLastAccessTime(group_record_.group_id,
+ base::Time::Now());
}
void AppCacheStorageImpl::GroupLoadTask::RunCompleted() {
@@ -570,6 +580,7 @@ void AppCacheStorageImpl::GroupLoadTask::RunCompleted() {
scoped_refptr<AppCache> cache;
if (!storage_->is_disabled()) {
if (success_) {
+ storage_->LazilyCommitLastAccessTimes();
DCHECK(group_record_.manifest_url == manifest_url_);
CreateCacheAndGroupFromRecords(&cache, &group);
} else {
@@ -668,6 +679,9 @@ void AppCacheStorageImpl::StoreGroupAndCacheTask::OnQuotaCallback(
}
void AppCacheStorageImpl::StoreGroupAndCacheTask::Run() {
+ tracked_objects::ScopedTracker tracking_profile(
+ FROM_HERE_WITH_EXPLICIT_FUNCTION(
+ "AppCacheStorageImpl::StoreGroupAndCacheTask"));
DCHECK(!success_);
sql::Connection* connection = database_->db_connection();
if (!connection)
@@ -690,8 +704,8 @@ void AppCacheStorageImpl::StoreGroupAndCacheTask::Run() {
DCHECK(group_record_.manifest_url == existing_group.manifest_url);
DCHECK(group_record_.origin == existing_group.origin);
- database_->UpdateGroupLastAccessTime(group_record_.group_id,
- base::Time::Now());
+ database_->UpdateLastAccessTime(group_record_.group_id,
+ base::Time::Now());
AppCacheDatabase::CacheRecord cache;
if (database_->FindCacheForGroup(group_record_.group_id, &cache)) {
@@ -931,6 +945,9 @@ class AppCacheStorageImpl::FindMainResponseTask : public DatabaseTask {
};
void AppCacheStorageImpl::FindMainResponseTask::Run() {
+ tracked_objects::ScopedTracker tracking_profile(
+ FROM_HERE_WITH_EXPLICIT_FUNCTION(
+ "AppCacheStorageImpl::FindMainResponseTask"));
// NOTE: The heuristics around choosing amoungst multiple candidates
// is underspecified, and just plain not fully understood. This needs
// to be refined.
@@ -1114,6 +1131,9 @@ class AppCacheStorageImpl::MarkEntryAsForeignTask : public DatabaseTask {
};
void AppCacheStorageImpl::MarkEntryAsForeignTask::Run() {
+ tracked_objects::ScopedTracker tracking_profile(
+ FROM_HERE_WITH_EXPLICIT_FUNCTION(
+ "AppCacheStorageImpl::MarkEntryAsForeignTask"));
database_->AddEntryFlags(entry_url_, cache_id_, AppCacheEntry::FOREIGN);
}
@@ -1162,6 +1182,9 @@ AppCacheStorageImpl::MakeGroupObsoleteTask::MakeGroupObsoleteTask(
new_origin_usage_(-1) {}
void AppCacheStorageImpl::MakeGroupObsoleteTask::Run() {
+ tracked_objects::ScopedTracker tracking_profile(
+ FROM_HERE_WITH_EXPLICIT_FUNCTION(
+ "AppCacheStorageImpl::MakeGroupObsoleteTask"));
DCHECK(!success_);
sql::Connection* connection = database_->db_connection();
if (!connection)
@@ -1233,6 +1256,9 @@ class AppCacheStorageImpl::GetDeletableResponseIdsTask : public DatabaseTask {
};
void AppCacheStorageImpl::GetDeletableResponseIdsTask::Run() {
+ tracked_objects::ScopedTracker tracking_profile(
+ FROM_HERE_WITH_EXPLICIT_FUNCTION(
+ "AppCacheStorageImpl::GetDeletableResponseIdsTask"));
const int kSqlLimit = 1000;
database_->GetDeletableResponseIds(&response_ids_, max_rowid_, kSqlLimit);
// TODO(michaeln): retrieve group_ids too
@@ -1261,6 +1287,9 @@ class AppCacheStorageImpl::InsertDeletableResponseIdsTask
};
void AppCacheStorageImpl::InsertDeletableResponseIdsTask::Run() {
+ tracked_objects::ScopedTracker tracking_profile(
+ FROM_HERE_WITH_EXPLICIT_FUNCTION(
+ "AppCacheStorageImpl::InsertDeletableResponseIdsTask"));
database_->InsertDeletableResponseIds(response_ids_);
// TODO(michaeln): store group_ids too
}
@@ -1283,15 +1312,18 @@ class AppCacheStorageImpl::DeleteDeletableResponseIdsTask
};
void AppCacheStorageImpl::DeleteDeletableResponseIdsTask::Run() {
+ tracked_objects::ScopedTracker tracking_profile(
+ FROM_HERE_WITH_EXPLICIT_FUNCTION(
+ "AppCacheStorageImpl::DeleteDeletableResponseIdsTask"));
database_->DeleteDeletableResponseIds(response_ids_);
}
-// UpdateGroupLastAccessTimeTask -------
+// LazyUpdateLastAccessTimeTask -------
-class AppCacheStorageImpl::UpdateGroupLastAccessTimeTask
+class AppCacheStorageImpl::LazyUpdateLastAccessTimeTask
: public DatabaseTask {
public:
- UpdateGroupLastAccessTimeTask(
+ LazyUpdateLastAccessTimeTask(
AppCacheStorageImpl* storage, AppCacheGroup* group, base::Time time)
: DatabaseTask(storage), group_id_(group->group_id()),
last_access_time_(time) {
@@ -1300,19 +1332,43 @@ class AppCacheStorageImpl::UpdateGroupLastAccessTimeTask
// DatabaseTask:
void Run() override;
+ void RunCompleted() override;
protected:
- ~UpdateGroupLastAccessTimeTask() override {}
+ ~LazyUpdateLastAccessTimeTask() override {}
private:
int64 group_id_;
base::Time last_access_time_;
};
-void AppCacheStorageImpl::UpdateGroupLastAccessTimeTask::Run() {
- database_->UpdateGroupLastAccessTime(group_id_, last_access_time_);
+void AppCacheStorageImpl::LazyUpdateLastAccessTimeTask::Run() {
+ tracked_objects::ScopedTracker tracking_profile(
+ FROM_HERE_WITH_EXPLICIT_FUNCTION(
+ "AppCacheStorageImpl::UpdateGroupLastAccessTimeTask"));
+ database_->LazyUpdateLastAccessTime(group_id_, last_access_time_);
+}
+
+void AppCacheStorageImpl::LazyUpdateLastAccessTimeTask::RunCompleted() {
+ storage_->LazilyCommitLastAccessTimes();
}
+// CommitLastAccessTimesTask -------
+
+class AppCacheStorageImpl::CommitLastAccessTimesTask
+ : public DatabaseTask {
+ public:
+ CommitLastAccessTimesTask(AppCacheStorageImpl* storage)
+ : DatabaseTask(storage) {}
+
+ // DatabaseTask:
+ void Run() override {
+ database_->CommitLazyLastAccessTimes();
+ }
+
+ protected:
+ ~CommitLastAccessTimesTask() override {}
+};
// AppCacheStorageImpl ---------------------------------------------------
@@ -1400,7 +1456,7 @@ void AppCacheStorageImpl::LoadCache(int64 id, Delegate* delegate) {
delegate->OnCacheLoaded(cache, id);
if (cache->owning_group()) {
scoped_refptr<DatabaseTask> update_task(
- new UpdateGroupLastAccessTimeTask(
+ new LazyUpdateLastAccessTimeTask(
this, cache->owning_group(), base::Time::Now()));
update_task->Schedule();
}
@@ -1429,7 +1485,7 @@ void AppCacheStorageImpl::LoadOrCreateGroup(
if (group) {
delegate->OnGroupLoaded(group, manifest_url);
scoped_refptr<DatabaseTask> update_task(
- new UpdateGroupLastAccessTimeTask(
+ new LazyUpdateLastAccessTimeTask(
this, group, base::Time::Now()));
update_task->Schedule();
return;
@@ -1691,12 +1747,12 @@ void AppCacheStorageImpl::StartDeletingResponses(
void AppCacheStorageImpl::ScheduleDeleteOneResponse() {
DCHECK(!is_response_deletion_scheduled_);
- const base::TimeDelta kDelay = base::TimeDelta::FromMilliseconds(10);
+ const base::TimeDelta k10Millis = base::TimeDelta::FromMilliseconds(10);
base::MessageLoop::current()->PostDelayedTask(
FROM_HERE,
base::Bind(&AppCacheStorageImpl::DeleteOneResponse,
weak_factory_.GetWeakPtr()),
- kDelay);
+ k10Millis);
is_response_deletion_scheduled_ = true;
}
@@ -1863,4 +1919,21 @@ void AppCacheStorageImpl::CallScheduleReinitialize() {
// note: 'this' may be deleted at this point.
}
+void AppCacheStorageImpl::LazilyCommitLastAccessTimes() {
+ if (lazy_commit_timer_.IsRunning())
+ return;
+ const int k10Minutes = 10;
+ lazy_commit_timer_.Start(
+ FROM_HERE, base::TimeDelta::FromMinutes(k10Minutes),
+ base::Bind(&AppCacheStorageImpl::OnCommitLastAccessTimes,
+ weak_factory_.GetWeakPtr()));
+}
+
+void AppCacheStorageImpl::OnCommitLastAccessTimes() {
+ lazy_commit_timer_.Stop();
+ if (is_disabled())
+ return;
+ scoped_refptr<DatabaseTask> task(new CommitLastAccessTimesTask(this));
+ task->Schedule();
+}
cmumford 2015/02/17 19:26:39 Space
michaeln 2015/02/17 19:46:26 Done.
} // namespace content
« no previous file with comments | « content/browser/appcache/appcache_storage_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698