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

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

Issue 2923523002: Decouple stability instrumentation recording and collection (Closed)
Patch Set: PostmortemDeleter unittest 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 // An interface to process postmortem stability files.
32 class PostmortemProcessor {
Sigurður Ásgeirsson 2017/06/05 15:39:39 I don't see that hoisting an interface here is hel
manzagop (departed) 2017/06/05 18:02:16 I initially thought there'd be a factory, but didn
33 public:
34 virtual ~PostmortemProcessor() = default;
35
36 virtual void Process(const std::vector<base::FilePath>& stability_files) = 0;
37 };
38
39 class PostmortemDeleter : public PostmortemProcessor {
40 public:
41 PostmortemDeleter() = default;
42 ~PostmortemDeleter() override = default;
43
44 void Process(const std::vector<base::FilePath>& stability_files);
45 };
46
31 // Handles postmortem report collection by establishing the set of stability 47 // Handles postmortem report collection by establishing the set of stability
32 // files to collect, then for each file: 48 // files to collect, then for each file:
33 // - extracting a report protocol buffer 49 // - extracting a report protocol buffer
34 // - registering a crash report with the crash database 50 // - registering a crash report with the crash database
35 // - writing a minidump file for the report 51 // - writing a minidump file for the report
36 // TODO(manzagop): throttling, graceful handling of accumulating data. 52 // TODO(manzagop): throttling, graceful handling of accumulating data.
37 class PostmortemReportCollector { 53 class PostmortemReportCollector : public PostmortemProcessor {
38 public: 54 public:
39 PostmortemReportCollector(const std::string& product_name, 55 PostmortemReportCollector(const std::string& product_name,
40 const std::string& version_number, 56 const std::string& version_number,
41 const std::string& channel_name, 57 const std::string& channel_name,
58 crashpad::CrashReportDatabase* report_database,
42 SystemSessionAnalyzer* analyzer); 59 SystemSessionAnalyzer* analyzer);
43 virtual ~PostmortemReportCollector(); 60 ~PostmortemReportCollector() override;
44 61
45 // Collects postmortem stability reports from files found in |debug_info_dir|, 62 // Collects postmortem stability reports from |stability_files|. Reports are
46 // relying on |debug_file_pattern| and |excluded_debug_files|. Reports are 63 // then wrapped in Crashpad reports and registered with the crash database.
47 // then wrapped in Crashpad reports, manufactured via |report_database|. 64 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 65
57 const std::string& product_name() const { return product_name_; } 66 const std::string& product_name() const { return product_name_; }
58 const std::string& version_number() const { return version_number_; } 67 const std::string& version_number() const { return version_number_; }
59 const std::string& channel_name() const { return channel_name_; } 68 const std::string& channel_name() const { return channel_name_; }
60 69
61 private: 70 private:
62 FRIEND_TEST_ALL_PREFIXES(PostmortemReportCollectorTest, 71 FRIEND_TEST_ALL_PREFIXES(PostmortemReportCollectorTest,
63 GetDebugStateFilePaths); 72 GetDebugStateFilePaths);
64 FRIEND_TEST_ALL_PREFIXES(PostmortemReportCollectorTest, CollectEmptyFile); 73 FRIEND_TEST_ALL_PREFIXES(PostmortemReportCollectorTest, CollectEmptyFile);
65 FRIEND_TEST_ALL_PREFIXES(PostmortemReportCollectorTest, CollectRandomFile); 74 FRIEND_TEST_ALL_PREFIXES(PostmortemReportCollectorTest, CollectRandomFile);
66 FRIEND_TEST_ALL_PREFIXES(PostmortemReportCollectorCollectionTest, 75 FRIEND_TEST_ALL_PREFIXES(PostmortemReportCollectorCollectionTest,
67 CollectSuccess); 76 CollectSuccess);
68 FRIEND_TEST_ALL_PREFIXES( 77 FRIEND_TEST_ALL_PREFIXES(
69 PostmortemReportCollectorCollectionFromGlobalTrackerTest, 78 PostmortemReportCollectorCollectionFromGlobalTrackerTest,
70 LogCollection); 79 LogCollection);
71 FRIEND_TEST_ALL_PREFIXES( 80 FRIEND_TEST_ALL_PREFIXES(
72 PostmortemReportCollectorCollectionFromGlobalTrackerTest, 81 PostmortemReportCollectorCollectionFromGlobalTrackerTest,
73 ProcessUserDataCollection); 82 ProcessUserDataCollection);
74 FRIEND_TEST_ALL_PREFIXES( 83 FRIEND_TEST_ALL_PREFIXES(
75 PostmortemReportCollectorCollectionFromGlobalTrackerTest, 84 PostmortemReportCollectorCollectionFromGlobalTrackerTest,
76 FieldTrialCollection); 85 FieldTrialCollection);
77 FRIEND_TEST_ALL_PREFIXES( 86 FRIEND_TEST_ALL_PREFIXES(
78 PostmortemReportCollectorCollectionFromGlobalTrackerTest, 87 PostmortemReportCollectorCollectionFromGlobalTrackerTest,
79 ModuleCollection); 88 ModuleCollection);
80 FRIEND_TEST_ALL_PREFIXES( 89 FRIEND_TEST_ALL_PREFIXES(
81 PostmortemReportCollectorCollectionFromGlobalTrackerTest, 90 PostmortemReportCollectorCollectionFromGlobalTrackerTest,
82 SystemStateTest); 91 SystemStateTest);
83 92
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 93 // Collects a stability file, generates a report and registers it with the
91 // database. Returns true on success. False otherwise. 94 // database.
92 bool CollectAndSubmitOneReport(const crashpad::UUID& client_id, 95 void CollectAndSubmitOneReport(const crashpad::UUID& client_id,
93 const base::FilePath& file, 96 const base::FilePath& file);
94 crashpad::CrashReportDatabase* report_database,
95 bool* system_unclean);
96 97
97 virtual CollectionStatus CollectOneReport( 98 virtual CollectionStatus CollectOneReport(
98 const base::FilePath& stability_file, 99 const base::FilePath& stability_file,
99 StabilityReport* report); 100 StabilityReport* report);
100 101
101 void SetReporterDetails(StabilityReport* report) const; 102 void SetReporterDetails(StabilityReport* report) const;
102 103
103 void RecordSystemShutdownState(StabilityReport* report) const; 104 void RecordSystemShutdownState(StabilityReport* report) const;
104 105
105 virtual bool WriteReportToMinidump(StabilityReport* report, 106 virtual bool WriteReportToMinidump(StabilityReport* report,
106 const crashpad::UUID& client_id, 107 const crashpad::UUID& client_id,
107 const crashpad::UUID& report_id, 108 const crashpad::UUID& report_id,
108 base::PlatformFile minidump_file); 109 base::PlatformFile minidump_file);
109 110
110 std::string product_name_; 111 std::string product_name_;
111 std::string version_number_; 112 std::string version_number_;
112 std::string channel_name_; 113 std::string channel_name_;
113 114
115 crashpad::CrashReportDatabase* report_database_; // Not owned.
114 SystemSessionAnalyzer* system_session_analyzer_; // Not owned. 116 SystemSessionAnalyzer* system_session_analyzer_; // Not owned.
115 117
116 DISALLOW_COPY_AND_ASSIGN(PostmortemReportCollector); 118 DISALLOW_COPY_AND_ASSIGN(PostmortemReportCollector);
117 }; 119 };
118 120
119 } // namespace browser_watcher 121 } // namespace browser_watcher
120 122
121 #endif // COMPONENTS_BROWSER_WATCHER_POSTMORTEM_REPORT_COLLECTOR_H_ 123 #endif // COMPONENTS_BROWSER_WATCHER_POSTMORTEM_REPORT_COLLECTOR_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698