Index: components/browser_watcher/watcher_metrics_provider_win.cc |
diff --git a/components/browser_watcher/watcher_metrics_provider_win.cc b/components/browser_watcher/watcher_metrics_provider_win.cc |
index dcd7881010eb22f203e4b27eaa5dc58d597c206d..a079af12a6b3a9ea00effb327d021d41bd2650b5 100644 |
--- a/components/browser_watcher/watcher_metrics_provider_win.cc |
+++ b/components/browser_watcher/watcher_metrics_provider_win.cc |
@@ -23,6 +23,8 @@ |
#include "base/strings/string_number_conversions.h" |
#include "base/strings/string_piece.h" |
#include "base/strings/utf_string_conversions.h" |
+#include "base/task_scheduler/post_task.h" |
+#include "base/task_scheduler/task_traits.h" |
#include "base/win/registry.h" |
#include "components/browser_watcher/features.h" |
#include "components/browser_watcher/postmortem_report_collector.h" |
@@ -162,6 +164,14 @@ void LogCollectionInitStatus(CollectionInitializationStatus status) { |
INIT_STATUS_MAX); |
} |
+// Returns a task runner appropriate for running background tasks that perform |
+// file I/O. |
+scoped_refptr<base::TaskRunner> CreateBackgroundTaskRunner() { |
+ return base::CreateSequencedTaskRunnerWithTraits( |
+ {base::MayBlock(), base::TaskPriority::BACKGROUND, |
+ base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}); |
+} |
+ |
} // namespace |
const char WatcherMetricsProviderWin::kBrowserExitCodeHistogramName[] = |
@@ -171,18 +181,15 @@ WatcherMetricsProviderWin::WatcherMetricsProviderWin( |
const base::string16& registry_path, |
const base::FilePath& user_data_dir, |
const base::FilePath& crash_dir, |
- const GetExecutableDetailsCallback& exe_details_cb, |
- base::TaskRunner* io_task_runner) |
+ const GetExecutableDetailsCallback& exe_details_cb) |
: recording_enabled_(false), |
cleanup_scheduled_(false), |
registry_path_(registry_path), |
user_data_dir_(user_data_dir), |
crash_dir_(crash_dir), |
exe_details_cb_(exe_details_cb), |
- io_task_runner_(io_task_runner), |
- weak_ptr_factory_(this) { |
- DCHECK(io_task_runner_); |
-} |
+ task_runner_(CreateBackgroundTaskRunner()), |
+ weak_ptr_factory_(this) {} |
WatcherMetricsProviderWin::~WatcherMetricsProviderWin() { |
} |
@@ -196,8 +203,8 @@ void WatcherMetricsProviderWin::OnRecordingDisabled() { |
// When metrics reporting is disabled, the providers get an |
// OnRecordingDisabled notification at startup. Use that first notification |
// to issue the cleanup task. |
- io_task_runner_->PostTask( |
- FROM_HERE, base::Bind(&DeleteExitCodeRegistryKey, registry_path_)); |
+ task_runner_->PostTask( |
+ FROM_HERE, base::BindOnce(&DeleteExitCodeRegistryKey, registry_path_)); |
cleanup_scheduled_ = true; |
} |
@@ -216,17 +223,16 @@ void WatcherMetricsProviderWin::ProvideStabilityMetrics( |
void WatcherMetricsProviderWin::CollectPostmortemReports( |
const base::Closure& done_callback) { |
- io_task_runner_->PostTaskAndReply( |
+ task_runner_->PostTaskAndReply( |
FROM_HERE, |
- base::Bind( |
- &WatcherMetricsProviderWin::CollectPostmortemReportsOnBlockingPool, |
- weak_ptr_factory_.GetWeakPtr()), |
+ base::BindOnce(&WatcherMetricsProviderWin::CollectPostmortemReportsImpl, |
+ weak_ptr_factory_.GetWeakPtr()), |
done_callback); |
} |
// TODO(manzagop): consider mechanisms for partial collection if this is to be |
// used on a critical path. |
-void WatcherMetricsProviderWin::CollectPostmortemReportsOnBlockingPool() { |
+void WatcherMetricsProviderWin::CollectPostmortemReportsImpl() { |
SCOPED_UMA_HISTOGRAM_TIMER("ActivityTracker.Collect.TotalTime"); |
bool is_stability_debugging_on = |