Apollo 10.0
自动驾驶开放平台
apollo::cyber::transport::Segment类 参考abstract

#include <segment.h>

类 apollo::cyber::transport::Segment 继承关系图:
apollo::cyber::transport::Segment 的协作图:

Public 成员函数

 Segment (uint64_t channel_id)
 
virtual ~Segment ()
 
bool AcquireBlockToWrite (std::size_t msg_size, WritableBlock *writable_block)
 
void ReleaseWrittenBlock (const WritableBlock &writable_block)
 
bool AcquireArenaBlockToWrite (std::size_t msg_size, WritableBlock *writable_block)
 
void ReleaseArenaWrittenBlock (const WritableBlock &writable_block)
 
bool AcquireBlockToRead (ReadableBlock *readable_block)
 
void ReleaseReadBlock (const ReadableBlock &readable_block)
 
bool AcquireArenaBlockToRead (ReadableBlock *readable_block)
 
void ReleaseArenaReadBlock (const ReadableBlock &readable_block)
 
bool InitOnly (uint64_t message_size)
 
void * GetManagedShm ()
 
bool LockBlockForWriteByIndex (uint64_t block_index)
 
bool ReleaseBlockForWriteByIndex (uint64_t block_index)
 
bool LockBlockForReadByIndex (uint64_t block_index)
 
bool ReleaseBlockForReadByIndex (uint64_t block_index)
 
bool LockArenaBlockForWriteByIndex (uint64_t block_index)
 
bool ReleaseArenaBlockForWriteByIndex (uint64_t block_index)
 
bool LockArenaBlockForReadByIndex (uint64_t block_index)
 
bool ReleaseArenaBlockForReadByIndex (uint64_t block_index)
 

Protected 成员函数

virtual bool Destroy ()
 
virtual void Reset ()=0
 
virtual bool Remove ()=0
 
virtual bool OpenOnly ()=0
 
virtual bool OpenOrCreate ()=0
 

Protected 属性

bool init_
 
ShmConf conf_
 
uint64_t channel_id_
 
Statestate_
 
Blockblocks_
 
Blockarena_blocks_
 
void * managed_shm_
 
std::mutex block_buf_lock_
 
std::mutex arena_block_buf_lock_
 
std::unordered_map< uint32_t, uint8_t * > block_buf_addrs_
 
std::unordered_map< uint32_t, uint8_t * > arena_block_buf_addrs_
 

详细描述

在文件 segment.h43 行定义.

构造及析构函数说明

◆ Segment()

apollo::cyber::transport::Segment::Segment ( uint64_t  channel_id)
explicit

在文件 segment.cc27 行定义.

28 : init_(false),
29 conf_(),
30 channel_id_(channel_id),
31 state_(nullptr),
32 blocks_(nullptr),
33 arena_blocks_(nullptr),
34 managed_shm_(nullptr),
std::unordered_map< uint32_t, uint8_t * > block_buf_addrs_
Definition segment.h:90
std::unordered_map< uint32_t, uint8_t * > arena_block_buf_addrs_
Definition segment.h:91

◆ ~Segment()

virtual apollo::cyber::transport::Segment::~Segment ( )
inlinevirtual

在文件 segment.h46 行定义.

46{}

成员函数说明

◆ AcquireArenaBlockToRead()

bool apollo::cyber::transport::Segment::AcquireArenaBlockToRead ( ReadableBlock readable_block)

在文件 segment.cc138 行定义.

138 {
139 RETURN_VAL_IF_NULL(readable_block, false);
140 if (!init_ && !OpenOnly()) {
141 AERROR << "failed to open shared memory, can't read now.";
142 return false;
143 }
144
145 auto index = readable_block->index;
146 if (index >= ShmConf::ARENA_BLOCK_NUM) {
147 AERROR << "invalid arena block_index[" << index << "].";
148 return false;
149 }
150
151 bool result = true;
152 if (state_->need_remap()) {
153 result = Remap();
154 }
155
156 if (!result) {
157 AERROR << "segment update failed.";
158 return false;
159 }
160
161 if (!arena_blocks_[index].TryLockForRead()) {
162 return false;
163 }
164 readable_block->block = arena_blocks_ + index;
165 readable_block->buf = arena_block_buf_addrs_[index];
166 return true;
167}
static const uint32_t ARENA_BLOCK_NUM
Definition shm_conf.h:41
#define RETURN_VAL_IF_NULL(ptr, val)
Definition log.h:98
#define AERROR
Definition log.h:44

◆ AcquireArenaBlockToWrite()

bool apollo::cyber::transport::Segment::AcquireArenaBlockToWrite ( std::size_t  msg_size,
WritableBlock writable_block 
)

在文件 segment.cc72 行定义.

73 {
74 RETURN_VAL_IF_NULL(writable_block, false);
75 if (!init_ && !OpenOrCreate()) {
76 AERROR << "create shm failed, can't write now.";
77 return false;
78 }
79
80 if (state_->need_remap()) {
81 Remap();
82 }
83
84 uint32_t index = GetNextArenaWritableBlockIndex();
85 writable_block->index = index;
86 writable_block->block = &arena_blocks_[index];
87 writable_block->buf = arena_block_buf_addrs_[index];
88 return true;
89}

◆ AcquireBlockToRead()

bool apollo::cyber::transport::Segment::AcquireBlockToRead ( ReadableBlock readable_block)

在文件 segment.cc107 行定义.

107 {
108 RETURN_VAL_IF_NULL(readable_block, false);
109 if (!init_ && !OpenOnly()) {
110 AERROR << "failed to open shared memory, can't read now.";
111 return false;
112 }
113
114 auto index = readable_block->index;
115 if (index >= conf_.block_num()) {
116 AERROR << "invalid block_index[" << index << "].";
117 return false;
118 }
119
120 bool result = true;
121 if (state_->need_remap()) {
122 result = Remap();
123 }
124
125 if (!result) {
126 AERROR << "segment update failed.";
127 return false;
128 }
129
130 if (!blocks_[index].TryLockForRead()) {
131 return false;
132 }
133 readable_block->block = blocks_ + index;
134 readable_block->buf = block_buf_addrs_[index];
135 return true;
136}
const uint32_t & block_num()
Definition shm_conf.h:37

◆ AcquireBlockToWrite()

bool apollo::cyber::transport::Segment::AcquireBlockToWrite ( std::size_t  msg_size,
WritableBlock writable_block 
)

在文件 segment.cc40 行定义.

41 {
42 RETURN_VAL_IF_NULL(writable_block, false);
43 if (!init_ && !OpenOrCreate()) {
44 AERROR << "create shm failed, can't write now.";
45 return false;
46 }
47
48 bool result = true;
49 if (state_->need_remap()) {
50 result = Remap();
51 }
52
53 if (msg_size > conf_.ceiling_msg_size()) {
54 AINFO << "msg_size: " << msg_size
55 << " larger than current shm_buffer_size: "
56 << conf_.ceiling_msg_size() << " , need recreate.";
57 result = Recreate(msg_size);
58 }
59
60 if (!result) {
61 AERROR << "segment update failed.";
62 return false;
63 }
64
65 uint32_t index = GetNextWritableBlockIndex();
66 writable_block->index = index;
67 writable_block->block = &blocks_[index];
68 writable_block->buf = block_buf_addrs_[index];
69 return true;
70}
const uint64_t & ceiling_msg_size()
Definition shm_conf.h:35
#define AINFO
Definition log.h:42

◆ Destroy()

bool apollo::cyber::transport::Segment::Destroy ( )
protectedvirtual

在文件 segment.cc258 行定义.

258 {
259 if (!init_) {
260 return true;
261 }
262 init_ = false;
263
264 try {
266 uint32_t reference_counts = state_->reference_counts();
267 if (reference_counts == 0) {
268 return Remove();
269 }
270 } catch (...) {
271 AERROR << "exception.";
272 return false;
273 }
274 ADEBUG << "destroy.";
275 return true;
276}
#define ADEBUG
Definition log.h:41

◆ GetManagedShm()

void * apollo::cyber::transport::Segment::GetManagedShm ( )

在文件 segment.cc196 行定义.

196{ return managed_shm_; }

◆ InitOnly()

bool apollo::cyber::transport::Segment::InitOnly ( uint64_t  message_size)

在文件 segment.cc185 行定义.

185 {
186 if (init_) {
187 return true;
188 }
190 if (!OpenOrCreate()) {
191 return false;
192 }
193 return true;
194}
void Update(const uint64_t &real_msg_size)
Definition shm_conf.cc:30
int message_size

◆ LockArenaBlockForReadByIndex()

bool apollo::cyber::transport::Segment::LockArenaBlockForReadByIndex ( uint64_t  block_index)

在文件 segment.cc243 行定义.

243 {
244 if (block_index >= ShmConf::ARENA_BLOCK_NUM) {
245 return false;
246 }
247 return arena_blocks_[block_index].TryLockForRead();
248}

◆ LockArenaBlockForWriteByIndex()

bool apollo::cyber::transport::Segment::LockArenaBlockForWriteByIndex ( uint64_t  block_index)

在文件 segment.cc228 行定义.

228 {
229 if (block_index >= ShmConf::ARENA_BLOCK_NUM) {
230 return false;
231 }
232 return arena_blocks_[block_index].TryLockForWrite();
233}

◆ LockBlockForReadByIndex()

bool apollo::cyber::transport::Segment::LockBlockForReadByIndex ( uint64_t  block_index)

在文件 segment.cc213 行定义.

213 {
214 if (block_index >= conf_.block_num()) {
215 return false;
216 }
217 return blocks_[block_index].TryLockForRead();
218}

◆ LockBlockForWriteByIndex()

bool apollo::cyber::transport::Segment::LockBlockForWriteByIndex ( uint64_t  block_index)

在文件 segment.cc198 行定义.

198 {
199 if (block_index >= conf_.block_num()) {
200 return false;
201 }
202 return blocks_[block_index].TryLockForWrite();
203}

◆ OpenOnly()

virtual bool apollo::cyber::transport::Segment::OpenOnly ( )
protectedpure virtual

◆ OpenOrCreate()

virtual bool apollo::cyber::transport::Segment::OpenOrCreate ( )
protectedpure virtual

◆ ReleaseArenaBlockForReadByIndex()

bool apollo::cyber::transport::Segment::ReleaseArenaBlockForReadByIndex ( uint64_t  block_index)

在文件 segment.cc250 行定义.

250 {
251 if (block_index >= ShmConf::ARENA_BLOCK_NUM) {
252 return false;
253 }
254 arena_blocks_[block_index].ReleaseReadLock();
255 return true;
256}

◆ ReleaseArenaBlockForWriteByIndex()

bool apollo::cyber::transport::Segment::ReleaseArenaBlockForWriteByIndex ( uint64_t  block_index)

在文件 segment.cc235 行定义.

235 {
236 if (block_index >= ShmConf::ARENA_BLOCK_NUM) {
237 return false;
238 }
239 arena_blocks_[block_index].ReleaseWriteLock();
240 return true;
241}

◆ ReleaseArenaReadBlock()

void apollo::cyber::transport::Segment::ReleaseArenaReadBlock ( const ReadableBlock readable_block)

在文件 segment.cc169 行定义.

169 {
170 auto index = readable_block.index;
171 if (index >= ShmConf::ARENA_BLOCK_NUM) {
172 return;
173 }
174 arena_blocks_[index].ReleaseReadLock();
175}

◆ ReleaseArenaWrittenBlock()

void apollo::cyber::transport::Segment::ReleaseArenaWrittenBlock ( const WritableBlock writable_block)

在文件 segment.cc99 行定义.

99 {
100 auto index = writable_block.index;
101 if (index >= ShmConf::ARENA_BLOCK_NUM) {
102 return;
103 }
104 arena_blocks_[index].ReleaseWriteLock();
105}

◆ ReleaseBlockForReadByIndex()

bool apollo::cyber::transport::Segment::ReleaseBlockForReadByIndex ( uint64_t  block_index)

在文件 segment.cc220 行定义.

220 {
221 if (block_index >= conf_.block_num()) {
222 return false;
223 }
224 blocks_[block_index].ReleaseReadLock();
225 return true;
226}

◆ ReleaseBlockForWriteByIndex()

bool apollo::cyber::transport::Segment::ReleaseBlockForWriteByIndex ( uint64_t  block_index)

在文件 segment.cc205 行定义.

205 {
206 if (block_index >= conf_.block_num()) {
207 return false;
208 }
209 blocks_[block_index].ReleaseWriteLock();
210 return true;
211}

◆ ReleaseReadBlock()

void apollo::cyber::transport::Segment::ReleaseReadBlock ( const ReadableBlock readable_block)

在文件 segment.cc177 行定义.

177 {
178 auto index = readable_block.index;
179 if (index >= conf_.block_num()) {
180 return;
181 }
182 blocks_[index].ReleaseReadLock();
183}

◆ ReleaseWrittenBlock()

void apollo::cyber::transport::Segment::ReleaseWrittenBlock ( const WritableBlock writable_block)

在文件 segment.cc91 行定义.

91 {
92 auto index = writable_block.index;
93 if (index >= conf_.block_num()) {
94 return;
95 }
96 blocks_[index].ReleaseWriteLock();
97}

◆ Remove()

virtual bool apollo::cyber::transport::Segment::Remove ( )
protectedpure virtual

◆ Reset()

virtual void apollo::cyber::transport::Segment::Reset ( )
protectedpure virtual

类成员变量说明

◆ arena_block_buf_addrs_

std::unordered_map<uint32_t, uint8_t*> apollo::cyber::transport::Segment::arena_block_buf_addrs_
protected

在文件 segment.h91 行定义.

◆ arena_block_buf_lock_

std::mutex apollo::cyber::transport::Segment::arena_block_buf_lock_
protected

在文件 segment.h89 行定义.

◆ arena_blocks_

Block* apollo::cyber::transport::Segment::arena_blocks_
protected

在文件 segment.h86 行定义.

◆ block_buf_addrs_

std::unordered_map<uint32_t, uint8_t*> apollo::cyber::transport::Segment::block_buf_addrs_
protected

在文件 segment.h90 行定义.

◆ block_buf_lock_

std::mutex apollo::cyber::transport::Segment::block_buf_lock_
protected

在文件 segment.h88 行定义.

◆ blocks_

Block* apollo::cyber::transport::Segment::blocks_
protected

在文件 segment.h85 行定义.

◆ channel_id_

uint64_t apollo::cyber::transport::Segment::channel_id_
protected

在文件 segment.h82 行定义.

◆ conf_

ShmConf apollo::cyber::transport::Segment::conf_
protected

在文件 segment.h81 行定义.

◆ init_

bool apollo::cyber::transport::Segment::init_
protected

在文件 segment.h80 行定义.

◆ managed_shm_

void* apollo::cyber::transport::Segment::managed_shm_
protected

在文件 segment.h87 行定义.

◆ state_

State* apollo::cyber::transport::Segment::state_
protected

在文件 segment.h84 行定义.


该类的文档由以下文件生成: