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

Unified Diff: components/browser_watcher/postmortem_report_collector.cc

Issue 2691033002: Collect field trial information from the stability file (Closed)
Patch Set: Address rkaplow's comments 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 8f1ccd40ba9e4fc99be5f92c541a8d00e71b8a57..7f5bf1457b81517991d604bfc1a754b9ef75f950 100644
--- a/components/browser_watcher/postmortem_report_collector.cc
+++ b/components/browser_watcher/postmortem_report_collector.cc
@@ -13,9 +13,11 @@
#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/browser_watcher/stability_data_names.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"
@@ -32,14 +34,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;
@@ -47,9 +53,11 @@ void CollectUserData(
case ActivityUserData::END_OF_VALUES:
NOTREACHED();
break;
- case ActivityUserData::RAW_VALUE:
- collected_value.set_bytes_value(recorded_value.Get().as_string());
+ case ActivityUserData::RAW_VALUE: {
+ base::StringPiece raw = recorded_value.Get();
+ collected_value.set_bytes_value(raw.data(), raw.size());
break;
+ }
case ActivityUserData::RAW_VALUE_REFERENCE: {
base::StringPiece recorded_ref = recorded_value.GetReference();
TypedValue::Reference* collected_ref =
@@ -59,10 +67,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: {
+ base::StringPiece value = recorded_value.GetString();
+
+ if (report && base::StartsWith(key, kFieldTrialKeyPrefix,
+ base::CompareCase::SENSITIVE)) {
+ // This entry represents an active Field Trial.
+ std::string trial_name =
+ key.substr(std::strlen(kFieldTrialKeyPrefix));
+ variations::ActiveGroupId group_id =
+ variations::MakeActiveGroupId(trial_name, value.as_string());
+ 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.data(), value.size());
break;
+ }
case ActivityUserData::STRING_VALUE_REFERENCE: {
base::StringPiece recorded_ref = recorded_value.GetStringReference();
TypedValue::Reference* collected_ref =
@@ -72,10 +95,11 @@ void CollectUserData(
collected_ref->set_size(recorded_ref.size());
break;
}
- case ActivityUserData::CHAR_VALUE:
- collected_value.set_char_value(
- std::string(1, recorded_value.GetChar()));
+ case ActivityUserData::CHAR_VALUE: {
+ char char_value = recorded_value.GetChar();
+ collected_value.set_char_value(&char_value, 1);
break;
+ }
case ActivityUserData::BOOL_VALUE:
collected_value.set_bool_value(recorded_value.GetBool());
break;
@@ -87,7 +111,7 @@ void CollectUserData(
break;
}
- (*collected_map)[name_and_value.first].Swap(&collected_value);
+ (*collected_map)[key].Swap(&collected_value);
}
}
@@ -288,7 +312,7 @@ PostmortemReportCollector::CollectionStatus PostmortemReportCollector::Collect(
// Collect global user data.
google::protobuf::Map<std::string, TypedValue>& global_data =
*(*report)->mutable_global_data();
- CollectUserData(global_data_snapshot, &global_data);
+ CollectUserData(global_data_snapshot, &global_data, report->get());
// Add the reporting Chrome's details to the report.
global_data[kStabilityReporterChannel].set_string_value(channel_name());
@@ -371,7 +395,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