// Copyright 2017 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "net/reporting/reporting_report.h" #include #include #include #include "base/metrics/histogram_macros.h" #include "base/time/time.h" #include "base/values.h" #include "url/gurl.h" namespace net { namespace { void RecordReportOutcome(ReportingReport::Outcome outcome) { UMA_HISTOGRAM_ENUMERATION("Net.Reporting.ReportOutcome", outcome, ReportingReport::Outcome::MAX); } } // namespace ReportingReport::ReportingReport(const GURL& url, const std::string& group, const std::string& type, std::unique_ptr body, int depth, base::TimeTicks queued, int attempts) : url(url), group(group), type(type), body(std::move(body)), depth(depth), queued(queued), attempts(attempts), outcome(Outcome::UNKNOWN), recorded_outcome(false) {} ReportingReport::~ReportingReport() { DCHECK(recorded_outcome); } // static void ReportingReport::RecordReportDiscardedForNoURLRequestContext() { RecordReportOutcome(Outcome::DISCARDED_NO_URL_REQUEST_CONTEXT); } // static void ReportingReport::RecordReportDiscardedForNoReportingService() { RecordReportOutcome(Outcome::DISCARDED_NO_REPORTING_SERVICE); } void ReportingReport::RecordOutcome(base::TimeTicks now) { DCHECK(!recorded_outcome); RecordReportOutcome(outcome); if (outcome == Outcome::DELIVERED) { UMA_HISTOGRAM_LONG_TIMES_100("Net.Reporting.ReportDeliveredLatency", now - queued); UMA_HISTOGRAM_COUNTS_100("Net.Reporting.ReportDeliveredAttempts", attempts); } recorded_outcome = true; } } // namespace net