Commit 5f72b7fb authored by mmenke's avatar mmenke Committed by Commit Bot

Use TaskRunner passed in to URLRequestContextBuilder only for the cache

It used to be used for file URLs and TransportSecurityStatePersister as
well, but this CL moves those over to using the task scheduler. Can't
just always use that for the cache as well due to the cache needing a
SingleThreadTaskRunner, and getting one of those from the task scheduler
is a bit more resource intensive.

BUG=734199
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.android:android_cronet_tester

Review-Url: https://codereview.chromium.org/2977693003
Cr-Commit-Position: refs/heads/master@{#485919}
parent 18f863a1
...@@ -254,7 +254,7 @@ void AwURLRequestContextGetter::InitializeURLRequestContext() { ...@@ -254,7 +254,7 @@ void AwURLRequestContextGetter::InitializeURLRequestContext() {
cache_params.max_size = 20 * 1024 * 1024; // 20M cache_params.max_size = 20 * 1024 * 1024; // 20M
cache_params.path = cache_path_; cache_params.path = cache_path_;
builder.EnableHttpCache(cache_params); builder.EnableHttpCache(cache_params);
builder.SetFileTaskRunner( builder.SetCacheThreadTaskRunner(
BrowserThread::GetTaskRunnerForThread(BrowserThread::CACHE)); BrowserThread::GetTaskRunnerForThread(BrowserThread::CACHE));
net::HttpNetworkSession::Params network_session_params; net::HttpNetworkSession::Params network_session_params;
......
...@@ -659,7 +659,7 @@ void CronetURLRequestContextAdapter::InitializeOnNetworkThread( ...@@ -659,7 +659,7 @@ void CronetURLRequestContextAdapter::InitializeOnNetworkThread(
json_pref_store_ = json_pref_store_ =
new JsonPrefStore(filepath, GetFileThread()->task_runner(), new JsonPrefStore(filepath, GetFileThread()->task_runner(),
std::unique_ptr<PrefFilter>()); std::unique_ptr<PrefFilter>());
context_builder.SetFileTaskRunner(GetFileThread()->task_runner()); context_builder.SetCacheThreadTaskRunner(GetFileThread()->task_runner());
// Register prefs and set up the PrefService. // Register prefs and set up the PrefService.
PrefServiceFactory factory; PrefServiceFactory factory;
......
...@@ -29,8 +29,6 @@ HeadlessURLRequestContextGetter::HeadlessURLRequestContextGetter( ...@@ -29,8 +29,6 @@ HeadlessURLRequestContextGetter::HeadlessURLRequestContextGetter(
net::NetLog* net_log, net::NetLog* net_log,
HeadlessBrowserContextImpl* headless_browser_context) HeadlessBrowserContextImpl* headless_browser_context)
: io_task_runner_(std::move(io_task_runner)), : io_task_runner_(std::move(io_task_runner)),
file_task_runner_(base::CreateSingleThreadTaskRunnerWithTraits(
{base::MayBlock(), base::TaskPriority::BACKGROUND})),
user_agent_(options->user_agent()), user_agent_(options->user_agent()),
host_resolver_rules_(options->host_resolver_rules()), host_resolver_rules_(options->host_resolver_rules()),
proxy_config_(options->proxy_config()), proxy_config_(options->proxy_config()),
...@@ -70,7 +68,6 @@ HeadlessURLRequestContextGetter::GetURLRequestContext() { ...@@ -70,7 +68,6 @@ HeadlessURLRequestContextGetter::GetURLRequestContext() {
// TODO(skyostil): Make these configurable. // TODO(skyostil): Make these configurable.
builder.set_data_enabled(true); builder.set_data_enabled(true);
builder.set_file_enabled(true); builder.set_file_enabled(true);
builder.SetFileTaskRunner(file_task_runner_);
if (proxy_config_) { if (proxy_config_) {
builder.set_proxy_service(net::ProxyService::CreateFixed(*proxy_config_)); builder.set_proxy_service(net::ProxyService::CreateFixed(*proxy_config_));
} else { } else {
......
...@@ -53,9 +53,6 @@ class HeadlessURLRequestContextGetter : public net::URLRequestContextGetter { ...@@ -53,9 +53,6 @@ class HeadlessURLRequestContextGetter : public net::URLRequestContextGetter {
private: private:
scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_; scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_;
// TODO(eseckler): This should become a SequencedTaskRunner once net:: APIs
// accept a SequencedTaskRunner, see https://crbug.com/735368.
scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_;
// The |options| object given to the constructor is not guaranteed to outlive // The |options| object given to the constructor is not guaranteed to outlive
// this class, so we make copies of the parts we need to access on the IO // this class, so we make copies of the parts we need to access on the IO
......
...@@ -291,9 +291,9 @@ void URLRequestContextBuilder::SetCookieAndChannelIdStores( ...@@ -291,9 +291,9 @@ void URLRequestContextBuilder::SetCookieAndChannelIdStores(
channel_id_service_ = std::move(channel_id_service); channel_id_service_ = std::move(channel_id_service);
} }
void URLRequestContextBuilder::SetFileTaskRunner( void URLRequestContextBuilder::SetCacheThreadTaskRunner(
const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) { scoped_refptr<base::SingleThreadTaskRunner> cache_thread_task_runner) {
file_task_runner_ = task_runner; cache_thread_task_runner_ = std::move(cache_thread_task_runner);
} }
void URLRequestContextBuilder::SetProtocolHandler( void URLRequestContextBuilder::SetProtocolHandler(
...@@ -383,7 +383,7 @@ std::unique_ptr<URLRequestContext> URLRequestContextBuilder::Build() { ...@@ -383,7 +383,7 @@ std::unique_ptr<URLRequestContext> URLRequestContextBuilder::Build() {
// user-visible. Block shutdown to ensure it does get persisted to disk, // user-visible. Block shutdown to ensure it does get persisted to disk,
// since it contains security-relevant information. // since it contains security-relevant information.
scoped_refptr<base::SequencedTaskRunner> task_runner( scoped_refptr<base::SequencedTaskRunner> task_runner(
GetFileSequencedTaskRunner( base::CreateSequencedTaskRunnerWithTraits(
{base::MayBlock(), base::TaskPriority::BACKGROUND, {base::MayBlock(), base::TaskPriority::BACKGROUND,
base::TaskShutdownBehavior::BLOCK_SHUTDOWN})); base::TaskShutdownBehavior::BLOCK_SHUTDOWN}));
...@@ -459,16 +459,19 @@ std::unique_ptr<URLRequestContext> URLRequestContextBuilder::Build() { ...@@ -459,16 +459,19 @@ std::unique_ptr<URLRequestContext> URLRequestContextBuilder::Build() {
if (http_cache_enabled_) { if (http_cache_enabled_) {
std::unique_ptr<HttpCache::BackendFactory> http_cache_backend; std::unique_ptr<HttpCache::BackendFactory> http_cache_backend;
if (http_cache_params_.type != HttpCacheParams::IN_MEMORY) { if (http_cache_params_.type != HttpCacheParams::IN_MEMORY) {
if (!cache_thread_task_runner_) {
cache_thread_task_runner_ =
base::CreateSingleThreadTaskRunnerWithTraits(
{base::MayBlock(), base::TaskPriority::USER_BLOCKING,
base::TaskShutdownBehavior::BLOCK_SHUTDOWN});
}
BackendType backend_type = BackendType backend_type =
http_cache_params_.type == HttpCacheParams::DISK http_cache_params_.type == HttpCacheParams::DISK
? CACHE_BACKEND_DEFAULT ? CACHE_BACKEND_DEFAULT
: CACHE_BACKEND_SIMPLE; : CACHE_BACKEND_SIMPLE;
http_cache_backend.reset(new HttpCache::DefaultBackend( http_cache_backend.reset(new HttpCache::DefaultBackend(
DISK_CACHE, backend_type, http_cache_params_.path, DISK_CACHE, backend_type, http_cache_params_.path,
http_cache_params_.max_size, http_cache_params_.max_size, cache_thread_task_runner_));
GetFileSingleThreadTaskRunner(
{base::MayBlock(), base::TaskPriority::USER_BLOCKING,
base::TaskShutdownBehavior::BLOCK_SHUTDOWN})));
} else { } else {
http_cache_backend = http_cache_backend =
HttpCache::DefaultBackend::InMemory(http_cache_params_.max_size); HttpCache::DefaultBackend::InMemory(http_cache_params_.max_size);
...@@ -499,7 +502,7 @@ std::unique_ptr<URLRequestContext> URLRequestContextBuilder::Build() { ...@@ -499,7 +502,7 @@ std::unique_ptr<URLRequestContext> URLRequestContextBuilder::Build() {
if (file_enabled_) { if (file_enabled_) {
job_factory->SetProtocolHandler( job_factory->SetProtocolHandler(
url::kFileScheme, url::kFileScheme,
base::MakeUnique<FileProtocolHandler>(GetFileTaskRunner( base::MakeUnique<FileProtocolHandler>(base::CreateTaskRunnerWithTraits(
{base::MayBlock(), base::TaskPriority::USER_BLOCKING, {base::MayBlock(), base::TaskPriority::USER_BLOCKING,
base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}))); base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})));
} }
...@@ -545,27 +548,4 @@ std::unique_ptr<ProxyService> URLRequestContextBuilder::CreateProxyService( ...@@ -545,27 +548,4 @@ std::unique_ptr<ProxyService> URLRequestContextBuilder::CreateProxyService(
std::move(proxy_config_service), net_log); std::move(proxy_config_service), net_log);
} }
scoped_refptr<base::TaskRunner> URLRequestContextBuilder::GetFileTaskRunner(
const base::TaskTraits& traits) {
if (file_task_runner_)
return file_task_runner_;
return base::CreateTaskRunnerWithTraits(traits);
}
scoped_refptr<base::SequencedTaskRunner>
URLRequestContextBuilder::GetFileSequencedTaskRunner(
const base::TaskTraits& traits) {
if (file_task_runner_)
return file_task_runner_;
return base::CreateSequencedTaskRunnerWithTraits(traits);
}
scoped_refptr<base::SingleThreadTaskRunner>
URLRequestContextBuilder::GetFileSingleThreadTaskRunner(
const base::TaskTraits& traits) {
if (file_task_runner_)
return file_task_runner_;
return base::CreateSingleThreadTaskRunnerWithTraits(traits);
}
} // namespace net } // namespace net
...@@ -44,8 +44,6 @@ ...@@ -44,8 +44,6 @@
namespace base { namespace base {
class SingleThreadTaskRunner; class SingleThreadTaskRunner;
class SequencedTaskRunner;
class TaskRunner;
} }
namespace net { namespace net {
...@@ -282,10 +280,12 @@ class NET_EXPORT URLRequestContextBuilder { ...@@ -282,10 +280,12 @@ class NET_EXPORT URLRequestContextBuilder {
std::unique_ptr<CookieStore> cookie_store, std::unique_ptr<CookieStore> cookie_store,
std::unique_ptr<ChannelIDService> channel_id_service); std::unique_ptr<ChannelIDService> channel_id_service);
// Sets the task runner used to perform file operations. If not set, // Sets the SingleThreadTaskRunner used to perform cache operations. If not
// TaskSchedulers will be used instead. // set, one will be created via a TaskScheduler instead. Other file tasks will
void SetFileTaskRunner( // use the task scheduler, but the cache needs a SingleThreadTaskRunner, so
const scoped_refptr<base::SingleThreadTaskRunner>& task_runner); // best to keep that configurable by the consumer.
void SetCacheThreadTaskRunner(
scoped_refptr<base::SingleThreadTaskRunner> cache_thread_task_runner);
// Note that if SDCH is enabled without a policy object observing // Note that if SDCH is enabled without a policy object observing
// the SDCH manager and handling at least Get-Dictionary events, the // the SDCH manager and handling at least Get-Dictionary events, the
...@@ -315,16 +315,6 @@ class NET_EXPORT URLRequestContextBuilder { ...@@ -315,16 +315,6 @@ class NET_EXPORT URLRequestContextBuilder {
NetworkDelegate* network_delegate, NetworkDelegate* network_delegate,
NetLog* net_log); NetLog* net_log);
// Returns a TaskRunner with the specified traits. If |file_task_runner_| is
// non-NULL, uses that. Otherwise, uses base/task_scheduler/ and the specified
// traits.
scoped_refptr<base::TaskRunner> GetFileTaskRunner(
const base::TaskTraits& traits);
scoped_refptr<base::SequencedTaskRunner> GetFileSequencedTaskRunner(
const base::TaskTraits& traits);
scoped_refptr<base::SingleThreadTaskRunner> GetFileSingleThreadTaskRunner(
const base::TaskTraits& traits);
private: private:
const char* name_; const char* name_;
bool enable_brotli_; bool enable_brotli_;
...@@ -347,7 +337,7 @@ class NET_EXPORT URLRequestContextBuilder { ...@@ -347,7 +337,7 @@ class NET_EXPORT URLRequestContextBuilder {
bool sdch_enabled_; bool sdch_enabled_;
bool cookie_store_set_by_client_; bool cookie_store_set_by_client_;
scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_; scoped_refptr<base::SingleThreadTaskRunner> cache_thread_task_runner_;
HttpCacheParams http_cache_params_; HttpCacheParams http_cache_params_;
HttpNetworkSession::Params http_network_session_params_; HttpNetworkSession::Params http_network_session_params_;
base::FilePath transport_security_persister_path_; base::FilePath transport_security_persister_path_;
......
...@@ -25,7 +25,6 @@ URLRequestContextGetter::URLRequestContextGetter( ...@@ -25,7 +25,6 @@ URLRequestContextGetter::URLRequestContextGetter(
net::URLRequestContext* URLRequestContextGetter::GetURLRequestContext() { net::URLRequestContext* URLRequestContextGetter::GetURLRequestContext() {
if (!url_request_context_.get()) { if (!url_request_context_.get()) {
net::URLRequestContextBuilder builder; net::URLRequestContextBuilder builder;
builder.SetFileTaskRunner(file_task_runner_);
net_log_.reset(new VlogNetLog()); net_log_.reset(new VlogNetLog());
builder.set_net_log(net_log_.get()); builder.set_net_log(net_log_.get());
builder.DisableHttpCache(); builder.DisableHttpCache();
......
...@@ -23,6 +23,7 @@ namespace remoting { ...@@ -23,6 +23,7 @@ namespace remoting {
class URLRequestContextGetter : public net::URLRequestContextGetter { class URLRequestContextGetter : public net::URLRequestContextGetter {
public: public:
// TODO(mmenke): Remove |file_task_runner|, as it's no longer used.
URLRequestContextGetter( URLRequestContextGetter(
scoped_refptr<base::SingleThreadTaskRunner> network_task_runner, scoped_refptr<base::SingleThreadTaskRunner> network_task_runner,
scoped_refptr<base::SingleThreadTaskRunner> file_task_runner); scoped_refptr<base::SingleThreadTaskRunner> file_task_runner);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment