summaryrefslogtreecommitdiffstats
path: root/content/renderer
diff options
context:
space:
mode:
authoralexclarke <alexclarke@chromium.org>2015-04-13 07:28:14 -0700
committerCommit bot <commit-bot@chromium.org>2015-04-13 14:28:37 +0000
commit510ed9c42029e1b2924ac05082c958591f029624 (patch)
tree5f1f13d21fd43d80ad9744c7b7a7f029fbdb15e1 /content/renderer
parent11e6692eaefb5b8efd688aaae11e32c583a9ad9f (diff)
downloadchromium_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.cc4
-rw-r--r--content/renderer/renderer_blink_platform_impl.h4
-rw-r--r--content/renderer/scheduler/renderer_scheduler_impl.h1
-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);