消息和数据
Message 用Message实现模块间通信,其实现基于protobuf
cyber/message/message_traits.h
cyber/message/raw_message_traits.h
cyber/message/raw_message.h
cyber/message/arena_message_wrapper.h
cyber/message/protobuf_factory.h
cyber/data data
cyber/data/data_visitor.h
class DataVisitor : public DataVisitorBase {
DataVisitor在Component::Initialize和Reader::Init中都会创建,是实际环境中获取数据的方式。
它最终会调用到AllLatest::Fusion函数。
每个 DataVisitor 的每个消息种类都会有一个缓存 ChannelBuffer,
在初始化的时候这些 ChannelBuffer 都会被加入到 DataDispatcher 中的一张map中。
而所有种类的消息还会有一个消息整合体的 ChannelBuffer
cyber/data/data_visitor_base.h
class DataVisitorBase {
cyber/data/fusion/all_latest.h
#include "cyber/data/channel_buffer.h"
#include "cyber/data/fusion/data_fusion.h"
cyber/data/fusion/data_fusion.h
class DataFusion {
cyber/data/cache_buffer.h
class CacheBuffer {
cyber/data/data_dispatcher.h
class DataDispatcher {
cyber/data/channel_buffer.h
class ChannelBuffer {
cyber/data/data_notifier.h
有多个种类消息的DataVisitor还是只有一个Notifier对应M0,也就是说只有当M0消息来的时候协程会被唤醒并通过DataFusion来获取整合所有种类的信息
DataDispatcher 也是一个全局单例,记录了一个channel_id对应vector<std::weak_ptr<CacheBuffer<std::shared_ptr>>>的map
基础
#include "cyber/base/macros.h" cyber/base/arena_queue.h cyber/base/bounded_queue.h cyber/base/signal.h
#include "cyber/common/macros.h" cyber/common/environment.h cyber/common/file.h cyber/common/log.h
#include "cyber/io/poll_data.h" cyber/io/session.h
#include "cyber/time/time.h"
common模块 ,是整个cyber的重要的基础模块之一,其他模块基本都对其有所依赖
cyber/base
BoundedQueue,用于实现一个固定大小的线程安全队列,该队列支持多个线程同时进行出队和入队操作
signal.h。这份文件中,实现了一个简单的信号-槽机制,也是一种观察者模式的设计,信号-槽机制是一种用于组件之间的事件驱动编程的设计模式
包和tool
cyber/record/record_base.h
cyber/tools/cyber_recorder/recorder.h
性能记录
1.log日志
基于glog
cyber/logger/logger.h
class Logger : public google::base::Logger {
2.Event : 代码插桩+文件打印
cyber/event/perf_event_cache.h
class PerfEventCache {
PerfEventCache::PerfEventCache() {
PerfEventCache::AddSchedEvent
PerfEventCache::AddTransportEvent(
cyber/event/perf_event.h
enum class EventType { SCHED_EVENT = 0, TRANS_EVENT = 1, TRY_FETCH_EVENT = 3 };
event::PerfEventCache::Instance () ==> 创建perf对象
class SchedEvent : public EventBase {
class TransportEvent : public EventBase {
Blocker里注册 的回调函数应该都是管理员注册的监控函数
Blocker是Reader的一个成员,BlockerManager保存了全局的一张channel_name对应Blocker的map
3.cyber/statistics/statistics.h
#include "third_party/var/bvar/bvar.h"
#include "third_party/var/bvar/bvar.h
:bvar是多线程环境下的计数器类库,方便记录和查看用户程序中的各类数值,它利用了thread local存储减少了cache bouncing
using LatencyVarPtr = std::shared_ptr<::bvar::LatencyRecorder>;
using StatusVarPtr = std::shared_ptr<::bvar::Status<uint64_t>>;
using AdderVarPtr = std::shared_ptr<::bvar::Adder<int32_t>>;
bvar中很重要的一个组件,bvar除了是一个性能优秀的计数器,设计的最重要的使用场景就是监控,
通过了解bvar::Adder和bvar::LatencyRecorder两个类,
百度开源RPC框架brpc源码解析
4.cyber/blocker/blocker_manager.h
Blocker是 Reader的一个成员,BlockerManager保存了全局的一张channel_name对应Blocker的map
cyber/blocker/blocker.h
class BlockerBase {
cyber/blocker/blocker_manager.h
class BlockerManager {
cyber/blocker/intra_reader.h
cyber/blocker/intra_writer.h
proto数据
两部分proto ,
一部分放在了 cyber/proto/,
另外一部分放在了各个模块
modules/common_msgs/sensor_msgs/pointcloud.proto
modules/common_msgs/sensor_msgs/sensor_image.proto
modules/data/proto/frame.proto
cyber/proto/cyber_conf.proto
message CyberConfig {
optional SchedulerConf scheduler_conf = 1;
optional TransportConf transport_conf = 2;
optional RunModeConf run_mode_conf = 3;
optional PerfConf perf_conf = 4;
}
cyber/proto/component_conf.proto
ComponentConfig
TimerComponentConfig {
cyber/proto/dag_conf.proto
ComponentInfo TimerComponentInfo
ModuleConfig DagConfig
cyber/proto/qos_profile.proto
cyber/proto/transport_conf.proto
cyber/proto/role_attributes.proto
cyber/proto/topology_change.proto
cyber/proto/scheduler_conf.proto
cyber/proto/choreography_conf.proto
cyber/proto/classic_conf.proto
cyber/proto/run_mode_conf.proto
cyber/proto/record.proto
cyber/proto/proto_desc.proto
cyber/proto/parameter.proto
cyber/proto/perf_conf.proto
自动驾驶
Apollo的bridge模块UDP数据的格式。
Apollo的bridge模块通过UDP协议发送的基本数据被称为帧,其由首部和数据组成。
在UDPBridgeSenderComponent<T>::Proc函数当中,
protobuf数据首先进行序列化,然后将其根据参数FRAME_SIZE分割为一个个大小相同的数据块,
为每个数据块添加首部后,就组成了一个个的帧,然后将所有的帧发送发送
cyber_launch start /apollo/modules/bridge/launch/bridge_receiver.launch
参考
苯苯的嗷呜-CyberRt 源码解读(十六 https://zhuanlan.zhihu.com/p/656700246
标签:proto,CyberRT,主线,cyber,内容,conf,message,data,class
From: https://www.cnblogs.com/ytwang/p/18682143