diff --git a/services/sky/platform_impl.cc b/services/sky/platform_impl.cc index a26df36934fa3ce182d14d9a5462c377a126fe45..0f5eb57178267459e2018211f462cd3ba40ed375 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 c52a9be426151690d21b34b95fbabf7eb29a19e7..6f4361a5dc5aed4a6fb4e76ea50de56f036e478e 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 2e639eeb7f4ab8f9c01b9ca8ca6ac8307e304402..3a7ebe0102309eb3ab6228231a97c25ac26377d2 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(