Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Pinoxchio
apollo
提交
72b29e27
A
apollo
项目概览
Pinoxchio
/
apollo
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
apollo
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
72b29e27
编写于
9月 17, 2018
作者:
A
azural
提交者:
fengqikai1414
9月 17, 2018
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
framework: 1.Fix reader without callback can not observe issue 2. Fix
unit test.
上级
d180865e
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
50 addition
and
22 deletion
+50
-22
framework/cybertron/node/reader.h
framework/cybertron/node/reader.h
+22
-13
framework/cybertron/test/component/component_test.cpp
framework/cybertron/test/component/component_test.cpp
+3
-3
framework/cybertron/test/node/node_test.cpp
framework/cybertron/test/node/node_test.cpp
+7
-3
framework/cybertron/test/node/writer_reader_test.cpp
framework/cybertron/test/node/writer_reader_test.cpp
+18
-3
未找到文件。
framework/cybertron/node/reader.h
浏览文件 @
72b29e27
...
...
@@ -107,6 +107,9 @@ template <typename MessageT>
void
Reader
<
MessageT
>::
Enqueue
(
const
std
::
shared_ptr
<
MessageT
>&
msg
)
{
std
::
lock_guard
<
std
::
mutex
>
lg
(
mutex_
);
history_queue_
.
push_front
(
msg
);
while
(
history_queue_
.
size
()
>
history_depth_
)
{
history_queue_
.
pop_back
();
}
}
template
<
typename
MessageT
>
...
...
@@ -120,23 +123,29 @@ bool Reader<MessageT>::Init() {
if
(
init_
.
exchange
(
true
))
{
return
true
;
}
std
::
function
<
void
(
const
std
::
shared_ptr
<
MessageT
>&
)
>
func
;
if
(
reader_func_
!=
nullptr
)
{
auto
sched
=
scheduler
::
Scheduler
::
Instance
();
croutine_name_
=
role_attr_
.
node_name
()
+
"_"
+
role_attr_
.
channel_name
();
auto
func
=
[
this
](
const
std
::
shared_ptr
<
MessageT
>&
msg
)
{
func
=
[
this
](
const
std
::
shared_ptr
<
MessageT
>&
msg
)
{
this
->
Enqueue
(
msg
);
this
->
reader_func_
(
msg
);
};
auto
dv
=
std
::
make_shared
<
data
::
DataVisitor
<
MessageT
>>
(
role_attr_
.
channel_id
(),
role_attr_
.
qos_profile
().
depth
());
// Using factory to wrap templates.
croutine
::
RoutineFactory
factory
=
croutine
::
CreateRoutineFactory
<
MessageT
>
(
std
::
move
(
func
),
dv
);
if
(
!
sched
->
CreateTask
(
factory
,
croutine_name_
))
{
init_
.
exchange
(
false
);
return
false
;
}
}
else
{
func
=
[
this
](
const
std
::
shared_ptr
<
MessageT
>&
msg
)
{
this
->
Enqueue
(
msg
);
};
}
auto
sched
=
scheduler
::
Scheduler
::
Instance
();
croutine_name_
=
role_attr_
.
node_name
()
+
"_"
+
role_attr_
.
channel_name
();
auto
dv
=
std
::
make_shared
<
data
::
DataVisitor
<
MessageT
>>
(
role_attr_
.
channel_id
(),
role_attr_
.
qos_profile
().
depth
());
// Using factory to wrap templates.
croutine
::
RoutineFactory
factory
=
croutine
::
CreateRoutineFactory
<
MessageT
>
(
std
::
move
(
func
),
dv
);
if
(
!
sched
->
CreateTask
(
factory
,
croutine_name_
))
{
AERROR
<<
"Create Failed!"
;
init_
.
exchange
(
false
);
return
false
;
}
lower_reach_
=
ReaderManager
<
MessageT
>::
Instance
()
->
GetReader
(
role_attr_
);
...
...
framework/cybertron/test/component/component_test.cpp
浏览文件 @
72b29e27
...
...
@@ -83,17 +83,17 @@ TEST(TimerComponent, init) {
compcfg
.
set_name
(
"perception2"
);
apollo
::
cybertron
::
proto
::
ReaderOption
*
read_opt2
=
compcfg
.
add_readers
();
read_opt2
->
set_channel
(
"/driver/channel"
);
read_opt2
->
set_channel
(
"/driver/channel
1
"
);
auto
comB
=
std
::
make_shared
<
Component_B
<
RawMessage
,
RawMessage
>>
();
EXPECT_EQ
(
true
,
comB
->
Initialize
(
compcfg
));
EXPECT_EQ
(
true
,
comB
->
Process
(
msg_str1
,
msg_str2
));
compcfg
.
set_name
(
"perception3"
);
apollo
::
cybertron
::
proto
::
ReaderOption
*
read_opt3
=
compcfg
.
add_readers
();
read_opt3
->
set_channel
(
"/driver/channel"
);
read_opt3
->
set_channel
(
"/driver/channel
2
"
);
compcfg
.
set_name
(
"perception4"
);
apollo
::
cybertron
::
proto
::
ReaderOption
*
read_opt4
=
compcfg
.
add_readers
();
read_opt4
->
set_channel
(
"/driver/channel"
);
read_opt4
->
set_channel
(
"/driver/channel
3
"
);
auto
comA
=
std
::
make_shared
<
Component_A
<
RawMessage
,
RawMessage
,
RawMessage
,
RawMessage
>>
();
EXPECT_EQ
(
true
,
comA
->
Initialize
(
compcfg
));
...
...
framework/cybertron/test/node/node_test.cpp
浏览文件 @
72b29e27
...
...
@@ -78,18 +78,22 @@ TEST(NodeTest, create_reader_with_attr) {
Node
node
(
"create_reader_with_attr"
);
proto
::
RoleAttributes
attr
;
attr
.
set_channel_name
(
"channel"
);
attr
.
set_channel_name
(
"channel
_a
"
);
auto
reader_a
=
node
.
CreateReader
<
proto
::
UnitTest
>
(
attr
,
nullptr
);
ASSERT_TRUE
(
reader_a
!=
nullptr
);
EXPECT_EQ
(
reader_a
->
GetChannelName
(),
"channel"
);
EXPECT_EQ
(
reader_a
->
GetChannelName
(),
"channel
_a
"
);
EXPECT_TRUE
(
reader_a
->
inited
());
reader_a
->
Shutdown
();
attr
.
set_channel_name
(
"channel_b"
);
auto
reader_b
=
node
.
CreateReader
<
proto
::
UnitTest
>
(
attr
);
ASSERT_TRUE
(
reader_b
!=
nullptr
);
EXPECT_EQ
(
reader_b
->
GetChannelName
(),
"channel"
);
EXPECT_EQ
(
reader_b
->
GetChannelName
(),
"channel
_b
"
);
EXPECT_TRUE
(
reader_b
->
inited
());
reader_b
->
Shutdown
();
auto
reader_c
=
node
.
CreateReader
<
proto
::
UnitTest
>
(
attr
);
ASSERT_EQ
(
reader_c
,
nullptr
);
}
TEST
(
NodeTest
,
create_service
)
{
...
...
framework/cybertron/test/node/writer_reader_test.cpp
浏览文件 @
72b29e27
...
...
@@ -94,8 +94,8 @@ TEST(WriterReaderTest, init_and_shutdown) {
EXPECT_TRUE
(
reader_b
.
inited
());
Reader
<
proto
::
UnitTest
>
reader_c
(
attr
);
EXPECT_
TRU
E
(
reader_c
.
Init
());
EXPECT_
TRU
E
(
reader_c
.
inited
());
EXPECT_
FALS
E
(
reader_c
.
Init
());
EXPECT_
FALS
E
(
reader_c
.
inited
());
writer_a
.
Shutdown
();
// repeated call
...
...
@@ -158,8 +158,13 @@ TEST(WriterReaderTest, messaging) {
TEST
(
WriterReaderTest
,
observe
)
{
proto
::
RoleAttributes
attr
;
attr
.
set_channel_name
(
"test_reader"
);
attr
.
set_node_name
(
"node"
);
attr
.
set_channel_name
(
"channel"
);
auto
channel_id
=
common
::
GlobalData
::
RegisterChannel
(
attr
.
channel_name
());
attr
.
set_channel_id
(
channel_id
);
Reader
<
proto
::
UnitTest
>
reader
(
attr
);
reader
.
Init
();
EXPECT_TRUE
(
reader
.
Empty
());
EXPECT_FALSE
(
reader
.
HasReceived
());
...
...
@@ -203,6 +208,16 @@ TEST(WriterReaderTest, observe) {
reader
.
ClearData
();
EXPECT_TRUE
(
reader
.
Empty
());
EXPECT_FALSE
(
reader
.
HasReceived
());
Writer
<
proto
::
UnitTest
>
writer
(
attr
);
writer
.
Init
();
writer
.
Write
(
msg1
);
usleep
(
10000
);
ASSERT_TRUE
(
reader
.
HasReceived
());
reader
.
Observe
();
ASSERT_FALSE
(
reader
.
Empty
());
latest
=
reader
.
GetLatestObserved
();
EXPECT_EQ
(
latest
->
case_name
(),
"message_1"
);
}
}
// namespace cybertron
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录