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

Unified Diff: chrome/browser/data_use_measurement/chrome_data_use_ascriber.cc

Issue 2507813003: Periodically remove old pending navigation entries.
Patch Set: Sync Created 4 years, 1 month 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/browser/data_use_measurement/chrome_data_use_ascriber.cc
diff --git a/chrome/browser/data_use_measurement/chrome_data_use_ascriber.cc b/chrome/browser/data_use_measurement/chrome_data_use_ascriber.cc
index a41f0296c23da9b94cc5a08cd2084f2128059a3c..dddd21ebce12827cbb6e2696f9253df1e7dfdcc3 100644
--- a/chrome/browser/data_use_measurement/chrome_data_use_ascriber.cc
+++ b/chrome/browser/data_use_measurement/chrome_data_use_ascriber.cc
@@ -16,8 +16,14 @@
#include "content/public/common/browser_side_navigation_policy.h"
#include "net/url_request/url_request.h"
-namespace data_use_measurement {
+namespace {
+const base::TimeDelta kDiscardPendingNavigationsThreshold =
+ base::TimeDelta::FromSeconds(5);
+const base::TimeDelta kDiscardPendingNavigationsInterval =
+ base::TimeDelta::FromSeconds(10);
+}
+namespace data_use_measurement {
// static
const void* ChromeDataUseAscriber::DataUseRecorderEntryAsUserData::
kUserDataKey = static_cast<void*>(
@@ -36,7 +42,9 @@ ChromeDataUseAscriber::ChromeDataUseAscriber() {
ChromeDataUseAscriber::~ChromeDataUseAscriber() {
DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
- DCHECK_EQ(0u, data_use_recorders_.size());
+ DCHECK_EQ(0u, render_frame_data_use_map_.size());
+ DCHECK_EQ(pending_navigation_data_use_map_.size(),
+ data_use_recorders_.size());
}
DataUseRecorder* ChromeDataUseAscriber::GetDataUseRecorder(
@@ -96,6 +104,8 @@ void ChromeDataUseAscriber::OnBeforeUrlRequest(net::URLRequest* request) {
new DataUseRecorderEntryAsUserData(entry));
pending_navigation_data_use_map_.insert(
std::make_pair(request_info->GetGlobalRequestID(), entry));
+
+ DeleteOldPendingNavigationEntries(base::Time::Now());
}
void ChromeDataUseAscriber::OnUrlRequestDestroyed(net::URLRequest* request) {
@@ -190,4 +200,26 @@ ChromeDataUseAscriber::CreateURLRequestClassifier() const {
return base::MakeUnique<ContentURLRequestClassifier>();
}
+void ChromeDataUseAscriber::DeleteOldPendingNavigationEntries(base::Time now) {
+ if (last_pending_navigations_discard_time_ >
+ now + kDiscardPendingNavigationsInterval) {
+ return;
+ }
+ last_pending_navigations_discard_time_ = now;
+
+ for (auto iter = pending_navigation_data_use_map_.begin();
+ iter != pending_navigation_data_use_map_.end();) {
+ DataUseRecorderEntry entry = iter->second;
+ DataUseRecorder* recorder = (*entry).get();
+ const DataUse& data_use = (*entry)->data_use();
+ if (recorder->IsDataUseComplete() &&
+ data_use.start_time() <= now - kDiscardPendingNavigationsThreshold) {
+ data_use_recorders_.erase(entry);
+ iter = pending_navigation_data_use_map_.erase(iter);
+ } else {
+ iter++;
+ }
+ }
+}
+
} // namespace data_use_measurement

Powered by Google App Engine
This is Rietveld 408576698