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 @@
import("//chromecast/chromecast.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") {
sources = [
"cast_crash_keys.cc",
......@@ -72,6 +83,7 @@ cast_source_set("crash") {
]
deps += [
":build_info",
"//chromecast/base",
"//chromecast/base:cast_sys_info_util",
"//chromecast/base:cast_version",
......@@ -127,6 +139,7 @@ test("cast_crash_unittests") {
]
} else if (is_linux || is_chromeos) {
sources = [
"build_info_unittest.cc",
"cast_crashdump_uploader_unittest.cc",
"linux/dummy_minidump_generator_unittest.cc",
"linux/dump_info_unittest.cc",
......@@ -136,11 +149,13 @@ test("cast_crash_unittests") {
]
deps = [
":build_info",
":crash",
":test_support",
"//base",
"//base/test:run_all_unittests",
"//base/test:test_support",
"//chromecast/base:cast_version",
"//chromecast/base:dummy_cast_sys_info",
"//chromecast/base:test_support",
"//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 @@
#include "chromecast/base/cast_paths.h"
#include "chromecast/base/pref_names.h"
#include "chromecast/base/version.h"
#include "chromecast/crash/build_info.h"
#include "chromecast/crash/cast_crashdump_uploader.h"
#include "chromecast/crash/linux/dump_info.h"
#include "chromecast/public/cast_sys_info.h"
......@@ -196,14 +197,11 @@ bool MinidumpUploader::DoWork() {
std::stringstream uptime_stream;
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
LOG(INFO) << "Uploading crash to " << upload_location_;
CastCrashdumpData crashdump_data;
crashdump_data.product = kProductName;
crashdump_data.version = version;
crashdump_data.version = GetVersionString();
crashdump_data.guid = client_id;
crashdump_data.ptime = uptime_stream.str();
crashdump_data.comments = comment.str();
......@@ -226,10 +224,12 @@ bool MinidumpUploader::DoWork() {
g.SetParameter("ro.product.release.track", release_channel_);
g.SetParameter("ro.hardware", board_name_);
g.SetParameter("ro.product.name", product_name_);
g.SetParameter("device", product_name_);
g.SetParameter("ro.product.model", device_model_);
g.SetParameter("ro.product.manufacturer", manufacturer_);
g.SetParameter("ro.system.version", system_version_);
g.SetParameter("release.virtual-channel", virtual_channel);
g.SetParameter("ro.build.type", GetBuildVariant());
if (pref_service->HasPrefPath(kLatestUiVersion)) {
g.SetParameter("ui.version",
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