Fix spontaneous subresource filter throttling hangings.
ActivationStateComputingNavigationThrottle throttles response until
AsyncDocumentSubresourceFilter get an activation state from blocking
pool task runner. This task runner:
a) Has TaskPriority::BACKGROUND priority, i.e. page opening is throttled
until some info from low priority task runner retrieved.
b) Processes obsolete ruleset files deletion and new ruleset files
indexing. I.e. page opening sometimes is throttled until obsolete files
deletion finished but does not depends on it.
Changeset splits blocking task runner on two items:
1. Low priority background task runner for obsolete files deletion
and new rulesets indexing.
2. High priority blocking task runner for tasks that influe user
experience.
Bug: 803412
Change-Id: Ic165012d8d2035610e06f0eaeda67d738b96caa1
Reviewed-on: https://chromium-review.googlesource.com/867041
Commit-Queue: Charlie Harrison <[email protected]>
Reviewed-by: Jochen Eisinger <[email protected]>
Reviewed-by: Charlie Harrison <[email protected]>
Cr-Commit-Position: refs/heads/master@{#531011}
diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc
index e88505f9..bf4b6ef1 100644
--- a/chrome/browser/browser_process_impl.cc
+++ b/chrome/browser/browser_process_impl.cc
@@ -1239,8 +1239,15 @@
return;
}
+ // Runner for tasks critical for user experience.
scoped_refptr<base::SequencedTaskRunner> blocking_task_runner(
base::CreateSequencedTaskRunnerWithTraits(
+ {base::MayBlock(), base::TaskPriority::USER_BLOCKING,
+ base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}));
+
+ // Runner for tasks that do not influence user experience.
+ scoped_refptr<base::SequencedTaskRunner> background_task_runner(
+ base::CreateSequencedTaskRunnerWithTraits(
{base::MayBlock(), base::TaskPriority::BACKGROUND,
base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}));
@@ -1254,7 +1261,7 @@
blocking_task_runner);
subresource_filter_ruleset_service_->set_ruleset_service(
base::MakeUnique<subresource_filter::RulesetService>(
- local_state(), blocking_task_runner,
+ local_state(), blocking_task_runner, background_task_runner,
subresource_filter_ruleset_service_.get(), indexed_ruleset_base_dir));
}