PR-URL: https://github.com/nodejs/node/pull/58070 Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com> Reviewed-By: Darshan Sen <raisinten@gmail.com> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com> Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
84 lines
2.2 KiB
C++
84 lines
2.2 KiB
C++
#include "vtuneapi.h"
|
|
#ifdef _MSC_VER // for msvc
|
|
#include <cstdlib>
|
|
#endif
|
|
|
|
std::map<std::string, std::shared_ptr<VTuneDomain>> VTuneDomain::domains_;
|
|
std::map<std::string, __itt_string_handle*> VTuneDomain::string_handlers_;
|
|
|
|
std::shared_ptr<VTuneDomain> VTuneDomain::createDomain(
|
|
const char* domain_name) {
|
|
auto domain = getDomain(domain_name);
|
|
|
|
if (domain == nullptr) {
|
|
#ifdef _MSC_VER // for msvc
|
|
wchar_t buffer[255];
|
|
mbstowcs(buffer, domain_name, 255);
|
|
__itt_domain* itt_domain = __itt_domain_create(buffer); // call api
|
|
#else // for clang and gcc
|
|
__itt_domain* itt_domain = __itt_domain_create(domain_name); // call api
|
|
#endif
|
|
if (itt_domain != NULL) {
|
|
std::string key(domain_name);
|
|
std::shared_ptr<VTuneDomain> value(new VTuneDomain(itt_domain));
|
|
domain = value;
|
|
domains_.insert(std::make_pair(key, value));
|
|
}
|
|
}
|
|
|
|
return domain;
|
|
}
|
|
|
|
void VTuneDomain::destroyDomain(const char* domain_name) {
|
|
auto it = domains_.find(domain_name);
|
|
if (it != domains_.end()) {
|
|
domains_.erase(it);
|
|
}
|
|
}
|
|
|
|
std::shared_ptr<VTuneDomain> VTuneDomain::getDomain(const char* domain_name) {
|
|
std::shared_ptr<VTuneDomain> result(nullptr);
|
|
|
|
auto it = domains_.find(domain_name);
|
|
if (it != domains_.end()) {
|
|
result = it->second;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
__itt_string_handle* VTuneDomain::getString(const char* str) {
|
|
__itt_string_handle* result = NULL;
|
|
|
|
auto it = string_handlers_.find(str);
|
|
if (it != string_handlers_.end()) {
|
|
result = it->second;
|
|
} else {
|
|
#ifdef _MSC_VER // for msvc
|
|
wchar_t buffer[255];
|
|
mbstowcs(buffer, str, 255);
|
|
result = __itt_string_handle_create(buffer); // call api
|
|
#else // for clang and gcc
|
|
result = __itt_string_handle_create(str);
|
|
#endif
|
|
std::string key(str);
|
|
string_handlers_.insert(std::make_pair(key, result));
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
bool VTuneDomain::beginTask(const char* task_name) {
|
|
bool result = false;
|
|
|
|
__itt_string_handle* name = getString(task_name);
|
|
if (name != NULL) {
|
|
__itt_task_begin(domain_, __itt_null, __itt_null, name);
|
|
result = true;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
void VTuneDomain::endTask() { __itt_task_end(domain_); }
|