Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
liujiuri
engine
提交
7412b7e1
E
engine
项目概览
liujiuri
/
engine
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
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,发现更多精彩内容 >>
提交
7412b7e1
编写于
6月 27, 2017
作者:
F
freiling
提交者:
Chinmay Garde
6月 27, 2017
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[Content Handler] Fix VulkanRasterizer file watcher foo (#3835)
上级
098102fc
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
29 addition
and
10 deletion
+29
-10
content_handler/vulkan_rasterizer.cc
content_handler/vulkan_rasterizer.cc
+28
-10
content_handler/vulkan_rasterizer.h
content_handler/vulkan_rasterizer.h
+1
-0
未找到文件。
content_handler/vulkan_rasterizer.cc
浏览文件 @
7412b7e1
...
...
@@ -6,6 +6,7 @@
#include <fcntl.h>
#include <magenta/device/vfs.h>
#include <mxio/watcher.h>
#include <unistd.h>
#include <chrono>
...
...
@@ -23,26 +24,43 @@ namespace {
constexpr
char
kDisplayDriverClass
[]
=
"/dev/class/display"
;
void
WaitForFirstDisplayDriver
()
{
bool
WaitForFirstDisplayDriver
()
{
ftl
::
UniqueFD
fd
(
open
(
kDisplayDriverClass
,
O_DIRECTORY
|
O_RDONLY
));
if
(
fd
.
get
()
<
0
)
{
FTL_DLOG
(
ERROR
)
<<
"Failed to open "
<<
kDisplayDriverClass
;
return
;
return
false
;
}
// Create the directory watch channel.
mx_handle_t
watcher
;
if
(
ioctl_vfs_watch_dir
(
fd
.
get
(),
&
watcher
)
<
0
)
{
vfs_watch_dir_t
wd
;
wd
.
mask
=
VFS_WATCH_MASK_ALL
;
wd
.
options
=
0
;
mx
::
channel
watcher
;
mx_status_t
status
=
mx_channel_create
(
0
,
&
wd
.
channel
,
watcher
.
get_address
());
if
(
status
!=
MX_OK
)
{
FTL_DLOG
(
ERROR
)
<<
"Failed to create channel"
;
return
false
;
}
status
=
ioctl_vfs_watch_dir_v2
(
fd
.
get
(),
&
wd
);
if
(
status
!=
MX_OK
)
{
FTL_DLOG
(
ERROR
)
<<
"Failed to create directory watcher for "
<<
kDisplayDriverClass
;
return
;
return
false
;
}
mx_signals_t
pending
;
// Wait for 1 second for the display driver to appear before falling back to
// software.
mx_object_wait_one
(
watcher
,
MX_CHANNEL_READABLE
|
MX_CHANNEL_PEER_CLOSED
,
mx_deadline_after
(
MX_SEC
(
1
)),
nullptr
);
mx_handle_close
(
watcher
);
status
=
watcher
.
wait_one
(
MX_CHANNEL_READABLE
|
MX_CHANNEL_PEER_CLOSED
,
mx_deadline_after
(
MX_SEC
(
1
)),
&
pending
);
if
(
status
!=
MX_OK
)
{
FTL_DLOG
(
ERROR
)
<<
"Failed to wait on file watcher channel "
;
return
false
;
}
return
pending
&
MX_CHANNEL_READABLE
;
}
}
// namespace
...
...
@@ -415,14 +433,14 @@ bool VulkanRasterizer::VulkanSurfaceProducer::Initialize() {
}
VulkanRasterizer
::
VulkanRasterizer
()
:
compositor_context_
(
nullptr
)
{
WaitForFirstDisplayDriver
();
valid_
=
WaitForFirstDisplayDriver
();
surface_producer_
.
reset
(
new
VulkanSurfaceProducer
());
}
VulkanRasterizer
::~
VulkanRasterizer
()
=
default
;
bool
VulkanRasterizer
::
IsValid
()
const
{
return
surface_producer_
&&
surface_producer_
->
IsValid
();
return
valid_
&&
surface_producer_
&&
surface_producer_
->
IsValid
();
}
void
VulkanRasterizer
::
SetScene
(
fidl
::
InterfaceHandle
<
mozart
::
Scene
>
scene
)
{
...
...
content_handler/vulkan_rasterizer.h
浏览文件 @
7412b7e1
...
...
@@ -140,6 +140,7 @@ class VulkanRasterizer : public Rasterizer {
flow
::
CompositorContext
compositor_context_
;
mozart
::
ScenePtr
scene_
;
std
::
unique_ptr
<
VulkanSurfaceProducer
>
surface_producer_
;
bool
valid_
;
bool
Draw
(
std
::
unique_ptr
<
flow
::
LayerTree
>
layer_tree
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录