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

Unified Diff: components/ukm/ukm_service.cc

Issue 2722983006: Add UKM initial_url and session_id fields. (Closed)
Patch Set: fix android build take 2 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
« no previous file with comments | « components/ukm/ukm_service.h ('k') | components/ukm/ukm_service_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/ukm/ukm_service.cc
diff --git a/components/ukm/ukm_service.cc b/components/ukm/ukm_service.cc
index bc682aa644008ffa1ce98b07984ec5dcf0491e2f..87176c714a5f3e4938b80cd0ec71ede2eeb7ca47 100644
--- a/components/ukm/ukm_service.cc
+++ b/components/ukm/ukm_service.cc
@@ -12,6 +12,7 @@
#include "base/feature_list.h"
#include "base/memory/ptr_util.h"
#include "base/metrics/field_trial.h"
+#include "base/metrics/field_trial_params.h"
#include "base/metrics/histogram_macros.h"
#include "base/rand_util.h"
#include "base/strings/string_number_conversions.h"
@@ -30,7 +31,6 @@
#include "components/ukm/ukm_entry_builder.h"
#include "components/ukm/ukm_pref_names.h"
#include "components/ukm/ukm_source.h"
-#include "components/variations/variations_associated_data.h"
namespace ukm {
@@ -71,18 +71,31 @@ const size_t kMaxEntries = 5000;
std::string GetServerUrl() {
std::string server_url =
- variations::GetVariationParamValueByFeature(kUkmFeature, "ServerUrl");
+ base::GetFieldTrialParamValueByFeature(kUkmFeature, "ServerUrl");
if (!server_url.empty())
return server_url;
return kDefaultServerUrl;
}
+bool ShouldRecordInitialUrl() {
+ return base::GetFieldTrialParamByFeatureAsBool(kUkmFeature,
+ "RecordInitialUrl", false);
+}
+
+bool ShouldRecordSessionId() {
+ return base::GetFieldTrialParamByFeatureAsBool(kUkmFeature, "RecordSessionId",
+ false);
+}
+
// 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);
+
+ // Also reset the session id counter.
+ pref_service->SetInteger(prefs::kUkmSessionId, 0);
return client_id;
}
@@ -93,6 +106,13 @@ uint64_t LoadOrGenerateClientId(PrefService* pref_service) {
return client_id;
}
+int32_t LoadSessionId(PrefService* pref_service) {
+ int32_t session_id = pref_service->GetInteger(prefs::kUkmSessionId);
+ ++session_id; // increment session id, once per session
+ pref_service->SetInteger(prefs::kUkmSessionId, session_id);
+ return session_id;
+}
+
enum class DroppedDataReason {
NOT_DROPPED = 0,
RECORDING_DISABLED = 1,
@@ -120,6 +140,8 @@ UkmService::UkmService(PrefService* pref_service,
metrics::MetricsServiceClient* client)
: pref_service_(pref_service),
recording_enabled_(false),
+ client_id_(0),
+ session_id_(0),
client_(client),
persisted_logs_(std::unique_ptr<ukm::PersistedLogsMetricsImpl>(
new ukm::PersistedLogsMetricsImpl()),
@@ -158,6 +180,7 @@ UkmService::~UkmService() {
void UkmService::Initialize() {
DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK(!initialize_started_);
DVLOG(1) << "UkmService::Initialize";
initialize_started_ = true;
@@ -244,8 +267,11 @@ void UkmService::Purge() {
entries_.clear();
}
+// TODO(bmcquade): rename this to something more generic, like
+// ResetClientState. Consider resetting all prefs here.
void UkmService::ResetClientId() {
client_id_ = GenerateClientId(pref_service_);
+ session_id_ = LoadSessionId(pref_service_);
}
void UkmService::RegisterMetricsProvider(
@@ -256,6 +282,7 @@ void UkmService::RegisterMetricsProvider(
// static
void UkmService::RegisterPrefs(PrefRegistrySimple* registry) {
registry->RegisterInt64Pref(prefs::kUkmClientId, 0);
+ registry->RegisterIntegerPref(prefs::kUkmSessionId, 0);
registry->RegisterListPref(prefs::kUkmPersistedLogs);
}
@@ -263,6 +290,7 @@ void UkmService::StartInitTask() {
DCHECK(thread_checker_.CalledOnValidThread());
DVLOG(1) << "UkmService::StartInitTask";
client_id_ = LoadOrGenerateClientId(pref_service_);
+ session_id_ = LoadSessionId(pref_service_);
client_->InitializeSystemProfileMetrics(base::Bind(
&UkmService::FinishedInitTask, self_ptr_factory_.GetWeakPtr()));
}
@@ -294,10 +322,14 @@ void UkmService::BuildAndStoreLog() {
Report report;
report.set_client_id(client_id_);
+ if (ShouldRecordSessionId())
+ report.set_session_id(session_id_);
for (const auto& source : sources_) {
Source* proto_source = report.add_sources();
source->PopulateProto(proto_source);
+ if (!ShouldRecordInitialUrl())
+ proto_source->clear_initial_url();
}
for (const auto& entry : entries_) {
Entry* proto_entry = report.add_entries();
@@ -423,7 +455,7 @@ void UkmService::UpdateSourceURL(int32_t source_id, const GURL& url) {
if (source_id != source->id())
continue;
- source->set_url(url);
+ source->UpdateUrl(url);
return;
}
« no previous file with comments | « components/ukm/ukm_service.h ('k') | components/ukm/ukm_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698