artdaq  v3_12_02
tracemf.cc
1 // This file (just.cc) was created by Ron Rechenmacher <ron@fnal.gov> on
2 // Feb 19, 2014. "TERMS AND CONDITIONS" governing this file are in the README
3 // or COPYING file. If you do not have such a file, one can be obtained by
4 // contacting Ron or Fermi Lab in Batavia IL, 60510, phone: 630-840-3000.
5 // $RCSfile: just_user.cc,v $
6 
7 #include "artdaq-core/Utilities/configureMessageFacility.hh"
8 #include "artdaq/DAQdata/Globals.hh"
9 
10 #include <boost/program_options.hpp>
11 
12 #include <iomanip>
13 namespace bpo = boost::program_options;
14 
15 std::string formatTime(double time)
16 {
17  std::ostringstream o;
18  o << std::fixed << std::setprecision(3);
19  if (time > 60)
20  {
21  o << static_cast<int>(time / 60) << " m " << time - 60 * static_cast<int>(time / 60) << " s";
22  }
23  else if (time > 1)
24  {
25  o << time << " s";
26  }
27  else
28  {
29  time *= 1000;
30  if (time > 1)
31  {
32  o << time << " ms";
33  }
34  else
35  {
36  time *= 1000;
37  if (time > 1)
38  {
39  o << time << " us";
40  }
41  else
42  {
43  time *= 1000;
44  o << time << " ns";
45  }
46  }
47  }
48 
49  return o.str();
50 }
51 
52 int main(int argc, char *argv[])
53 try
54 {
55  std::ostringstream descstr;
56  descstr << *argv
57  << " <-l test loops> [csutdi]";
58  bpo::options_description desc(descstr.str());
59  desc.add_options()("loops,l", bpo::value<size_t>(), "Number of times to run each test")("C,c", "Run TRACEC test")("S,s", "Run TRACES test")("U,u", "Run TRACE_ test")("T,t", "Run TRACE_STREAMER test")("D,d", "Run TLOG_DEBUG test")("I,i", "Run TLOG_INFO test")("console,x", "Enable MessageFacility output to console")("help,h", "produce help message");
60  bpo::variables_map vm;
61  try
62  {
63  bpo::store(bpo::command_line_parser(argc, argv).options(desc).run(), vm);
64  bpo::notify(vm);
65  }
66  catch (bpo::error const &e)
67  {
68  std::cerr << "Exception from command line processing in " << *argv
69  << ": " << e.what() << "\n";
70  return -1;
71  }
72  if (vm.count("help") != 0u)
73  {
74  std::cout << desc << std::endl;
75  return 1;
76  }
77  if (vm.count("loops") == 0u)
78  {
79  std::cerr << "Exception from command line processing in " << *argv
80  << ": no loop count given.\n"
81  << "For usage and an options list, please do '"
82  << *argv << " --help"
83  << "'.\n";
84  return 2;
85  }
86  size_t loops = vm["loops"].as<size_t>();
87 
88  artdaq::configureMessageFacility("tracemf", vm.count("console") != 0u);
89 
90  if (vm.count("C") != 0u)
91  {
92  std::cout << "Starting TRACEC test" << std::endl;
93  auto start = std::chrono::steady_clock::now();
94  for (size_t l = 0; l < loops; ++l)
95  {
96  TRACE(TLVL_DEBUG, "Test TRACEC with an int %i and a float %.1f", 42, 5.56); // NOLINT
97  }
98  auto time = std::chrono::duration_cast<std::chrono::duration<double>>(std::chrono::steady_clock::now() - start).count();
99  std::cout << "TRACEC test took " << formatTime(time) << ", avg: " << formatTime(time / loops) << std::endl;
100  }
101 
102  if (vm.count("S") != 0u)
103  {
104  std::cout << "Starting TRACES test" << std::endl;
105  auto start = std::chrono::steady_clock::now();
106  for (size_t l = 0; l < loops; ++l)
107  {
108  std::string test = "Test TRACE with an int %d";
109  std::string test2 = " and a float %.1f";
110  TRACE(TLVL_DEBUG, test + test2, 42, 5.56); // NOLINT
111  }
112  auto time = std::chrono::duration_cast<std::chrono::duration<double>>(std::chrono::steady_clock::now() - start).count();
113  std::cout << "TRACES test took " << formatTime(time) << ", avg: " << formatTime(time / loops) << std::endl;
114  }
115 
116  if (vm.count("U") != 0u)
117  {
118  std::cout << "Starting TRACE_ test" << std::endl;
119  auto start = std::chrono::steady_clock::now();
120  for (size_t l = 0; l < loops; ++l)
121  {
122  TRACEN_("tracemf", TLVL_DEBUG, "Test TRACE_ with an int " << 42 << " and a float %.1f", 5.56); // NOLINT
123  }
124  auto time = std::chrono::duration_cast<std::chrono::duration<double>>(std::chrono::steady_clock::now() - start).count();
125  std::cout << "TRACE_ test took " << formatTime(time) << ", avg: " << formatTime(time / loops) << std::endl;
126  }
127 
128  if (vm.count("D") != 0u)
129  {
130  std::cout << "Starting TLOG_DEBUG test" << std::endl;
131  auto start = std::chrono::steady_clock::now();
132  for (size_t l = 0; l < loops; ++l)
133  {
134  TLOG_DEBUG("tracemf") << "Test TLOG_DEBUG with an int " << 42 << " and a float " << std::setprecision(1) << 5.56 << ", and another float " << 7.3 << TRACE_ENDL;
135  }
136  auto time = std::chrono::duration_cast<std::chrono::duration<double>>(std::chrono::steady_clock::now() - start).count();
137  std::cout << "TLOG_DEBUG test took " << formatTime(time) << ", avg: " << formatTime(time / loops) << std::endl;
138  }
139 
140  if (vm.count("I") != 0u)
141  {
142  std::cout << "Starting TLOG_INFO test" << std::endl;
143  auto start = std::chrono::steady_clock::now();
144  for (size_t l = 0; l < loops; ++l)
145  {
146  TLOG_INFO("tracemf") << "Test TLOG_INFO with an int " << 42 << " and a float " << std::setprecision(1) << 5.56 << ", and another float " << std::fixed << 7.3 << TRACE_ENDL;
147  }
148  auto time = std::chrono::duration_cast<std::chrono::duration<double>>(std::chrono::steady_clock::now() - start).count();
149  std::cout << "TLOG_INFO test took " << formatTime(time) << ", avg: " << formatTime(time / loops) << std::endl;
150  }
151 
152  return (0);
153 }
154 catch (...)
155 {
156  return -1;
157 }