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

Unified Diff: components/ukm/ukm_service.cc

Issue 2653693004: UKM Sync Observer (Closed)
Patch Set: Suppress recording and fix tests Created 3 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
Index: components/ukm/ukm_service.cc
diff --git a/components/ukm/ukm_service.cc b/components/ukm/ukm_service.cc
index 42bb7ad38383b0c53f7bc3c836dcd07392131ad2..a8e03b7d9fb44272f1a9dbf35fb20cbf73c809ae 100644
--- a/components/ukm/ukm_service.cc
+++ b/components/ukm/ukm_service.cc
@@ -69,17 +69,36 @@ std::string GetServerUrl() {
return kDefaultServerUrl;
}
+// Generates a new client id and stores it in prefs.
+uint64_t GenerateClientId(PrefService* pref_service) {
+ uint64_t client_id = 0;
+ while (!client_id)
+ client_id = base::RandUint64();
+ pref_service->SetInt64(prefs::kUkmClientId, client_id);
+ return client_id;
+}
+
uint64_t LoadOrGenerateClientId(PrefService* pref_service) {
uint64_t client_id = pref_service->GetInt64(prefs::kUkmClientId);
if (!client_id) {
Alexei Svitkine (slow) 2017/02/04 00:52:23 Nit: No {}
Steven Holte 2017/02/06 21:57:54 Done.
- // Generate and store a new client id.
- while (!client_id)
- client_id = base::RandUint64();
- pref_service->SetInt64(prefs::kUkmClientId, client_id);
+ client_id = GenerateClientId(pref_service);
}
return client_id;
}
+enum class DroppedSourceReason {
+ NOT_DROPPED = 0,
+ RECORDING_DISABLED = 1,
+ MAX_SOURCES_HIT = 2,
+ NUM_DROPPED_SOURCES_REASONS
+};
+
+void RecordDroppedSource(DroppedSourceReason reason) {
+ UMA_HISTOGRAM_ENUMERATION(
+ "UKM.Sources.Dropped", static_cast<int>(reason),
+ static_cast<int>(DroppedSourceReason::NUM_DROPPED_SOURCES_REASONS));
+}
+
} // namespace
const base::Feature kUkmFeature = {"Ukm", base::FEATURE_DISABLED_BY_DEFAULT};
@@ -87,6 +106,7 @@ const base::Feature kUkmFeature = {"Ukm", base::FEATURE_DISABLED_BY_DEFAULT};
UkmService::UkmService(PrefService* pref_service,
metrics::MetricsServiceClient* client)
: pref_service_(pref_service),
+ recording_enabled_(false),
client_(client),
persisted_logs_(std::unique_ptr<ukm::PersistedLogsMetricsImpl>(
new ukm::PersistedLogsMetricsImpl()),
@@ -131,6 +151,14 @@ void UkmService::Initialize() {
base::TimeDelta::FromSeconds(kInitializationDelaySeconds));
}
+void UkmService::EnableRecording() {
+ recording_enabled_ = true;
+}
+
+void UkmService::DisableRecording() {
+ recording_enabled_ = false;
+}
+
void UkmService::EnableReporting() {
DCHECK(thread_checker_.CalledOnValidThread());
DVLOG(1) << "UkmService::EnableReporting";
@@ -158,6 +186,10 @@ void UkmService::Purge() {
sources_.clear();
}
+void UkmService::ResetClientId() {
+ client_id_ = GenerateClientId(pref_service_);
+}
+
// static
void UkmService::RegisterPrefs(PrefRegistrySimple* registry) {
registry->RegisterInt64Pref(prefs::kUkmClientId, 0);
@@ -192,6 +224,10 @@ void UkmService::RotateLog() {
void UkmService::BuildAndStoreLog() {
DCHECK(thread_checker_.CalledOnValidThread());
DVLOG(1) << "UkmService::BuildAndStoreLog";
+ // Suppress generating a log if we have no new data to include.
+ if (sources_.empty())
+ return;
+
Report report;
report.set_client_id(client_id_);
@@ -262,8 +298,12 @@ void UkmService::OnLogUploadComplete(int response_code) {
}
void UkmService::RecordSource(std::unique_ptr<UkmSource> source) {
+ if (!recording_enabled_) {
+ RecordDroppedSource(DroppedSourceReason::RECORDING_DISABLED);
+ return;
+ }
if (sources_.size() >= kMaxSources) {
- UMA_HISTOGRAM_BOOLEAN("UKM.Sources.MaxSourcesHit", true);
+ RecordDroppedSource(DroppedSourceReason::MAX_SOURCES_HIT);
return;
}

Powered by Google App Engine
This is Rietveld 408576698