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 |