Commit c793bf0d authored by Eugene But's avatar Eugene But Committed by Commit Bot

[ios] Add previous session info to synthetic crash report

The data is retrieved from PreviousSessionInfo singleton and
includes the following fields:
 - free_disk_in_kb
 - memory_warning_in_progress

Bug: 1103752
Change-Id: I10e6fe758bfde8ad753cbbd363ab34afc1a52e44
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2414784
Commit-Queue: Olivier Robin <olivierrobin@chromium.org>
Reviewed-by: default avatarOlivier Robin <olivierrobin@chromium.org>
Auto-Submit: Eugene But <eugenebut@chromium.org>
Cr-Commit-Position: refs/heads/master@{#808397}
parent 4d35b3c0
......@@ -197,8 +197,8 @@ source_set("app_internal") {
"//ios/chrome/browser/history",
"//ios/chrome/browser/main",
"//ios/chrome/browser/memory",
"//ios/chrome/browser/metrics",
"//ios/chrome/browser/metrics:metrics_internal",
"//ios/chrome/browser/metrics:previous_session_info",
"//ios/chrome/browser/net",
"//ios/chrome/browser/ntp:features",
"//ios/chrome/browser/ntp_snippets",
......
......@@ -13,7 +13,7 @@ source_set("application_delegate") {
deps = [
"//base",
"//ios/chrome/browser/crash_report",
"//ios/chrome/browser/metrics",
"//ios/chrome/browser/metrics:previous_session_info",
]
frameworks = [ "Foundation.framework" ]
......@@ -57,6 +57,7 @@ source_set("unit_tests") {
"//ios/chrome/browser/main:public",
"//ios/chrome/browser/main:test_support",
"//ios/chrome/browser/metrics",
"//ios/chrome/browser/metrics:previous_session_info",
"//ios/chrome/browser/ntp_snippets",
"//ios/chrome/browser/signin",
"//ios/chrome/browser/signin:test_support",
......@@ -188,6 +189,7 @@ source_set("application_delegate_internal") {
"//ios/chrome/browser/main:public",
"//ios/chrome/browser/metrics",
"//ios/chrome/browser/metrics:metrics_internal",
"//ios/chrome/browser/metrics:previous_session_info",
"//ios/chrome/browser/net",
"//ios/chrome/browser/ntp_snippets:ntp_snippets",
"//ios/chrome/browser/search_engines",
......
......@@ -22,8 +22,8 @@ source_set("crash_report") {
"features.h",
"main_thread_freeze_detector.h",
"main_thread_freeze_detector.mm",
"synthetic_crash_report_util.cc",
"synthetic_crash_report_util.h",
"synthetic_crash_report_util.mm",
]
configs += [ "//build/config/compiler:enable_arc" ]
......@@ -37,6 +37,7 @@ source_set("crash_report") {
"//ios/chrome/browser",
"//ios/chrome/browser/browser_state",
"//ios/chrome/browser/crash_report/breadcrumbs",
"//ios/chrome/browser/metrics:previous_session_info",
"//ios/web",
"//third_party/breakpad:client",
]
......@@ -104,6 +105,7 @@ source_set("unit_tests") {
"//ios/chrome/browser/browser_state:test_support",
"//ios/chrome/browser/crash_report/breadcrumbs",
"//ios/chrome/browser/main:test_support",
"//ios/chrome/browser/metrics:previous_session_info",
"//ios/chrome/browser/sessions:serialisation",
"//ios/chrome/browser/sessions:session_service",
"//ios/chrome/browser/web_state_list:test_support",
......
......@@ -16,6 +16,11 @@
#include "base/strings/stringprintf.h"
#include "base/strings/sys_string_conversions.h"
#include "base/system/sys_info.h"
#import "ios/chrome/browser/metrics/previous_session_info.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
namespace {
......@@ -60,6 +65,14 @@ void CreateSyntheticCrashReportForUte(
AppendConfig(config, "BreakpadVersion", breakpad_version);
AppendConfig(config, "BreakpadURL", breakpad_url);
AppendConfig(config, "BreakpadMinidumpLocation", path.value());
PreviousSessionInfo* previous_session = [PreviousSessionInfo sharedInstance];
AppendConfig(config, "BreakpadServerParameterPrefix_free_disk_in_kb",
base::NumberToString(previous_session.availableDeviceStorage));
if (previous_session.didSeeMemoryWarningShortlyBeforeTerminating) {
AppendConfig(config,
"BreakpadServerParameterPrefix_memory_warning_in_progress",
"yes");
}
AppendConfig(config, "BreakpadServerParameterPrefix_platform",
base::SysInfo::HardwareModelName());
......
......@@ -15,6 +15,7 @@
#include "base/strings/string_split.h"
#include "base/strings/sys_string_conversions.h"
#include "base/system/sys_info.h"
#import "ios/chrome/browser/metrics/previous_session_info_private.h"
#include "testing/platform_test.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
......@@ -26,6 +27,12 @@ typedef PlatformTest SyntheticCrashReportUtilTest;
// Tests that CreateSyntheticCrashReportForUte correctly generates config and
// minidump files.
TEST_F(SyntheticCrashReportUtilTest, CreateSyntheticCrashReportForUte) {
[PreviousSessionInfo resetSharedInstanceForTesting];
const NSInteger kAvailableStorage = 256;
PreviousSessionInfo* previous_session = [PreviousSessionInfo sharedInstance];
previous_session.availableDeviceStorage = kAvailableStorage;
previous_session.didSeeMemoryWarningShortlyBeforeTerminating = YES;
// Create crash report.
base::ScopedTempDir temp_dir;
ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
......@@ -81,7 +88,7 @@ TEST_F(SyntheticCrashReportUtilTest, CreateSyntheticCrashReportForUte) {
// Verify config file content. Config file has the following format:
// Key1\nValue1Length\nValue1\n...KeyN\nValueNLength\nValueN
ASSERT_EQ(27U, config_lines.size())
ASSERT_EQ(33U, config_lines.size())
<< "<content>" << config_content << "</content>";
EXPECT_EQ("MinidumpDir", config_lines[0]);
......@@ -120,10 +127,22 @@ TEST_F(SyntheticCrashReportUtilTest, CreateSyntheticCrashReportForUte) {
config_lines[22]);
EXPECT_EQ(temp_dir.GetPath().value(), config_lines[23]);
EXPECT_EQ("BreakpadServerParameterPrefix_platform", config_lines[24]);
EXPECT_EQ("BreakpadServerParameterPrefix_free_disk_in_kb", config_lines[24]);
EXPECT_EQ(
base::NumberToString(base::NumberToString(kAvailableStorage).size()),
config_lines[25]);
EXPECT_EQ(base::NumberToString(kAvailableStorage), config_lines[26]);
EXPECT_EQ("BreakpadServerParameterPrefix_memory_warning_in_progress",
config_lines[27]);
const char kYesString[] = "yes";
EXPECT_EQ(base::NumberToString(strlen(kYesString)), config_lines[28]);
EXPECT_EQ(kYesString, config_lines[29]);
EXPECT_EQ("BreakpadServerParameterPrefix_platform", config_lines[30]);
EXPECT_EQ(base::NumberToString(base::SysInfo::HardwareModelName().size()),
config_lines[25]);
EXPECT_EQ(base::SysInfo::HardwareModelName(), config_lines[26]);
config_lines[31]);
EXPECT_EQ(base::SysInfo::HardwareModelName(), config_lines[32]);
// Read minidump file. It must be empty as there is no stack trace, but
// Breakpad will not upload config without minidump file.
......
......@@ -41,13 +41,11 @@ source_set("metrics") {
"mobile_session_shutdown_metrics_provider.mm",
"pageload_foreground_duration_tab_helper.h",
"pageload_foreground_duration_tab_helper.mm",
"previous_session_info.h",
"previous_session_info.mm",
"previous_session_info_private.h",
]
public_deps = [ "//components/ukm/ios:ukm_url_recorder" ]
deps = [
":chrome_browser_state_client",
":previous_session_info",
"//base",
"//components/browser_sync",
"//components/crash/core/common",
......@@ -81,7 +79,6 @@ source_set("metrics") {
"//ios/chrome/browser/tabs",
"//ios/chrome/browser/translate",
"//ios/chrome/browser/ui/overscroll_actions",
"//ios/chrome/browser/ui/util:multiwindow_util",
"//ios/chrome/browser/ui/whats_new:utils",
"//ios/chrome/browser/variations",
"//ios/chrome/browser/variations:ios_chrome_ui_string_overrider_factory",
......@@ -95,6 +92,20 @@ source_set("metrics") {
]
}
source_set("previous_session_info") {
configs += [ "//build/config/compiler:enable_arc" ]
sources = [
"previous_session_info.h",
"previous_session_info.mm",
"previous_session_info_private.h",
]
public_deps = [ "//components/ukm/ios:ukm_url_recorder" ]
deps = [
"//components/version_info",
"//ios/chrome/browser/ui/util:multiwindow_util",
]
}
source_set("unit_tests") {
configs += [ "//build/config/compiler:enable_arc" ]
testonly = true
......@@ -111,6 +122,7 @@ source_set("unit_tests") {
deps = [
":chrome_browser_state_client",
":metrics",
":previous_session_info",
"//base",
"//base/test:test_support",
"//build:branding_buildflags",
......@@ -145,6 +157,7 @@ source_set("metrics_browser_agent") {
deps = [
":metrics",
":metrics_internal",
":previous_session_info",
":tab_usage_recorder_metrics",
"//base",
"//components/google/core/common",
......@@ -219,6 +232,7 @@ source_set("unit_tests_internal") {
":metrics",
":metrics_browser_agent",
":metrics_internal",
":previous_session_info",
"//base",
"//base/test:test_support",
"//ios/chrome/browser/main:test_support",
......@@ -286,6 +300,8 @@ source_set("eg_app_support+eg2") {
"metrics_app_interface.mm",
]
deps = [
":metrics",
":metrics_internal",
"//base",
"//base/test:test_support",
"//components/metrics",
......@@ -297,8 +313,6 @@ source_set("eg_app_support+eg2") {
"//components/ukm:ukm_test_helper",
"//ios/chrome/browser",
"//ios/chrome/browser/browser_state",
"//ios/chrome/browser/metrics",
"//ios/chrome/browser/metrics:metrics_internal",
"//ios/chrome/test/app:test_support",
"//ios/testing:nserror_support",
"//third_party/metrics_proto",
......
......@@ -5,9 +5,12 @@
#ifndef IOS_CHROME_BROWSER_METRICS_PREVIOUS_SESSION_INFO_PRIVATE_H_
#define IOS_CHROME_BROWSER_METRICS_PREVIOUS_SESSION_INFO_PRIVATE_H_
#import "ios/chrome/browser/metrics/previous_session_info.h"
@interface PreviousSessionInfo (TestingOnly)
// Redefined to be read-write.
@property(nonatomic, assign) NSInteger availableDeviceStorage;
@property(nonatomic, assign) BOOL didSeeMemoryWarningShortlyBeforeTerminating;
@property(nonatomic, assign) BOOL isFirstSessionAfterUpgrade;
@property(nonatomic, assign) float deviceBatteryLevel;
......
......@@ -55,7 +55,7 @@ source_set("restoration_agent") {
"//ios/chrome/browser:chrome_url_constants",
"//ios/chrome/browser/browser_state",
"//ios/chrome/browser/main:public",
"//ios/chrome/browser/metrics",
"//ios/chrome/browser/metrics:previous_session_info",
"//ios/chrome/browser/ui/util:multiwindow_util",
"//ios/chrome/browser/web:page_placeholder",
"//ios/chrome/browser/web_state_list",
......
......@@ -84,7 +84,7 @@ source_set("scene") {
"//ios/chrome/browser/crash_report/breadcrumbs:feature_flags",
"//ios/chrome/browser/first_run",
"//ios/chrome/browser/main",
"//ios/chrome/browser/metrics",
"//ios/chrome/browser/metrics:previous_session_info",
"//ios/chrome/browser/ntp:features",
"//ios/chrome/browser/ntp_snippets:ntp_snippets",
"//ios/chrome/browser/screenshot",
......
......@@ -63,9 +63,9 @@ source_set("test_support") {
"//ios/chrome/browser/history",
"//ios/chrome/browser/infobars",
"//ios/chrome/browser/main",
"//ios/chrome/browser/metrics",
"//ios/chrome/browser/metrics:metrics_browser_agent",
"//ios/chrome/browser/metrics:metrics_internal",
"//ios/chrome/browser/metrics:previous_session_info",
"//ios/chrome/browser/sessions:restoration_agent",
"//ios/chrome/browser/signin",
"//ios/chrome/browser/sync",
......
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