Commit 3c41aee0 authored by Chris Findeisen's avatar Chris Findeisen Committed by Commit Bot

[Chromecast] Add ro.build.type and "device" to crash reports

Provides some helper functions for adding this build info standardized
into other crash contexts.

BUG=1116135

Change-Id: I597222868a16003ab9c8fa42de1979e10d771807
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2354496
Commit-Queue: Chris Findeisen <cfindeisen@chromium.org>
Reviewed-by: default avatarLuke Halliwell (slow) <halliwell@chromium.org>
Cr-Commit-Position: refs/heads/master@{#801812}
parent 9b7279a2
...@@ -5,6 +5,17 @@ ...@@ -5,6 +5,17 @@
import("//chromecast/chromecast.gni") import("//chromecast/chromecast.gni")
import("//testing/test.gni") import("//testing/test.gni")
cast_source_set("build_info") {
sources = [
"build_info.cc",
"build_info.h",
]
deps = [
"//chromecast/base:cast_version",
]
}
cast_source_set("crash_storage") { cast_source_set("crash_storage") {
sources = [ sources = [
"cast_crash_keys.cc", "cast_crash_keys.cc",
...@@ -72,6 +83,7 @@ cast_source_set("crash") { ...@@ -72,6 +83,7 @@ cast_source_set("crash") {
] ]
deps += [ deps += [
":build_info",
"//chromecast/base", "//chromecast/base",
"//chromecast/base:cast_sys_info_util", "//chromecast/base:cast_sys_info_util",
"//chromecast/base:cast_version", "//chromecast/base:cast_version",
...@@ -127,6 +139,7 @@ test("cast_crash_unittests") { ...@@ -127,6 +139,7 @@ test("cast_crash_unittests") {
] ]
} else if (is_linux || is_chromeos) { } else if (is_linux || is_chromeos) {
sources = [ sources = [
"build_info_unittest.cc",
"cast_crashdump_uploader_unittest.cc", "cast_crashdump_uploader_unittest.cc",
"linux/dummy_minidump_generator_unittest.cc", "linux/dummy_minidump_generator_unittest.cc",
"linux/dump_info_unittest.cc", "linux/dump_info_unittest.cc",
...@@ -136,11 +149,13 @@ test("cast_crash_unittests") { ...@@ -136,11 +149,13 @@ test("cast_crash_unittests") {
] ]
deps = [ deps = [
":build_info",
":crash", ":crash",
":test_support", ":test_support",
"//base", "//base",
"//base/test:run_all_unittests", "//base/test:run_all_unittests",
"//base/test:test_support", "//base/test:test_support",
"//chromecast/base:cast_version",
"//chromecast/base:dummy_cast_sys_info", "//chromecast/base:dummy_cast_sys_info",
"//chromecast/base:test_support", "//chromecast/base:test_support",
"//components/metrics", "//components/metrics",
......
// Copyright 2020 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 "chromecast/crash/build_info.h"
#include <string>
#include "chromecast/base/version.h"
namespace chromecast {
namespace {
constexpr char kEngVariant[] = "eng";
constexpr char kUserVariant[] = "user";
} // namespace
const std::string VersionToCrashString(const std::string& cast_build_revision) {
// Incremental number for eng+user builds is too long for Crash server
// so cap it to "eng" or "user".
for (std::string infix : {kEngVariant, kUserVariant}) {
size_t index = cast_build_revision.find(infix);
if (index != std::string::npos) {
return cast_build_revision.substr(
0, index + infix.size()); // Truncate after ".eng" / ".user".
}
}
return cast_build_revision;
}
const std::string GetVersionString() {
return VersionToCrashString(CAST_BUILD_REVISION);
}
const std::string VersionToVariant(const std::string& cast_build_revision) {
for (std::string variant : {kEngVariant, kUserVariant}) {
if (cast_build_revision.find(variant) != std::string::npos) {
return variant;
}
}
return CAST_IS_DEBUG_BUILD() ? kEngVariant : kUserVariant;
}
const std::string GetBuildVariant() {
return VersionToVariant(CAST_BUILD_REVISION);
}
} // namespace chromecast
// Copyright 2020 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.
#ifndef CHROMECAST_CRASH_BUILD_INFO_H_
#define CHROMECAST_CRASH_BUILD_INFO_H_
#include <string>
namespace chromecast {
// Returns a short, readable version string.
const std::string GetVersionString();
// Return whether build is "user", or "eng"
const std::string GetBuildVariant();
// Used by tests.
const std::string VersionToCrashString(const std::string& cast_build_revision);
const std::string VersionToVariant(const std::string& cast_build_revision);
} // namespace chromecast
#endif // CHROMECAST_CRASH_BUILD_INFO_H_
// Copyright 2020 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 "chromecast/crash/build_info.h"
#include <string>
#include "chromecast/base/version.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace chromecast {
constexpr char kIncrementalUserBuild[] = "1.51.user.ldap.20200813.124713";
constexpr char kIncrementalEngBuild[] = "1.51.eng.ldap.20200813.124713";
constexpr char kReleaseBuild[] = "1.51.224083";
TEST(VersionStringTest, VersionStringIsNonEmpty) {
ASSERT_FALSE(GetVersionString().empty());
}
TEST(VersionStringTest, ReleaseVersionUnchanged) {
ASSERT_EQ(VersionToCrashString(kReleaseBuild), kReleaseBuild);
}
TEST(VersionStringTest, IncrementalVersionTruncated) {
ASSERT_EQ(VersionToCrashString(kIncrementalEngBuild), "1.51.eng");
ASSERT_EQ(VersionToCrashString(kIncrementalUserBuild), "1.51.user");
}
TEST(GetBuildVariantTest, InfixPresent) {
ASSERT_EQ(VersionToVariant(kIncrementalEngBuild), "eng");
ASSERT_EQ(VersionToVariant(kIncrementalUserBuild), "user");
}
TEST(GetBuildVariantTest, InfixAbsent) {
// If infix is absent, will use debug macro to determine variant.
bool is_eng = CAST_IS_DEBUG_BUILD();
ASSERT_EQ(VersionToVariant(kReleaseBuild) == "eng", is_eng);
}
} // namespace chromecast
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include "chromecast/base/cast_paths.h" #include "chromecast/base/cast_paths.h"
#include "chromecast/base/pref_names.h" #include "chromecast/base/pref_names.h"
#include "chromecast/base/version.h" #include "chromecast/base/version.h"
#include "chromecast/crash/build_info.h"
#include "chromecast/crash/cast_crashdump_uploader.h" #include "chromecast/crash/cast_crashdump_uploader.h"
#include "chromecast/crash/linux/dump_info.h" #include "chromecast/crash/linux/dump_info.h"
#include "chromecast/public/cast_sys_info.h" #include "chromecast/public/cast_sys_info.h"
...@@ -196,14 +197,11 @@ bool MinidumpUploader::DoWork() { ...@@ -196,14 +197,11 @@ bool MinidumpUploader::DoWork() {
std::stringstream uptime_stream; std::stringstream uptime_stream;
uptime_stream << dump.params().process_uptime; uptime_stream << dump.params().process_uptime;
const std::string version(dump.params().cast_release_version + "." +
dump.params().cast_build_number +
dump.params().suffix);
// attempt to upload // attempt to upload
LOG(INFO) << "Uploading crash to " << upload_location_; LOG(INFO) << "Uploading crash to " << upload_location_;
CastCrashdumpData crashdump_data; CastCrashdumpData crashdump_data;
crashdump_data.product = kProductName; crashdump_data.product = kProductName;
crashdump_data.version = version; crashdump_data.version = GetVersionString();
crashdump_data.guid = client_id; crashdump_data.guid = client_id;
crashdump_data.ptime = uptime_stream.str(); crashdump_data.ptime = uptime_stream.str();
crashdump_data.comments = comment.str(); crashdump_data.comments = comment.str();
...@@ -226,10 +224,12 @@ bool MinidumpUploader::DoWork() { ...@@ -226,10 +224,12 @@ bool MinidumpUploader::DoWork() {
g.SetParameter("ro.product.release.track", release_channel_); g.SetParameter("ro.product.release.track", release_channel_);
g.SetParameter("ro.hardware", board_name_); g.SetParameter("ro.hardware", board_name_);
g.SetParameter("ro.product.name", product_name_); g.SetParameter("ro.product.name", product_name_);
g.SetParameter("device", product_name_);
g.SetParameter("ro.product.model", device_model_); g.SetParameter("ro.product.model", device_model_);
g.SetParameter("ro.product.manufacturer", manufacturer_); g.SetParameter("ro.product.manufacturer", manufacturer_);
g.SetParameter("ro.system.version", system_version_); g.SetParameter("ro.system.version", system_version_);
g.SetParameter("release.virtual-channel", virtual_channel); g.SetParameter("release.virtual-channel", virtual_channel);
g.SetParameter("ro.build.type", GetBuildVariant());
if (pref_service->HasPrefPath(kLatestUiVersion)) { if (pref_service->HasPrefPath(kLatestUiVersion)) {
g.SetParameter("ui.version", g.SetParameter("ui.version",
pref_service->GetString(kLatestUiVersion)); pref_service->GetString(kLatestUiVersion));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment