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

Side by Side Diff: components/browser_watcher/postmortem_report_collector.h

Issue 2923523002: Decouple stability instrumentation recording and collection (Closed)
Patch Set: get rid of some braces Created 3 years, 6 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 // 4 //
5 // Following an unclean shutdown, a stability report can be collected and 5 // Following an unclean shutdown, a stability report can be collected and
6 // submitted for upload to a reporter. 6 // submitted for upload to a reporter.
7 7
8 #ifndef COMPONENTS_BROWSER_WATCHER_POSTMORTEM_REPORT_COLLECTOR_H_ 8 #ifndef COMPONENTS_BROWSER_WATCHER_POSTMORTEM_REPORT_COLLECTOR_H_
9 #define COMPONENTS_BROWSER_WATCHER_POSTMORTEM_REPORT_COLLECTOR_H_ 9 #define COMPONENTS_BROWSER_WATCHER_POSTMORTEM_REPORT_COLLECTOR_H_
10 10
(...skipping 10 matching lines...) Expand all
21 #include "base/gtest_prod_util.h" 21 #include "base/gtest_prod_util.h"
22 #include "base/macros.h" 22 #include "base/macros.h"
23 #include "base/strings/string16.h" 23 #include "base/strings/string16.h"
24 #include "components/browser_watcher/stability_report.pb.h" 24 #include "components/browser_watcher/stability_report.pb.h"
25 #include "components/browser_watcher/stability_report_extractor.h" 25 #include "components/browser_watcher/stability_report_extractor.h"
26 #include "components/browser_watcher/system_session_analyzer_win.h" 26 #include "components/browser_watcher/system_session_analyzer_win.h"
27 #include "third_party/crashpad/crashpad/client/crash_report_database.h" 27 #include "third_party/crashpad/crashpad/client/crash_report_database.h"
28 28
29 namespace browser_watcher { 29 namespace browser_watcher {
30 30
31 // Deletes stability files.
32 class PostmortemDeleter {
33 public:
34 PostmortemDeleter() = default;
35 ~PostmortemDeleter() = default;
36
37 void Process(const std::vector<base::FilePath>& stability_files);
38 };
39
31 // Handles postmortem report collection by establishing the set of stability 40 // Handles postmortem report collection by establishing the set of stability
32 // files to collect, then for each file: 41 // files to collect, then for each file:
33 // - extracting a report protocol buffer 42 // - extracting a report protocol buffer
34 // - registering a crash report with the crash database 43 // - registering a crash report with the crash database
35 // - writing a minidump file for the report 44 // - writing a minidump file for the report
36 // TODO(manzagop): throttling, graceful handling of accumulating data. 45 // TODO(manzagop): throttling, graceful handling of accumulating data.
37 class PostmortemReportCollector { 46 class PostmortemReportCollector {
38 public: 47 public:
39 PostmortemReportCollector(const std::string& product_name, 48 PostmortemReportCollector(const std::string& product_name,
40 const std::string& version_number, 49 const std::string& version_number,
41 const std::string& channel_name, 50 const std::string& channel_name,
51 crashpad::CrashReportDatabase* report_database,
42 SystemSessionAnalyzer* analyzer); 52 SystemSessionAnalyzer* analyzer);
43 virtual ~PostmortemReportCollector(); 53 ~PostmortemReportCollector();
44 54
45 // Collects postmortem stability reports from files found in |debug_info_dir|, 55 // Collects postmortem stability reports from |stability_files|. Reports are
46 // relying on |debug_file_pattern| and |excluded_debug_files|. Reports are 56 // then wrapped in Crashpad reports and registered with the crash database.
47 // then wrapped in Crashpad reports, manufactured via |report_database|. 57 void Process(const std::vector<base::FilePath>& stability_files);
48 // Returns the number crash reports successfully registered with the reporter.
49 // TODO(manzagop): consider mechanisms for partial collection if this is to be
50 // used on a critical path.
51 int CollectAndSubmitAllPendingReports(
52 const base::FilePath& debug_info_dir,
53 const base::FilePath::StringType& debug_file_pattern,
54 const std::set<base::FilePath>& excluded_debug_files,
55 crashpad::CrashReportDatabase* report_database);
56 58
57 const std::string& product_name() const { return product_name_; } 59 const std::string& product_name() const { return product_name_; }
58 const std::string& version_number() const { return version_number_; } 60 const std::string& version_number() const { return version_number_; }
59 const std::string& channel_name() const { return channel_name_; } 61 const std::string& channel_name() const { return channel_name_; }
60 62
61 private: 63 private:
62 FRIEND_TEST_ALL_PREFIXES(PostmortemReportCollectorTest, 64 FRIEND_TEST_ALL_PREFIXES(PostmortemReportCollectorTest,
63 GetDebugStateFilePaths); 65 GetDebugStateFilePaths);
64 FRIEND_TEST_ALL_PREFIXES(PostmortemReportCollectorTest, CollectEmptyFile); 66 FRIEND_TEST_ALL_PREFIXES(PostmortemReportCollectorTest, CollectEmptyFile);
65 FRIEND_TEST_ALL_PREFIXES(PostmortemReportCollectorTest, CollectRandomFile); 67 FRIEND_TEST_ALL_PREFIXES(PostmortemReportCollectorTest, CollectRandomFile);
66 FRIEND_TEST_ALL_PREFIXES(PostmortemReportCollectorCollectionTest, 68 FRIEND_TEST_ALL_PREFIXES(PostmortemReportCollectorCollectionTest,
67 CollectSuccess); 69 CollectSuccess);
68 FRIEND_TEST_ALL_PREFIXES( 70 FRIEND_TEST_ALL_PREFIXES(
69 PostmortemReportCollectorCollectionFromGlobalTrackerTest, 71 PostmortemReportCollectorCollectionFromGlobalTrackerTest,
70 LogCollection); 72 LogCollection);
71 FRIEND_TEST_ALL_PREFIXES( 73 FRIEND_TEST_ALL_PREFIXES(
72 PostmortemReportCollectorCollectionFromGlobalTrackerTest, 74 PostmortemReportCollectorCollectionFromGlobalTrackerTest,
73 ProcessUserDataCollection); 75 ProcessUserDataCollection);
74 FRIEND_TEST_ALL_PREFIXES( 76 FRIEND_TEST_ALL_PREFIXES(
75 PostmortemReportCollectorCollectionFromGlobalTrackerTest, 77 PostmortemReportCollectorCollectionFromGlobalTrackerTest,
76 FieldTrialCollection); 78 FieldTrialCollection);
77 FRIEND_TEST_ALL_PREFIXES( 79 FRIEND_TEST_ALL_PREFIXES(
78 PostmortemReportCollectorCollectionFromGlobalTrackerTest, 80 PostmortemReportCollectorCollectionFromGlobalTrackerTest,
79 ModuleCollection); 81 ModuleCollection);
80 FRIEND_TEST_ALL_PREFIXES( 82 FRIEND_TEST_ALL_PREFIXES(
81 PostmortemReportCollectorCollectionFromGlobalTrackerTest, 83 PostmortemReportCollectorCollectionFromGlobalTrackerTest,
82 SystemStateTest); 84 SystemStateTest);
83 85
84 // Virtual for unittesting.
85 virtual std::vector<base::FilePath> GetDebugStateFilePaths(
86 const base::FilePath& debug_info_dir,
87 const base::FilePath::StringType& debug_file_pattern,
88 const std::set<base::FilePath>& excluded_debug_files);
89
90 // Collects a stability file, generates a report and registers it with the 86 // Collects a stability file, generates a report and registers it with the
91 // database. Returns true on success. False otherwise. 87 // database.
92 bool CollectAndSubmitOneReport(const crashpad::UUID& client_id, 88 void CollectAndSubmitOneReport(const crashpad::UUID& client_id,
93 const base::FilePath& file, 89 const base::FilePath& file);
94 crashpad::CrashReportDatabase* report_database,
95 bool* system_unclean);
96 90
97 virtual CollectionStatus CollectOneReport( 91 virtual CollectionStatus CollectOneReport(
98 const base::FilePath& stability_file, 92 const base::FilePath& stability_file,
99 StabilityReport* report); 93 StabilityReport* report);
100 94
101 void SetReporterDetails(StabilityReport* report) const; 95 void SetReporterDetails(StabilityReport* report) const;
102 96
103 void RecordSystemShutdownState(StabilityReport* report) const; 97 void RecordSystemShutdownState(StabilityReport* report) const;
104 98
105 virtual bool WriteReportToMinidump(StabilityReport* report, 99 virtual bool WriteReportToMinidump(StabilityReport* report,
106 const crashpad::UUID& client_id, 100 const crashpad::UUID& client_id,
107 const crashpad::UUID& report_id, 101 const crashpad::UUID& report_id,
108 base::PlatformFile minidump_file); 102 base::PlatformFile minidump_file);
109 103
110 std::string product_name_; 104 std::string product_name_;
111 std::string version_number_; 105 std::string version_number_;
112 std::string channel_name_; 106 std::string channel_name_;
113 107
108 crashpad::CrashReportDatabase* report_database_; // Not owned.
114 SystemSessionAnalyzer* system_session_analyzer_; // Not owned. 109 SystemSessionAnalyzer* system_session_analyzer_; // Not owned.
115 110
116 DISALLOW_COPY_AND_ASSIGN(PostmortemReportCollector); 111 DISALLOW_COPY_AND_ASSIGN(PostmortemReportCollector);
117 }; 112 };
118 113
119 } // namespace browser_watcher 114 } // namespace browser_watcher
120 115
121 #endif // COMPONENTS_BROWSER_WATCHER_POSTMORTEM_REPORT_COLLECTOR_H_ 116 #endif // COMPONENTS_BROWSER_WATCHER_POSTMORTEM_REPORT_COLLECTOR_H_
OLDNEW
« no previous file with comments | « components/browser_watcher/features.cc ('k') | components/browser_watcher/postmortem_report_collector.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698