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

Unified Diff: components/browser_watcher/watcher_metrics_provider_win.cc

Issue 2963573004: [Cleanup] Migrate the WatcherMetricsProvider to use the Task Scheduler. (Closed)
Patch Set: Document that registry interactions can block, and adjust the unittest not to be flaky Created 3 years, 5 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 side-by-side diff with in-line comments
Download patch
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..a95e63a8bc137d15c6c0340f7f2ce3a78aae9ca9 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() {
}
@@ -195,9 +202,10 @@ void WatcherMetricsProviderWin::OnRecordingDisabled() {
if (!recording_enabled_ && !cleanup_scheduled_) {
// 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_));
+ // to issue the cleanup task. Runs in the background because interacting
+ // with the registry can block.
+ task_runner_->PostTask(
+ FROM_HERE, base::BindOnce(&DeleteExitCodeRegistryKey, registry_path_));
cleanup_scheduled_ = true;
}
@@ -216,17 +224,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 =

Powered by Google App Engine
This is Rietveld 408576698