diff --git a/services/sky/platform_impl.cc b/services/sky/platform_impl.cc index a26df3693..0f5eb5717 100644 --- a/services/sky/platform_impl.cc +++ b/services/sky/platform_impl.cc @@ -4,10 +4,26 @@ #include "services/sky/platform_impl.h" +#include "base/bind.h" +#include "mojo/message_pump/message_pump_mojo.h" + namespace sky { +namespace { + +scoped_ptr CreateMessagePumpMojo() { + return make_scoped_ptr(new mojo::common::MessagePumpMojo); +} + +} // namespace PlatformImpl::PlatformImpl() - : main_thread_task_runner_(base::MessageLoop::current()->task_runner()) { + : ui_task_runner_(base::MessageLoop::current()->task_runner()) { + base::Thread::Options options; + options.message_pump_factory = base::Bind(&CreateMessagePumpMojo); + + io_thread_.reset(new base::Thread("io_thread")); + io_thread_->StartWithOptions(options); + io_task_runner_ = io_thread_->message_loop()->task_runner(); } PlatformImpl::~PlatformImpl() { @@ -17,8 +33,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 ui_task_runner_.get(); +} + +base::SingleThreadTaskRunner* PlatformImpl::GetIOTaskRunner() { + return io_task_runner_.get(); } } // namespace sky diff --git a/services/sky/platform_impl.h b/services/sky/platform_impl.h index c52a9be42..6f4361a5d 100644 --- a/services/sky/platform_impl.h +++ b/services/sky/platform_impl.h @@ -7,6 +7,7 @@ #include "base/message_loop/message_loop.h" #include "sky/engine/public/platform/Platform.h" +#include "base/threading/thread.h" namespace sky { @@ -17,10 +18,14 @@ class PlatformImpl : public blink::Platform { // blink::Platform methods: blink::WebString defaultLocale() override; - base::SingleThreadTaskRunner* mainThreadTaskRunner() override; + base::SingleThreadTaskRunner* GetUITaskRunner() override; + base::SingleThreadTaskRunner* GetIOTaskRunner() override; private: - scoped_refptr main_thread_task_runner_; + scoped_refptr ui_task_runner_; + scoped_refptr io_task_runner_; + + scoped_ptr io_thread_; DISALLOW_COPY_AND_ASSIGN(PlatformImpl); }; diff --git a/sky/engine/core/loader/CanvasImageDecoder.cpp b/sky/engine/core/loader/CanvasImageDecoder.cpp index 2e639eeb7..3a7ebe010 100644 --- a/sky/engine/core/loader/CanvasImageDecoder.cpp +++ b/sky/engine/core/loader/CanvasImageDecoder.cpp @@ -39,7 +39,7 @@ void CanvasImageDecoder::initWithConsumer(mojo::ScopedDataPipeConsumerHandle han } void CanvasImageDecoder::initWithList(const Uint8List& list) { - RefPtr buffer = SharedBuffer::create(list.num_elements()); + RefPtr buffer = SharedBuffer::create(); buffer->append(reinterpret_cast(list.data()), list.num_elements()); base::MessageLoop::current()->PostTask(