Michaël Zasso 918fe04351
deps: update V8 to 13.6.233.8
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>
2025-05-02 15:06:53 +02:00

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_); }