提交 1946924b 编写于 作者: A Adam Barth

Introduce IO thread for background tasks

Currently we run some tasks on the UI thread that shouldn't block the frame,
such as decoding images. This patch introduces a background thread on which we
can run these tasks.
上级 65160d58
......@@ -54,7 +54,7 @@ void CallHandleMessage(base::WeakPtr<DartState> dart_state) {
void MessageNotifyCallback(Dart_Isolate dest_isolate) {
DCHECK(Platform::current());
Platform::current()->mainThreadTaskRunner()->PostTask(FROM_HERE,
Platform::current()->GetUITaskRunner()->PostTask(FROM_HERE,
base::Bind(&CallHandleMessage, DartState::From(dest_isolate)->GetWeakPtr()));
}
......
......@@ -126,7 +126,7 @@ static void didCreateSharedBuffer(SharedBuffer* buffer)
MutexLocker locker(statsMutex());
liveBuffers().add(buffer);
Platform::current()->mainThreadTaskRunner()->PostTask(FROM_HERE, base::Bind(&printStats));
Platform::current()->GetUITaskRunner()->PostTask(FROM_HERE, base::Bind(&printStats));
}
static void willDestroySharedBuffer(SharedBuffer* buffer)
......
......@@ -170,8 +170,8 @@ public:
// Returns a value such as "en-US".
virtual WebString defaultLocale() { return WebString(); }
virtual base::SingleThreadTaskRunner* mainThreadTaskRunner() { return 0; }
virtual base::SingleThreadTaskRunner* GetUITaskRunner() { return 0; }
virtual base::SingleThreadTaskRunner* GetIOTaskRunner() { return 0; }
// Vibration -----------------------------------------------------------
......
......@@ -62,9 +62,15 @@ Shell::Shell(scoped_ptr<ServiceProviderContext> service_provider_context)
gpu_thread_.reset(new base::Thread("gpu_thread"));
gpu_thread_->StartWithOptions(options);
gpu_task_runner_ = gpu_thread_->message_loop()->task_runner();
ui_thread_.reset(new base::Thread("ui_thread"));
ui_thread_->StartWithOptions(options);
ui_task_runner_ = ui_thread_->message_loop()->task_runner();
io_thread_.reset(new base::Thread("io_thread"));
io_thread_->StartWithOptions(options);
io_task_runner_ = io_thread_->message_loop()->task_runner();
ui_task_runner()->PostTask(FROM_HERE, base::Bind(&Engine::Init));
}
......
......@@ -25,12 +25,16 @@ class Shell {
scoped_ptr<ServiceProviderContext> service_provider_context);
static Shell& Shared();
scoped_refptr<base::SingleThreadTaskRunner> gpu_task_runner() const {
return gpu_thread_->message_loop()->task_runner();
base::SingleThreadTaskRunner* gpu_task_runner() const {
return gpu_task_runner_.get();
}
scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner() const {
return ui_thread_->message_loop()->task_runner();
base::SingleThreadTaskRunner* ui_task_runner() const {
return ui_task_runner_.get();
}
base::SingleThreadTaskRunner* io_task_runner() const {
return io_task_runner_.get();
}
ServiceProviderContext* service_provider_context() const {
......@@ -47,6 +51,12 @@ class Shell {
scoped_ptr<base::Thread> gpu_thread_;
scoped_ptr<base::Thread> ui_thread_;
scoped_ptr<base::Thread> io_thread_;
scoped_refptr<base::SingleThreadTaskRunner> gpu_task_runner_;
scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_;
scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_;
scoped_ptr<ServiceProviderContext> service_provider_context_;
TracingController tracing_controller_;
......
......@@ -4,11 +4,12 @@
#include "sky/shell/ui/platform_impl.h"
#include "sky/shell/shell.h"
namespace sky {
namespace shell {
PlatformImpl::PlatformImpl()
: main_thread_task_runner_(base::MessageLoop::current()->task_runner()) {
PlatformImpl::PlatformImpl() {
}
PlatformImpl::~PlatformImpl() {
......@@ -18,8 +19,12 @@ blink::WebString PlatformImpl::defaultLocale() {
return blink::WebString::fromUTF8("en-US");
}
base::SingleThreadTaskRunner* PlatformImpl::mainThreadTaskRunner() {
return main_thread_task_runner_.get();
base::SingleThreadTaskRunner* PlatformImpl::GetUITaskRunner() {
return Shell::Shared().ui_task_runner();
}
base::SingleThreadTaskRunner* PlatformImpl::GetIOTaskRunner() {
return Shell::Shared().io_task_runner();
}
} // namespace shell
......
......@@ -18,11 +18,11 @@ class PlatformImpl : public blink::Platform {
// blink::Platform methods:
blink::WebString defaultLocale() override;
base::SingleThreadTaskRunner* mainThreadTaskRunner() override;
private:
scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_;
base::SingleThreadTaskRunner* GetUITaskRunner() override;
base::SingleThreadTaskRunner* GetIOTaskRunner() override;
private:
DISALLOW_COPY_AND_ASSIGN(PlatformImpl);
};
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册