Apollo 10.0
自动驾驶开放平台
apollo::data::PostRecordProcessor类 参考

Post processor against recorded tasks that have been completed 更多...

#include <post_record_processor.h>

类 apollo::data::PostRecordProcessor 继承关系图:
apollo::data::PostRecordProcessor 的协作图:

Public 成员函数

 PostRecordProcessor (const std::string &source_record_dir, const std::string &restored_output_dir)
 
bool Init (const SmartRecordTrigger &trigger_conf) override
 
bool Process () override
 
std::string GetDefaultOutputFile () const override
 
virtual ~PostRecordProcessor ()=default
 
- Public 成员函数 继承自 apollo::data::RecordProcessor
 RecordProcessor (const std::string &source_record_dir, const std::string &restored_output_dir)
 
virtual ~RecordProcessor ()
 

额外继承的成员函数

- Protected 成员函数 继承自 apollo::data::RecordProcessor
bool InitTriggers (const SmartRecordTrigger &trigger_conf)
 
bool ShouldRestore (const cyber::record::RecordMessage &msg) const
 
- Protected 属性 继承自 apollo::data::RecordProcessor
const std::string source_record_dir_
 
const std::string restored_output_dir_
 
std::vector< std::unique_ptr< TriggerBase > > triggers_
 
std::unique_ptr< cyber::record::RecordWriterwriter_ = nullptr
 

详细描述

Post processor against recorded tasks that have been completed

在文件 post_record_processor.h32 行定义.

构造及析构函数说明

◆ PostRecordProcessor()

apollo::data::PostRecordProcessor::PostRecordProcessor ( const std::string &  source_record_dir,
const std::string &  restored_output_dir 
)
inline

在文件 post_record_processor.h34 行定义.

36 : RecordProcessor(source_record_dir, restored_output_dir) {}
RecordProcessor(const std::string &source_record_dir, const std::string &restored_output_dir)

◆ ~PostRecordProcessor()

virtual apollo::data::PostRecordProcessor::~PostRecordProcessor ( )
virtualdefault

成员函数说明

◆ GetDefaultOutputFile()

std::string apollo::data::PostRecordProcessor::GetDefaultOutputFile ( ) const
overridevirtual

实现了 apollo::data::RecordProcessor.

在文件 post_record_processor.cc99 行定义.

99 {
100 std::string src_file_name = source_record_files_.front();
101 const std::string record_flag(".record");
102 src_file_name.resize(src_file_name.size() - src_file_name.find(record_flag) +
103 record_flag.size() + 1);
104 return absl::StrCat(restored_output_dir_, "/", src_file_name);
105}
const std::string restored_output_dir_

◆ Init()

bool apollo::data::PostRecordProcessor::Init ( const SmartRecordTrigger trigger_conf)
overridevirtual

重载 apollo::data::RecordProcessor .

在文件 post_record_processor.cc42 行定义.

42 {
44 AERROR << "source record dir does not exist: " << source_record_dir_;
45 return false;
46 }
47 LoadSourceRecords();
48 if (source_record_files_.empty()) {
49 AERROR << "source record dir does not have any records: "
51 return false;
52 }
53 if (!RecordProcessor::Init(trigger_conf)) {
54 AERROR << "base init failed";
55 return false;
56 }
57 return true;
58}
const std::string source_record_dir_
virtual bool Init(const SmartRecordTrigger &trigger_conf)
#define AERROR
Definition log.h:44
bool DirectoryExists(const std::string &directory_path)
Check if the directory specified by directory_path exists and is indeed a directory.
Definition file.cc:207

◆ Process()

bool apollo::data::PostRecordProcessor::Process ( )
overridevirtual

实现了 apollo::data::RecordProcessor.

在文件 post_record_processor.cc60 行定义.

60 {
61 // First scan, get intervals
62 for (const std::string& record : source_record_files_) {
63 const auto reader = std::make_shared<RecordReader>(
64 absl::StrCat(source_record_dir_, "/", record));
65 RecordViewer viewer(reader, 0,
66 std::numeric_limits<uint64_t>::max(),
67 ChannelPool::Instance()->GetAllChannels());
68 AINFO << record << ":" << viewer.begin_time() << " - " << viewer.end_time();
69 for (const auto& msg : viewer) {
70 for (const auto& trigger : triggers_) {
71 trigger->Pull(msg);
72 }
73 }
74 }
75 // Second scan, restore messages based on intervals in the first scan
76 IntervalPool::Instance()->ReorgIntervals();
77 IntervalPool::Instance()->PrintIntervals();
78 for (const std::string& record : source_record_files_) {
79 const auto reader = std::make_shared<RecordReader>(
80 absl::StrCat(source_record_dir_, "/", record));
81 RecordViewer viewer(reader, 0,
82 std::numeric_limits<uint64_t>::max(),
83 ChannelPool::Instance()->GetAllChannels());
84 for (const auto& msg : viewer) {
85 // If the message fall into generated intervals,
86 // or required by any triggers, restore it
87 if (IntervalPool::Instance()->MessageFallIntoRange(msg.time) ||
88 ShouldRestore(msg)) {
89 writer_->WriteChannel(msg.channel_name,
90 reader->GetMessageType(msg.channel_name),
91 reader->GetProtoDesc(msg.channel_name));
92 writer_->WriteMessage(msg.channel_name, msg.content, msg.time);
93 }
94 }
95 }
96 return true;
97}
std::vector< std::unique_ptr< TriggerBase > > triggers_
std::unique_ptr< cyber::record::RecordWriter > writer_
bool ShouldRestore(const cyber::record::RecordMessage &msg) const
#define AINFO
Definition log.h:42

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