#ifndef __VTUNE_API_H__ #define __VTUNE_API_H__ #include <map> #include <memory> #include <string> #include "third_party/ittapi/include/ittnotify.h" class VTuneDomain { /* factory method to create vtune domain */ public: /* create vtune domain, domain_name should be unique, if there already has a domain with same name, return false. */ static std::shared_ptr<VTuneDomain> createDomain(const char* domain_name); /* destory vtune domain*/ static void destroyDomain(const char* domain_name); /* get a domain */ static std::shared_ptr<VTuneDomain> getDomain(const char* domain_name); /* domain interface */ public: /* start a task with name, if no task name or null, use "default_task_name"*/ bool beginTask(const char* task_name = "default_task_name"); /* end a task, if there is no stacked task, return false*/ void endTask(); public: virtual ~VTuneDomain() {} protected: static __itt_string_handle* getString(const char* str); protected: VTuneDomain(__itt_domain* domain) { domain_ = domain; } private: static std::map<std::string, std::shared_ptr<VTuneDomain>> domains_; static std::map<std::string, __itt_string_handle*> string_handlers_; private: __itt_domain* domain_; }; #endif