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

Unified Diff: components/browser_watcher/postmortem_report_collector.cc

Issue 2691033002: Collect field trial information from the stability file (Closed)
Patch Set: Merge 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/browser_watcher/postmortem_report_collector.cc
diff --git a/components/browser_watcher/postmortem_report_collector.cc b/components/browser_watcher/postmortem_report_collector.cc
index aa3845f22c3f01d7bd274b8e771745ba460045bd..745b1087175f329d38f595c81122e6310f7cec16 100644
--- a/components/browser_watcher/postmortem_report_collector.cc
+++ b/components/browser_watcher/postmortem_report_collector.cc
@@ -13,8 +13,10 @@
#include "base/metrics/histogram_macros.h"
#include "base/path_service.h"
#include "base/strings/string_piece.h"
+#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "components/browser_watcher/postmortem_minidump_writer.h"
+#include "components/variations/active_field_trials.h"
#include "third_party/crashpad/crashpad/client/settings.h"
#include "third_party/crashpad/crashpad/util/misc/uuid.h"
@@ -31,14 +33,18 @@ using crashpad::CrashReportDatabase;
namespace {
+const char kFieldTrialKeyPrefix[] = "FieldTrial.";
+
// Collects stability user data from the recorded format to the collected
// format.
void CollectUserData(
const ActivityUserData::Snapshot& recorded_map,
- google::protobuf::Map<std::string, TypedValue>* collected_map) {
+ google::protobuf::Map<std::string, TypedValue>* collected_map,
+ StabilityReport* report) {
DCHECK(collected_map);
for (const auto& name_and_value : recorded_map) {
+ const std::string& key = name_and_value.first;
const ActivityUserData::TypedValue& recorded_value = name_and_value.second;
TypedValue collected_value;
@@ -58,10 +64,25 @@ void CollectUserData(
collected_ref->set_size(recorded_ref.size());
break;
}
- case ActivityUserData::STRING_VALUE:
- collected_value.set_string_value(
- recorded_value.GetString().as_string());
+ case ActivityUserData::STRING_VALUE: {
+ std::string value = recorded_value.GetString().as_string();
+
+ if (report && base::StartsWith(key, kFieldTrialKeyPrefix,
bcwhite 2017/02/14 15:42:14 To be clear, you want field-trial strings to go in
manzagop (departed) 2017/02/14 19:21:15 Yeah, this is clunky. I'm using this function to c
bcwhite 2017/02/14 21:05:16 On the second pass, do you want the field trials t
manzagop (departed) 2017/02/14 21:27:57 Not sure I follow: what's the second pass? Do you
bcwhite 2017/02/15 16:24:19 You said that "in the second I don't have one" so
manzagop (departed) 2017/02/15 18:35:07 Acknowledged.
+ base::CompareCase::SENSITIVE)) {
+ // This entry represents an active Finch experiment.
+ std::string trial_name =
+ key.substr(std::strlen(kFieldTrialKeyPrefix));
+ variations::ActiveGroupId group_id =
+ variations::MakeActiveGroupId(trial_name, value);
+ FieldTrial* field_trial = report->add_field_trials();
+ field_trial->set_name_id(group_id.name);
+ field_trial->set_group_id(group_id.group);
+ continue;
+ }
+
+ collected_value.set_string_value(value);
bcwhite 2017/02/14 15:42:14 I believe set_string_value will accept (char*, len
manzagop (departed) 2017/02/14 19:21:15 Nice! Ah, but MakeActiveGroupId wants a string. St
break;
+ }
case ActivityUserData::STRING_VALUE_REFERENCE: {
base::StringPiece recorded_ref = recorded_value.GetStringReference();
TypedValue::Reference* collected_ref =
@@ -86,7 +107,7 @@ void CollectUserData(
break;
}
- (*collected_map)[name_and_value.first].Swap(&collected_value);
+ (*collected_map)[key].Swap(&collected_value);
}
}
@@ -285,7 +306,8 @@ PostmortemReportCollector::CollectionStatus PostmortemReportCollector::Collect(
}
// Collect global user data.
- CollectUserData(global_data_snapshot, (*report)->mutable_global_data());
+ CollectUserData(global_data_snapshot, (*report)->mutable_global_data(),
+ report->get());
// Collect thread activity data.
// Note: a single process is instrumented.
@@ -356,7 +378,7 @@ void PostmortemReportCollector::CollectThread(
// Collect user data
if (i < snapshot.user_data_stack.size()) {
CollectUserData(snapshot.user_data_stack[i],
- collected->mutable_user_data());
+ collected->mutable_user_data(), nullptr);
}
}
}

Powered by Google App Engine
This is Rietveld 408576698