Chromium Code Reviews| Index: content/public/renderer/content_renderer_client.cc |
| diff --git a/content/public/renderer/content_renderer_client.cc b/content/public/renderer/content_renderer_client.cc |
| index 642521f5819662f50c28f83e12418c2ca6632a26..b276888086864ca5309db4720d1542013059af59 100644 |
| --- a/content/public/renderer/content_renderer_client.cc |
| +++ b/content/public/renderer/content_renderer_client.cc |
| @@ -4,6 +4,12 @@ |
| #include "content/public/renderer/content_renderer_client.h" |
| +#include "base/bind.h" |
| +#include "base/task_scheduler/initialization_util.h" |
| +#include "base/task_scheduler/scheduler_worker_pool_params.h" |
| +#include "base/task_scheduler/task_traits.h" |
| +#include "base/threading/platform_thread.h" |
| +#include "base/time/time.h" |
| #include "cc/blimp/remote_compositor_bridge.h" |
| #include "content/public/renderer/media_stream_renderer_factory.h" |
| #include "media/base/renderer_factory.h" |
| @@ -12,6 +18,24 @@ |
| namespace content { |
| +namespace { |
| + |
| +enum WorkerPoolType : size_t { |
| + BACKGROUND_WORKER_POOL = 0, |
| + FOREGROUND_WORKER_POOL, |
|
gab
2016/11/18 18:31:59
Not used anywhere but in GetTaskSchedulerWorkerPoo
|
| + WORKER_POOL_COUNT // Always last. |
| +}; |
| + |
| +size_t GetTaskSchedulerWorkerPoolIndexForTraits( |
| + const base::TaskTraits& traits) { |
| + DCHECK(!traits.with_file_io()); |
| + return traits.priority() == base::TaskPriority::BACKGROUND |
| + ? BACKGROUND_WORKER_POOL |
| + : FOREGROUND_WORKER_POOL; |
| +} |
|
gab
2016/11/18 18:31:59
I'd prefer for this to be inlined in method's scop
|
| + |
| +} // namespace |
| + |
| SkBitmap* ContentRendererClient::GetSadPluginBitmap() { |
| return nullptr; |
| } |
| @@ -44,6 +68,43 @@ bool ContentRendererClient::ShouldSuppressErrorPage(RenderFrame* render_frame, |
| return false; |
| } |
| +void ContentRendererClient::GetTaskSchedulerInitializationArguments( |
| + std::vector<base::SchedulerWorkerPoolParams>* worker_pool_params_vector, |
| + base::Callback<size_t(const base::TaskTraits& traits)>* |
| + worker_pool_index_for_traits_callback, |
| + bool* redirect_sequenced_worker_pool) { |
| + constexpr int kBackgroundThreadsMin = 3; |
| + constexpr int kBackgroundThreadsMax = 8; |
| + constexpr double kBackgroundThreadsCoresMultiplier = 0.1; |
| + constexpr int kBackgroundThreadsOffset = 0; |
| + worker_pool_params_vector->emplace_back( |
| + "RendererBackground", base::ThreadPriority::NORMAL, |
| + base::SchedulerWorkerPoolParams::IORestriction::DISALLOWED, |
| + base::SchedulerWorkerPoolParams::StandbyThreadPolicy::LAZY, |
| + base::RecommendedMaxNumberOfThreadsInPool( |
| + kBackgroundThreadsMin, kBackgroundThreadsMax, |
| + kBackgroundThreadsCoresMultiplier, kBackgroundThreadsOffset), |
| + base::TimeDelta::FromSeconds(30)); |
| + |
| + constexpr int kForegroundThreadsMin = 8; |
| + constexpr int kForegroundThreadsMax = 32; |
| + constexpr double kForegroundThreadsCoresMultiplier = 0.3; |
| + constexpr int kForegroundThreadsOffset = 0; |
|
gab
2016/11/18 18:31:59
These constants are probably too high for the rend
|
| + worker_pool_params_vector->emplace_back( |
| + "RendererForeground", base::ThreadPriority::NORMAL, |
| + base::SchedulerWorkerPoolParams::IORestriction::DISALLOWED, |
| + base::SchedulerWorkerPoolParams::StandbyThreadPolicy::LAZY, |
| + base::RecommendedMaxNumberOfThreadsInPool( |
| + kForegroundThreadsMin, kForegroundThreadsMax, |
| + kForegroundThreadsCoresMultiplier, kForegroundThreadsOffset), |
| + base::TimeDelta::FromSeconds(30)); |
| + |
| + *worker_pool_index_for_traits_callback = |
| + base::Bind(&GetTaskSchedulerWorkerPoolIndexForTraits); |
| + |
| + *redirect_sequenced_worker_pool = false; |
| +} |
| + |
| void ContentRendererClient::DeferMediaLoad( |
| RenderFrame* render_frame, |
| bool has_played_media_before, |