blob: dd64ef0e1b0e5a7e0caba6b4b7d5821ae3160b4d [file] [log] [blame]
#include <chrono> // NOLINT
#include <filesystem> // NOLINT
#include <iostream>
#include <limits>
#include <string>
#include <utility>
#include "absl/flags/flag.h"
#include "absl/flags/parse.h"
#include "tlbmc/hal/shared_mem/segment_manager.h"
#include "tlbmc/hal/shared_mem/server.h"
ABSL_FLAG(bool, unit_test, false, "Use shared memory for unit test.");
int main(int argc, char** argv) {
absl::ParseCommandLine(argc, argv);
if (absl::GetFlag(FLAGS_unit_test)) {
milotic_tlbmc::SharedMemoryServer::SetUpInstanceForUnitTest();
} else {
boost::interprocess::shared_memory_object::remove("TlbmcSharedMemory");
std::filesystem::remove(
std::string{milotic_tlbmc::kShareMemInitializedFile});
std::cout << "SharedMemoryServer starts \n";
milotic_tlbmc::SharedMemoryServer::Initialize();
}
std::cout << "Get Sensor value: "
<< milotic_tlbmc::SharedMemoryServer::GetInstance()
.ReadSensorValue("sensor001")
.value_or(std::make_pair(
std::numeric_limits<float>::infinity(), 0))
.first
<< '\n';
std::chrono::high_resolution_clock::time_point start =
std::chrono::high_resolution_clock::now();
constexpr int kIterations = 1000'000;
for (int i = 0; i < kIterations; ++i) {
milotic_tlbmc::SharedMemoryServer::GetInstance()
.ReadSensorValue("sensor001")
.IgnoreError();
}
std::chrono::high_resolution_clock::time_point end =
std::chrono::high_resolution_clock::now();
std::cout << "latency ns of one read:"
<< static_cast<double>(
std::chrono::duration_cast<std::chrono::nanoseconds>(end -
start)
.count()) /
kIterations
<< "\n";
return 0;
}