IPSDK  4_1_0_2
IPSDK : Image Processing Software Development Kit
BenchmarkMacros.h
1 // BenchmarkMacros.h:
3 // ------------------
4 //
14 
15 #ifndef __BENCHMARKTOOLS_BENCHMARKMACROS_H__
16 #define __BENCHMARKTOOLS_BENCHMARKMACROS_H__
17 
18 #include <Benchmark/IPSDKBenchmarkTools/BaseBenchSuite.h>
19 #include <Benchmark/IPSDKBenchmarkTools/BaseBenchCase.h>
20 #include <Benchmark/IPSDKBenchmarkTools/BenchmarkManager.h>
22 #include <boost/make_shared.hpp>
23 #include <boost/preprocessor/cat.hpp>
24 
27 
30 #define IPSDK_BENCH_SUITE(libraryName, BenchSuiteName, eMsgEnum) \
31 namespace ipsdk { \
32 namespace bench { \
33 class BenchSuiteName : public BaseBenchSuite \
34 { \
35  IPSDK_DECLARE_TOOLTIP() \
36  friend boost::shared_ptr<BenchSuiteName> boost::make_shared<BenchSuiteName>(); \
37 private: \
38  BenchSuiteName() : BaseBenchSuite() {} \
39 public: \
40  typedef eMsgEnum MsgEnumType; \
41  ~BenchSuiteName() {} \
42  static BenchSuitePtr getInstance() \
43  { \
44  static BenchSuitePtr g_benchSuiteInstance(boost::make_shared<BenchSuiteName>()); \
45  return g_benchSuiteInstance; \
46  } \
47 private: \
48  static bool registerBenchSuite() \
49  { \
50  BenchmarkManager& benchmarkManager = BenchmarkManager::getInstance(); \
51  benchmarkManager.addBenchSuite(BenchSuiteName::getInstance()); \
52  return true; \
53  } \
54  static bool g_bRegisteredBenchSuite; \
55 }; \
56 bool BenchSuiteName::g_bRegisteredBenchSuite = BenchSuiteName::registerBenchSuite(); \
57 }} \
58 IPSDK_IMPLEMENT_TOOLTIP(libraryName, BenchSuiteName, eMsgEnum)
59 
60 
63 #define IPSDK_BENCH_CASE(libraryName, BenchSuiteName, BenchCaseName) \
64 namespace ipsdk { \
65 namespace bench { \
66 class BOOST_PP_CAT(BenchSuiteName, BenchCaseName) : public BaseBenchCase \
67 { \
68  IPSDK_DECLARE_TOOLTIP() \
69  typedef BOOST_PP_CAT(BenchSuiteName, BenchCaseName) ThisClass; \
70  friend boost::shared_ptr<ThisClass> boost::make_shared<ThisClass>(); \
71 private: \
72  BOOST_PP_CAT(BenchSuiteName, BenchCaseName)() {} \
73 public: \
74  typedef BenchSuiteName::MsgEnumType MsgEnumType; \
75  ~BOOST_PP_CAT(BenchSuiteName, BenchCaseName)() {} \
76  static BenchCasePtr getInstance() \
77  { \
78  static BenchCasePtr g_benchCaseInstance(boost::make_shared<ThisClass>()); \
79  return g_benchCaseInstance; \
80  } \
81 private: \
82  static bool registerBenchCase() \
83  { \
84  BenchSuitePtr pBenchSuitePtr = BenchSuiteName::getInstance(); \
85  pBenchSuitePtr->addBenchCase(ThisClass::getInstance()); \
86  return true; \
87  } \
88  static bool g_bRegisteredBenchCase; \
89  BoolResult runDerived(BenchCaseResult& result); \
90  std::string createMessage(const MsgEnumType::domain& eEnumValue) const \
91  { \
92  LogMessageFormater logMsgFormater(IPSDK_LIB_LOG_MSG_MANAGER(libraryName)); \
93  logMsgFormater[eEnumValue]; \
94  return logMsgFormater.string(); \
95  } \
96 }; \
97 bool BOOST_PP_CAT(BenchSuiteName, BenchCaseName)::g_bRegisteredBenchCase = \
98  BOOST_PP_CAT(BenchSuiteName, BenchCaseName)::registerBenchCase(); \
99 }} \
100 IPSDK_IMPLEMENT_TOOLTIP(libraryName, BOOST_PP_CAT(BenchSuiteName, BenchCaseName), \
101  BenchSuiteName::MsgEnumType) \
102 BoolResult \
103 BOOST_PP_CAT(BenchSuiteName, BenchCaseName)::runDerived(BenchCaseResult& result) {
104 
107 #define IPSDK_BENCH_RESULT(eEnumValue, duration) \
108 { \
109  boost::shared_ptr<BenchResult> pBenchResult(boost::make_shared<BenchResult>()); \
110  pBenchResult->setValue<BenchResult::Info>(createMessage(MsgEnumType::eEnumValue)); \
111  pBenchResult->setValue<BenchResult::Duration>(duration); \
112  result.push_back<BenchCaseResult::BenchTestColl>(pBenchResult); \
113 }
114 
117 
118 #endif // __BENCHMARKTOOLS_BENCHMARKMACROS_H__
Source part of macros set for ToolTip class declaration.