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