diff options
author | alexclarke <alexclarke@chromium.org> | 2015-04-13 07:28:14 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-04-13 14:28:37 +0000 |
commit | 510ed9c42029e1b2924ac05082c958591f029624 (patch) | |
tree | 5f1f13d21fd43d80ad9744c7b7a7f029fbdb15e1 /content/renderer | |
parent | 11e6692eaefb5b8efd688aaae11e32c583a9ad9f (diff) | |
download | chromium_src-510ed9c42029e1b2924ac05082c958591f029624.zip chromium_src-510ed9c42029e1b2924ac05082c958591f029624.tar.gz chromium_src-510ed9c42029e1b2924ac05082c958591f029624.tar.bz2 |
Add a WorkerScheduler and a WebThreadImplForWorker
Adds a simple WorkerScheduler which supports Default and Idle Tasks (via
Long Idle Periods). A follow up Blink patch will refactor
WorkerThread.cpp to use these Idle Tasks.
A WorkerSceduler is a pre-requisite for refactoring away the Blink
Timer Heap as described in:
https://docs.google.com/document/d/163ow-1wjd6L0rAN3V_U6t12eqVkq4mXDDjVaA4OuvCA/edit?usp=sharing
BUG=463143
Review URL: https://codereview.chromium.org/1033643004
Cr-Commit-Position: refs/heads/master@{#324847}
Diffstat (limited to 'content/renderer')
-rw-r--r-- | content/renderer/renderer_blink_platform_impl.cc | 4 | ||||
-rw-r--r-- | content/renderer/renderer_blink_platform_impl.h | 4 | ||||
-rw-r--r-- | content/renderer/scheduler/renderer_scheduler_impl.h | 1 | ||||
-rw-r--r-- | content/renderer/scheduler/webthread_impl_for_renderer_scheduler.cc (renamed from content/renderer/scheduler/webthread_impl_for_scheduler.cc) | 23 | ||||
-rw-r--r-- | content/renderer/scheduler/webthread_impl_for_renderer_scheduler.h (renamed from content/renderer/scheduler/webthread_impl_for_scheduler.h) | 17 | ||||
-rw-r--r-- | content/renderer/scheduler/webthread_impl_for_renderer_scheduler_unittest.cc (renamed from content/renderer/scheduler/webthread_impl_for_scheduler_unittest.cc) | 22 |
6 files changed, 40 insertions, 31 deletions
diff --git a/content/renderer/renderer_blink_platform_impl.cc b/content/renderer/renderer_blink_platform_impl.cc index 19f1a54..ca7e1b8 100644 --- a/content/renderer/renderer_blink_platform_impl.cc +++ b/content/renderer/renderer_blink_platform_impl.cc @@ -53,7 +53,7 @@ #include "content/renderer/renderer_clipboard_delegate.h" #include "content/renderer/scheduler/renderer_scheduler.h" #include "content/renderer/scheduler/web_scheduler_impl.h" -#include "content/renderer/scheduler/webthread_impl_for_scheduler.h" +#include "content/renderer/scheduler/webthread_impl_for_renderer_scheduler.h" #include "content/renderer/screen_orientation/screen_orientation_observer.h" #include "content/renderer/webclipboard_impl.h" #include "content/renderer/webgraphicscontext3d_provider_impl.h" @@ -224,7 +224,7 @@ RendererBlinkPlatformImpl::RendererBlinkPlatformImpl( RendererScheduler* renderer_scheduler) : BlinkPlatformImpl(renderer_scheduler->DefaultTaskRunner()), web_scheduler_(new WebSchedulerImpl(renderer_scheduler)), - main_thread_(new WebThreadImplForScheduler(renderer_scheduler)), + main_thread_(new WebThreadImplForRendererScheduler(renderer_scheduler)), clipboard_delegate_(new RendererClipboardDelegate), clipboard_(new WebClipboardImpl(clipboard_delegate_.get())), mime_registry_(new RendererBlinkPlatformImpl::MimeRegistry), diff --git a/content/renderer/renderer_blink_platform_impl.h b/content/renderer/renderer_blink_platform_impl.h index f91e8cf..f668a71 100644 --- a/content/renderer/renderer_blink_platform_impl.h +++ b/content/renderer/renderer_blink_platform_impl.h @@ -51,7 +51,7 @@ class ThreadSafeSender; class WebClipboardImpl; class WebDatabaseObserverImpl; class WebFileSystemImpl; -class WebThreadImplForScheduler; +class WebThreadImplForRendererScheduler; class WebSchedulerImpl; class CONTENT_EXPORT RendererBlinkPlatformImpl : public BlinkPlatformImpl { @@ -211,7 +211,7 @@ class CONTENT_EXPORT RendererBlinkPlatformImpl : public BlinkPlatformImpl { device::VibrationManagerPtr& GetConnectedVibrationManagerService(); scoped_ptr<WebSchedulerImpl> web_scheduler_; - scoped_ptr<WebThreadImplForScheduler> main_thread_; + scoped_ptr<WebThreadImplForRendererScheduler> main_thread_; scoped_ptr<RendererClipboardDelegate> clipboard_delegate_; scoped_ptr<WebClipboardImpl> clipboard_; diff --git a/content/renderer/scheduler/renderer_scheduler_impl.h b/content/renderer/scheduler/renderer_scheduler_impl.h index e4fd630..9c3fc12 100644 --- a/content/renderer/scheduler/renderer_scheduler_impl.h +++ b/content/renderer/scheduler/renderer_scheduler_impl.h @@ -99,6 +99,7 @@ class CONTENT_EXPORT RendererSchedulerImpl bool CanEnterLongIdlePeriod( base::TimeTicks now, base::TimeDelta* next_long_idle_period_delay_out) override; + void IsNotQuiescent() override {} // Returns the serialized scheduler state for tracing. scoped_refptr<base::trace_event::ConvertableToTraceFormat> AsValueLocked( diff --git a/content/renderer/scheduler/webthread_impl_for_scheduler.cc b/content/renderer/scheduler/webthread_impl_for_renderer_scheduler.cc index b328142..4855df19 100644 --- a/content/renderer/scheduler/webthread_impl_for_scheduler.cc +++ b/content/renderer/scheduler/webthread_impl_for_renderer_scheduler.cc @@ -2,42 +2,49 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "content/renderer/scheduler/webthread_impl_for_scheduler.h" +#include "content/renderer/scheduler/webthread_impl_for_renderer_scheduler.h" #include "content/renderer/scheduler/renderer_scheduler.h" #include "third_party/WebKit/public/platform/WebTraceLocation.h" namespace content { -WebThreadImplForScheduler::WebThreadImplForScheduler( +WebThreadImplForRendererScheduler::WebThreadImplForRendererScheduler( RendererScheduler* scheduler) : task_runner_(scheduler->DefaultTaskRunner()), + idle_task_runner_(scheduler->IdleTaskRunner()), scheduler_(scheduler), thread_id_(base::PlatformThread::CurrentId()) { } -WebThreadImplForScheduler::~WebThreadImplForScheduler() { +WebThreadImplForRendererScheduler::~WebThreadImplForRendererScheduler() { } -blink::PlatformThreadId WebThreadImplForScheduler::threadId() const { +blink::PlatformThreadId WebThreadImplForRendererScheduler::threadId() const { return thread_id_; } -base::MessageLoop* WebThreadImplForScheduler::MessageLoop() const { +base::MessageLoop* WebThreadImplForRendererScheduler::MessageLoop() const { DCHECK(isCurrentThread()); return base::MessageLoop::current(); } -base::SingleThreadTaskRunner* WebThreadImplForScheduler::TaskRunner() const { +base::SingleThreadTaskRunner* WebThreadImplForRendererScheduler::TaskRunner() + const { return task_runner_.get(); } -void WebThreadImplForScheduler::AddTaskObserverInternal( +SingleThreadIdleTaskRunner* WebThreadImplForRendererScheduler::IdleTaskRunner() + const { + return idle_task_runner_.get(); +} + +void WebThreadImplForRendererScheduler::AddTaskObserverInternal( base::MessageLoop::TaskObserver* observer) { scheduler_->AddTaskObserver(observer); } -void WebThreadImplForScheduler::RemoveTaskObserverInternal( +void WebThreadImplForRendererScheduler::RemoveTaskObserverInternal( base::MessageLoop::TaskObserver* observer) { scheduler_->RemoveTaskObserver(observer); } diff --git a/content/renderer/scheduler/webthread_impl_for_scheduler.h b/content/renderer/scheduler/webthread_impl_for_renderer_scheduler.h index 36bd2e2..4b8d9fb 100644 --- a/content/renderer/scheduler/webthread_impl_for_scheduler.h +++ b/content/renderer/scheduler/webthread_impl_for_renderer_scheduler.h @@ -2,27 +2,27 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CONTENT_RENDERER_SCHEDULER_WEBTHREAD_IMPL_FOR_SCHEDULER_H_ -#define CONTENT_RENDERER_SCHEDULER_WEBTHREAD_IMPL_FOR_SCHEDULER_H_ - -#include "content/child/webthread_impl.h" +#ifndef CONTENT_RENDERER_SCHEDULER_WEBTHREAD_IMPL_FOR_RENDERER_SCHEDULER_H_ +#define CONTENT_RENDERER_SCHEDULER_WEBTHREAD_IMPL_FOR_RENDERER_SCHEDULER_H_ #include "base/containers/scoped_ptr_hash_map.h" +#include "content/child/webthread_base.h" namespace content { class RendererScheduler; -class CONTENT_EXPORT WebThreadImplForScheduler : public WebThreadBase { +class CONTENT_EXPORT WebThreadImplForRendererScheduler : public WebThreadBase { public: - explicit WebThreadImplForScheduler(RendererScheduler* scheduler); - virtual ~WebThreadImplForScheduler(); + explicit WebThreadImplForRendererScheduler(RendererScheduler* scheduler); + virtual ~WebThreadImplForRendererScheduler(); // blink::WebThread implementation. blink::PlatformThreadId threadId() const override; // WebThreadBase implementation. base::SingleThreadTaskRunner* TaskRunner() const override; + SingleThreadIdleTaskRunner* IdleTaskRunner() const override; private: base::MessageLoop* MessageLoop() const override; @@ -32,10 +32,11 @@ class CONTENT_EXPORT WebThreadImplForScheduler : public WebThreadBase { base::MessageLoop::TaskObserver* observer) override; scoped_refptr<base::SingleThreadTaskRunner> task_runner_; + scoped_refptr<SingleThreadIdleTaskRunner> idle_task_runner_; RendererScheduler* scheduler_; // Not owned. blink::PlatformThreadId thread_id_; }; } // namespace content -#endif // CONTENT_RENDERER_SCHEDULER_WEBTHREAD_IMPL_FOR_SCHEDULER_H_ +#endif // CONTENT_RENDERER_SCHEDULER_WEBTHREAD_IMPL_FOR_RENDERER_SCHEDULER_H_ diff --git a/content/renderer/scheduler/webthread_impl_for_scheduler_unittest.cc b/content/renderer/scheduler/webthread_impl_for_renderer_scheduler_unittest.cc index e9e359a..191a271 100644 --- a/content/renderer/scheduler/webthread_impl_for_scheduler_unittest.cc +++ b/content/renderer/scheduler/webthread_impl_for_renderer_scheduler_unittest.cc @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "content/renderer/scheduler/webthread_impl_for_scheduler.h" +#include "content/renderer/scheduler/webthread_impl_for_renderer_scheduler.h" #include "base/run_loop.h" #include "content/child/scheduler/scheduler_message_loop_delegate.h" @@ -28,14 +28,14 @@ class MockTaskObserver : public blink::WebThread::TaskObserver { }; } // namespace -class WebThreadImplForSchedulerTest : public testing::Test { +class WebThreadImplForRendererSchedulerTest : public testing::Test { public: - WebThreadImplForSchedulerTest() + WebThreadImplForRendererSchedulerTest() : scheduler_(SchedulerMessageLoopDelegate::Create(&message_loop_)), default_task_runner_(scheduler_.DefaultTaskRunner()), thread_(&scheduler_) {} - ~WebThreadImplForSchedulerTest() override {} + ~WebThreadImplForRendererSchedulerTest() override {} void SetWorkBatchSizeForTesting(size_t work_batch_size) { scheduler_.SetWorkBatchSizeForTesting(work_batch_size); @@ -51,12 +51,12 @@ class WebThreadImplForSchedulerTest : public testing::Test { base::MessageLoop message_loop_; RendererSchedulerImpl scheduler_; scoped_refptr<base::SingleThreadTaskRunner> default_task_runner_; - WebThreadImplForScheduler thread_; + WebThreadImplForRendererScheduler thread_; - DISALLOW_COPY_AND_ASSIGN(WebThreadImplForSchedulerTest); + DISALLOW_COPY_AND_ASSIGN(WebThreadImplForRendererSchedulerTest); }; -TEST_F(WebThreadImplForSchedulerTest, TestTaskObserver) { +TEST_F(WebThreadImplForRendererSchedulerTest, TestTaskObserver) { MockTaskObserver observer; thread_.addTaskObserver(&observer); scoped_ptr<MockTask> task(new MockTask()); @@ -75,7 +75,7 @@ TEST_F(WebThreadImplForSchedulerTest, TestTaskObserver) { thread_.removeTaskObserver(&observer); } -TEST_F(WebThreadImplForSchedulerTest, TestWorkBatchWithOneTask) { +TEST_F(WebThreadImplForRendererSchedulerTest, TestWorkBatchWithOneTask) { MockTaskObserver observer; thread_.addTaskObserver(&observer); scoped_ptr<MockTask> task(new MockTask()); @@ -95,7 +95,7 @@ TEST_F(WebThreadImplForSchedulerTest, TestWorkBatchWithOneTask) { thread_.removeTaskObserver(&observer); } -TEST_F(WebThreadImplForSchedulerTest, TestWorkBatchWithTwoTasks) { +TEST_F(WebThreadImplForRendererSchedulerTest, TestWorkBatchWithTwoTasks) { MockTaskObserver observer; thread_.addTaskObserver(&observer); scoped_ptr<MockTask> task1(new MockTask()); @@ -121,7 +121,7 @@ TEST_F(WebThreadImplForSchedulerTest, TestWorkBatchWithTwoTasks) { thread_.removeTaskObserver(&observer); } -TEST_F(WebThreadImplForSchedulerTest, TestWorkBatchWithThreeTasks) { +TEST_F(WebThreadImplForRendererSchedulerTest, TestWorkBatchWithThreeTasks) { MockTaskObserver observer; thread_.addTaskObserver(&observer); scoped_ptr<MockTask> task1(new MockTask()); @@ -172,7 +172,7 @@ void EnterRunLoop(base::MessageLoop* message_loop, blink::WebThread* thread) { run_loop.Run(); } -TEST_F(WebThreadImplForSchedulerTest, TestNestedRunLoop) { +TEST_F(WebThreadImplForRendererSchedulerTest, TestNestedRunLoop) { MockTaskObserver observer; thread_.addTaskObserver(&observer); |