Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
sxychenjing
engine
提交
ce2719ce
E
engine
项目概览
sxychenjing
/
engine
与 Fork 源项目一致
从无法访问的项目Fork
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
E
engine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
ce2719ce
编写于
10月 09, 2015
作者:
A
Adam Barth
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #1553 from abarth/io_thread
Introduce IO thread for background tasks
上级
65160d58
1888eacb
变更
12
隐藏空白更改
内联
并排
Showing
12 changed file
with
134 addition
and
41 deletion
+134
-41
sky/engine/core/loader/CanvasImageDecoder.cpp
sky/engine/core/loader/CanvasImageDecoder.cpp
+12
-16
sky/engine/core/loader/CanvasImageDecoder.h
sky/engine/core/loader/CanvasImageDecoder.h
+4
-10
sky/engine/core/script/dart_controller.cc
sky/engine/core/script/dart_controller.cc
+1
-1
sky/engine/platform/BUILD.gn
sky/engine/platform/BUILD.gn
+3
-0
sky/engine/platform/SharedBuffer.cpp
sky/engine/platform/SharedBuffer.cpp
+1
-1
sky/engine/platform/mojo/data_pipe.cc
sky/engine/platform/mojo/data_pipe.cc
+59
-0
sky/engine/platform/mojo/data_pipe.h
sky/engine/platform/mojo/data_pipe.h
+20
-0
sky/engine/public/platform/Platform.h
sky/engine/public/platform/Platform.h
+2
-2
sky/shell/shell.cc
sky/shell/shell.cc
+6
-0
sky/shell/shell.h
sky/shell/shell.h
+14
-4
sky/shell/ui/platform_impl.cc
sky/shell/ui/platform_impl.cc
+9
-4
sky/shell/ui/platform_impl.h
sky/shell/ui/platform_impl.h
+3
-3
未找到文件。
sky/engine/core/loader/CanvasImageDecoder.cpp
浏览文件 @
ce2719ce
...
...
@@ -9,6 +9,7 @@
#include "sky/engine/core/painting/CanvasImage.h"
#include "sky/engine/platform/SharedBuffer.h"
#include "sky/engine/platform/image-decoders/ImageDecoder.h"
#include "sky/engine/platform/mojo/data_pipe.h"
namespace
blink
{
...
...
@@ -20,14 +21,12 @@ PassRefPtr<CanvasImageDecoder> CanvasImageDecoder::create(
CanvasImageDecoder
::
CanvasImageDecoder
(
PassOwnPtr
<
ImageDecoderCallback
>
callback
)
:
callback_
(
callback
),
weak_factory_
(
this
)
{
CHECK
(
callback_
);
buffer_
=
SharedBuffer
::
create
();
}
CanvasImageDecoder
::~
CanvasImageDecoder
()
{
}
void
CanvasImageDecoder
::
initWithConsumer
(
mojo
::
ScopedDataPipeConsumerHandle
handle
)
{
CHECK
(
!
drainer_
);
if
(
!
handle
.
is_valid
())
{
base
::
MessageLoop
::
current
()
->
PostTask
(
FROM_HERE
,
base
::
Bind
(
&
CanvasImageDecoder
::
RejectCallback
,
...
...
@@ -35,26 +34,23 @@ void CanvasImageDecoder::initWithConsumer(mojo::ScopedDataPipeConsumerHandle han
return
;
}
drainer_
=
adoptPtr
(
new
mojo
::
common
::
DataPipeDrainer
(
this
,
handle
.
Pass
()));
DrainDataPipeInBackground
(
handle
.
Pass
(),
base
::
Bind
(
&
CanvasImageDecoder
::
Decode
,
weak_factory_
.
GetWeakPtr
()));
}
void
CanvasImageDecoder
::
initWithList
(
const
Uint8List
&
list
)
{
CHECK
(
!
drainer_
);
OnDataAvailable
(
list
.
data
(),
list
.
num_elements
());
RefPtr
<
SharedBuffer
>
buffer
=
SharedBuffer
::
create
(
list
.
num_elements
()
);
buffer
->
append
(
reinterpret_cast
<
const
char
*>
(
list
.
data
()),
list
.
num_elements
());
base
::
MessageLoop
::
current
()
->
PostTask
(
FROM_HERE
,
base
::
Bind
(
&
CanvasImageDecoder
::
OnDataComplete
,
weak_factory_
.
GetWeakPtr
()));
}
void
CanvasImageDecoder
::
OnDataAvailable
(
const
void
*
data
,
size_t
num_bytes
)
{
buffer_
->
append
(
static_cast
<
const
char
*>
(
data
),
num_bytes
);
FROM_HERE
,
base
::
Bind
(
&
CanvasImageDecoder
::
Decode
,
weak_factory_
.
GetWeakPtr
(),
buffer
.
release
()));
}
void
CanvasImageDecoder
::
OnDataComplete
(
)
{
TRACE_EVENT0
(
"blink"
,
"CanvasImageDecoder::
OnDataComplet
e"
);
void
CanvasImageDecoder
::
Decode
(
PassRefPtr
<
SharedBuffer
>
buffer
)
{
TRACE_EVENT0
(
"blink"
,
"CanvasImageDecoder::
Decod
e"
);
OwnPtr
<
ImageDecoder
>
decoder
=
ImageDecoder
::
create
(
*
buffer
_
.
get
(),
ImageSource
::
AlphaPremultiplied
,
ImageDecoder
::
create
(
*
buffer
.
get
(),
ImageSource
::
AlphaPremultiplied
,
ImageSource
::
GammaAndColorProfileIgnored
);
// decoder can be null if the buffer we was empty and we couldn't even guess
// what type of image to decode.
...
...
@@ -62,7 +58,7 @@ void CanvasImageDecoder::OnDataComplete() {
callback_
->
handleEvent
(
nullptr
);
return
;
}
decoder
->
setData
(
buffer
_
.
get
(),
true
);
decoder
->
setData
(
buffer
.
get
(),
true
);
if
(
decoder
->
failed
()
||
decoder
->
frameCount
()
==
0
)
{
callback_
->
handleEvent
(
nullptr
);
return
;
...
...
sky/engine/core/loader/CanvasImageDecoder.h
浏览文件 @
ce2719ce
...
...
@@ -7,7 +7,7 @@
#define SKY_ENGINE_CORE_LOADER_CANVASIMAGELOADER_H_
#include "base/memory/weak_ptr.h"
#include "mojo/
data_pipe_utils/data_pipe_drainer
.h"
#include "mojo/
public/cpp/system/core
.h"
#include "sky/engine/core/loader/ImageDecoderCallback.h"
#include "sky/engine/platform/SharedBuffer.h"
#include "sky/engine/tonic/dart_wrappable.h"
...
...
@@ -17,28 +17,22 @@
namespace
blink
{
class
CanvasImageDecoder
:
public
mojo
::
common
::
DataPipeDrainer
::
Client
,
public
RefCounted
<
CanvasImageDecoder
>
,
class
CanvasImageDecoder
:
public
RefCounted
<
CanvasImageDecoder
>
,
public
DartWrappable
{
DEFINE_WRAPPERTYPEINFO
();
public:
static
PassRefPtr
<
CanvasImageDecoder
>
create
(
PassOwnPtr
<
ImageDecoderCallback
>
callback
);
virtual
~
CanvasImageDecoder
();
// mojo::common::DataPipeDrainer::Client
void
OnDataAvailable
(
const
void
*
,
size_t
)
override
;
void
OnDataComplete
()
override
;
void
initWithConsumer
(
mojo
::
ScopedDataPipeConsumerHandle
handle
);
void
initWithList
(
const
Uint8List
&
list
);
private:
CanvasImageDecoder
(
PassOwnPtr
<
ImageDecoderCallback
>
callback
);
explicit
CanvasImageDecoder
(
PassOwnPtr
<
ImageDecoderCallback
>
callback
);
void
Decode
(
PassRefPtr
<
SharedBuffer
>
buffer
);
void
RejectCallback
();
OwnPtr
<
mojo
::
common
::
DataPipeDrainer
>
drainer_
;
RefPtr
<
SharedBuffer
>
buffer_
;
OwnPtr
<
ImageDecoderCallback
>
callback_
;
base
::
WeakPtrFactory
<
CanvasImageDecoder
>
weak_factory_
;
...
...
sky/engine/core/script/dart_controller.cc
浏览文件 @
ce2719ce
...
...
@@ -54,7 +54,7 @@ void CallHandleMessage(base::WeakPtr<DartState> dart_state) {
void
MessageNotifyCallback
(
Dart_Isolate
dest_isolate
)
{
DCHECK
(
Platform
::
current
());
Platform
::
current
()
->
mainThread
TaskRunner
()
->
PostTask
(
FROM_HERE
,
Platform
::
current
()
->
GetUI
TaskRunner
()
->
PostTask
(
FROM_HERE
,
base
::
Bind
(
&
CallHandleMessage
,
DartState
::
From
(
dest_isolate
)
->
GetWeakPtr
()));
}
...
...
sky/engine/platform/BUILD.gn
浏览文件 @
ce2719ce
...
...
@@ -427,6 +427,8 @@ source_set("platform") {
"image-encoders/skia/JPEGImageEncoder.h",
"image-encoders/skia/PNGImageEncoder.cpp",
"image-encoders/skia/PNGImageEncoder.h",
"mojo/data_pipe.cc",
"mojo/data_pipe.h",
"text/BidiCharacterRun.cpp",
"text/BidiCharacterRun.h",
"text/BidiContext.cpp",
...
...
@@ -542,6 +544,7 @@ source_set("platform") {
":make_platform_generated",
"//base:base",
"//mojo/application",
"//mojo/data_pipe_utils",
"//mojo/environment:chromium",
"//mojo/public/c/system",
"//mojo/public/cpp/bindings",
...
...
sky/engine/platform/SharedBuffer.cpp
浏览文件 @
ce2719ce
...
...
@@ -126,7 +126,7 @@ static void didCreateSharedBuffer(SharedBuffer* buffer)
MutexLocker
locker
(
statsMutex
());
liveBuffers
().
add
(
buffer
);
Platform
::
current
()
->
mainThread
TaskRunner
()
->
PostTask
(
FROM_HERE
,
base
::
Bind
(
&
printStats
));
Platform
::
current
()
->
GetUI
TaskRunner
()
->
PostTask
(
FROM_HERE
,
base
::
Bind
(
&
printStats
));
}
static
void
willDestroySharedBuffer
(
SharedBuffer
*
buffer
)
...
...
sky/engine/platform/mojo/data_pipe.cc
0 → 100644
浏览文件 @
ce2719ce
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "sky/engine/platform/mojo/data_pipe.h"
#include <memory>
#include "base/bind.h"
#include "mojo/data_pipe_utils/data_pipe_drainer.h"
#include "sky/engine/platform/mojo/data_pipe.h"
#include "sky/engine/public/platform/Platform.h"
#include "sky/engine/wtf/RefPtr.h"
namespace
blink
{
namespace
{
class
DrainJob
:
public
mojo
::
common
::
DataPipeDrainer
::
Client
{
public:
explicit
DrainJob
(
base
::
Callback
<
void
(
PassRefPtr
<
SharedBuffer
>
)
>
callback
)
:
callback_
(
callback
)
{
}
void
Start
(
mojo
::
ScopedDataPipeConsumerHandle
handle
)
{
buffer_
=
SharedBuffer
::
create
();
drainer_
.
reset
(
new
mojo
::
common
::
DataPipeDrainer
(
this
,
handle
.
Pass
()));
}
private:
// mojo::common::DataPipeDrainer::Client
void
OnDataAvailable
(
const
void
*
data
,
size_t
num_bytes
)
override
{
buffer_
->
append
(
static_cast
<
const
char
*>
(
data
),
num_bytes
);
}
void
OnDataComplete
()
override
{
Platform
::
current
()
->
GetUITaskRunner
()
->
PostTask
(
FROM_HERE
,
base
::
Bind
(
callback_
,
buffer_
.
release
()));
delete
this
;
}
base
::
Callback
<
void
(
PassRefPtr
<
SharedBuffer
>
)
>
callback_
;
RefPtr
<
SharedBuffer
>
buffer_
;
std
::
unique_ptr
<
mojo
::
common
::
DataPipeDrainer
>
drainer_
;
DISALLOW_COPY_AND_ASSIGN
(
DrainJob
);
};
}
// namespace
void
DrainDataPipeInBackground
(
mojo
::
ScopedDataPipeConsumerHandle
handle
,
base
::
Callback
<
void
(
PassRefPtr
<
SharedBuffer
>
)
>
callback
)
{
DrainJob
*
job
=
new
DrainJob
(
callback
);
Platform
::
current
()
->
GetIOTaskRunner
()
->
PostTask
(
FROM_HERE
,
base
::
Bind
(
&
DrainJob
::
Start
,
base
::
Unretained
(
job
),
base
::
Passed
(
&
handle
)));
}
}
// namespace blink
sky/engine/platform/mojo/data_pipe.h
0 → 100644
浏览文件 @
ce2719ce
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SKY_ENGINE_PLATFORM_MOJO_DATA_PIPE_H_
#define SKY_ENGINE_PLATFORM_MOJO_DATA_PIPE_H_
#include "base/callback.h"
#include "mojo/public/cpp/system/core.h"
#include "sky/engine/platform/SharedBuffer.h"
namespace
blink
{
void
DrainDataPipeInBackground
(
mojo
::
ScopedDataPipeConsumerHandle
handle
,
base
::
Callback
<
void
(
PassRefPtr
<
SharedBuffer
>
)
>
callback
);
}
// namespace blink
#endif // SKY_ENGINE_PLATFORM_MOJO_DATA_PIPE_H_
sky/engine/public/platform/Platform.h
浏览文件 @
ce2719ce
...
...
@@ -170,8 +170,8 @@ public:
// Returns a value such as "en-US".
virtual
WebString
defaultLocale
()
{
return
WebString
();
}
virtual
base
::
SingleThreadTaskRunner
*
mainThread
TaskRunner
()
{
return
0
;
}
virtual
base
::
SingleThreadTaskRunner
*
GetUI
TaskRunner
()
{
return
0
;
}
virtual
base
::
SingleThreadTaskRunner
*
GetIOTaskRunner
()
{
return
0
;
}
// Vibration -----------------------------------------------------------
...
...
sky/shell/shell.cc
浏览文件 @
ce2719ce
...
...
@@ -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
));
}
...
...
sky/shell/shell.h
浏览文件 @
ce2719ce
...
...
@@ -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_t
hread_
->
message_loop
()
->
task_runner
();
base
::
SingleThreadTaskRunner
*
gpu_task_runner
()
const
{
return
gpu_t
ask_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_
;
...
...
sky/shell/ui/platform_impl.cc
浏览文件 @
ce2719ce
...
...
@@ -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
...
...
sky/shell/ui/platform_impl.h
浏览文件 @
ce2719ce
...
...
@@ -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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录