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

Unified Diff: net/reporting/reporting_cache.cc

Issue 2900553004: Reporting: Add histograms. (Closed)
Patch Set: rebase Created 3 years, 5 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 | « net/reporting/reporting_cache.h ('k') | net/reporting/reporting_cache_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/reporting/reporting_cache.cc
diff --git a/net/reporting/reporting_cache.cc b/net/reporting/reporting_cache.cc
index fe682f287fc31051f4a2e76d04e49ebafd16efde..87c270d62f4cbaec72c01b20db102e130fdabccc 100644
--- a/net/reporting/reporting_cache.cc
+++ b/net/reporting/reporting_cache.cc
@@ -50,7 +50,20 @@ class ReportingCacheImpl : public ReportingCache {
DCHECK(context_);
}
- ~ReportingCacheImpl() override {}
+ ~ReportingCacheImpl() override {
+ base::TimeTicks now = tick_clock()->NowTicks();
+
+ // Mark all undoomed reports as erased at shutdown, and record outcomes of
+ // all remaining reports (doomed or not).
+ for (auto it = reports_.begin(); it != reports_.end(); ++it) {
+ ReportingReport* report = it->second.get();
+ if (!base::ContainsKey(doomed_reports_, report))
+ report->outcome = ReportingReport::Outcome::ERASED_REPORTING_SHUT_DOWN;
+ report->RecordOutcome(now);
+ }
+
+ reports_.clear();
+ }
void AddReport(const GURL& url,
const std::string& group,
@@ -73,8 +86,8 @@ class ReportingCacheImpl : public ReportingCache {
// The newly-added report isn't pending, so even if all other reports are
// pending, the cache should have a report to evict.
DCHECK(!base::ContainsKey(pending_reports_, to_evict));
- size_t erased = reports_.erase(to_evict);
- DCHECK_EQ(1u, erased);
+ reports_[to_evict]->outcome = ReportingReport::Outcome::ERASED_EVICTED;
+ RemoveReportInternal(to_evict);
}
context_->NotifyCacheUpdated();
@@ -110,7 +123,8 @@ class ReportingCacheImpl : public ReportingCache {
}
}
- RemoveReports(reports_to_remove);
+ for (const ReportingReport* report : reports_to_remove)
+ RemoveReportInternal(report);
}
void IncrementReportsAttempts(
@@ -123,35 +137,34 @@ class ReportingCacheImpl : public ReportingCache {
context_->NotifyCacheUpdated();
}
- void RemoveReports(
- const std::vector<const ReportingReport*>& reports) override {
+ void RemoveReports(const std::vector<const ReportingReport*>& reports,
+ ReportingReport::Outcome outcome) override {
for (const ReportingReport* report : reports) {
+ reports_[report]->outcome = outcome;
if (base::ContainsKey(pending_reports_, report)) {
doomed_reports_.insert(report);
} else {
DCHECK(!base::ContainsKey(doomed_reports_, report));
- size_t erased = reports_.erase(report);
- DCHECK_EQ(1u, erased);
+ RemoveReportInternal(report);
}
}
context_->NotifyCacheUpdated();
}
- void RemoveAllReports() override {
- std::vector<std::unordered_map<const ReportingReport*,
- std::unique_ptr<ReportingReport>>::iterator>
- reports_to_remove;
+ void RemoveAllReports(ReportingReport::Outcome outcome) override {
+ std::vector<const ReportingReport*> reports_to_remove;
for (auto it = reports_.begin(); it != reports_.end(); ++it) {
ReportingReport* report = it->second.get();
+ report->outcome = outcome;
if (!base::ContainsKey(pending_reports_, report))
- reports_to_remove.push_back(it);
+ reports_to_remove.push_back(report);
else
doomed_reports_.insert(report);
}
- for (auto& it : reports_to_remove)
- reports_.erase(it);
+ for (const ReportingReport* report : reports_to_remove)
+ RemoveReportInternal(report);
context_->NotifyCacheUpdated();
}
@@ -314,6 +327,12 @@ class ReportingCacheImpl : public ReportingCache {
base::TickClock* tick_clock() { return context_->tick_clock(); }
+ void RemoveReportInternal(const ReportingReport* report) {
+ reports_[report]->RecordOutcome(tick_clock()->NowTicks());
+ size_t erased = reports_.erase(report);
+ DCHECK_EQ(1u, erased);
+ }
+
const ReportingReport* FindReportToEvict() const {
const ReportingReport* earliest_queued = nullptr;
« no previous file with comments | « net/reporting/reporting_cache.h ('k') | net/reporting/reporting_cache_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698