15 #ifndef __BENCHMARKTOOLS_BENCHMARKMACROS_H__ 16 #define __BENCHMARKTOOLS_BENCHMARKMACROS_H__ 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> 30 #define IPSDK_BENCH_SUITE(libraryName, BenchSuiteName, eMsgEnum) \ 33 class BenchSuiteName : public BaseBenchSuite \ 35 IPSDK_DECLARE_TOOLTIP() \ 36 friend boost::shared_ptr<BenchSuiteName> boost::make_shared<BenchSuiteName>(); \ 38 BenchSuiteName() : BaseBenchSuite() {} \ 40 typedef eMsgEnum MsgEnumType; \ 41 ~BenchSuiteName() {} \ 42 static BenchSuitePtr getInstance() \ 44 static BenchSuitePtr g_benchSuiteInstance(boost::make_shared<BenchSuiteName>()); \ 45 return g_benchSuiteInstance; \ 48 static bool registerBenchSuite() \ 50 BenchmarkManager& benchmarkManager = BenchmarkManager::getInstance(); \ 51 benchmarkManager.addBenchSuite(BenchSuiteName::getInstance()); \ 54 static bool g_bRegisteredBenchSuite; \ 56 bool BenchSuiteName::g_bRegisteredBenchSuite = BenchSuiteName::registerBenchSuite(); \ 58 IPSDK_IMPLEMENT_TOOLTIP(libraryName, BenchSuiteName, eMsgEnum) 63 #define IPSDK_BENCH_CASE(libraryName, BenchSuiteName, BenchCaseName) \ 66 class BOOST_PP_CAT(BenchSuiteName, BenchCaseName) : public BaseBenchCase \ 68 IPSDK_DECLARE_TOOLTIP() \ 69 typedef BOOST_PP_CAT(BenchSuiteName, BenchCaseName) ThisClass; \ 70 friend boost::shared_ptr<ThisClass> boost::make_shared<ThisClass>(); \ 72 BOOST_PP_CAT(BenchSuiteName, BenchCaseName)() {} \ 74 typedef BenchSuiteName::MsgEnumType MsgEnumType; \ 75 ~BOOST_PP_CAT(BenchSuiteName, BenchCaseName)() {} \ 76 static BenchCasePtr getInstance() \ 78 static BenchCasePtr g_benchCaseInstance(boost::make_shared<ThisClass>()); \ 79 return g_benchCaseInstance; \ 82 static bool registerBenchCase() \ 84 BenchSuitePtr pBenchSuitePtr = BenchSuiteName::getInstance(); \ 85 pBenchSuitePtr->addBenchCase(ThisClass::getInstance()); \ 88 static bool g_bRegisteredBenchCase; \ 89 BoolResult runDerived(BenchCaseResult& result); \ 90 std::string createMessage(const MsgEnumType::domain& eEnumValue) const \ 92 LogMessageFormater logMsgFormater(IPSDK_LIB_LOG_MSG_MANAGER(libraryName)); \ 93 logMsgFormater[eEnumValue]; \ 94 return logMsgFormater.string(); \ 97 bool BOOST_PP_CAT(BenchSuiteName, BenchCaseName)::g_bRegisteredBenchCase = \ 98 BOOST_PP_CAT(BenchSuiteName, BenchCaseName)::registerBenchCase(); \ 100 IPSDK_IMPLEMENT_TOOLTIP(libraryName, BOOST_PP_CAT(BenchSuiteName, BenchCaseName), \ 101 BenchSuiteName::MsgEnumType) \ 103 BOOST_PP_CAT(BenchSuiteName, BenchCaseName)::runDerived(BenchCaseResult& result) { 107 #define IPSDK_BENCH_RESULT(eEnumValue, duration) \ 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); \ 118 #endif // __BENCHMARKTOOLS_BENCHMARKMACROS_H__ Source part of macros set for ToolTip class declaration.