Exemplo n.º 1
0
void RegisterV(const void* base_address, u32 code_size,
	const char* format, va_list args)
{
#if !(defined USE_OPROFILE && USE_OPROFILE) && !defined(USE_VTUNE)
	if (!s_perf_map_file.IsOpen())
		return;
#endif

	std::string symbol_name = StringFromFormatV(format, args);

#if defined USE_OPROFILE && USE_OPROFILE
	op_write_native_code(s_agent, symbol_name.data(), (u64)base_address,
		base_address, code_size);
#endif

#ifdef USE_VTUNE
	iJIT_Method_Load jmethod = {0};
	jmethod.method_id = iJIT_GetNewMethodID();
	jmethod.method_load_address = const_cast<void*>(base_address);
	jmethod.method_size = code_size;
	jmethod.method_name = const_cast<char*>(symbol_name.data());
	iJIT_NotifyEvent(iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED, (void*)&jmethod);
#endif

	// Linux perf /tmp/perf-$pid.map:
	if (s_perf_map_file.IsOpen())
	{
		std::string entry = StringFromFormat(
			"%llx %x %s\n",
			(u64)base_address, code_size, symbol_name.data());
		s_perf_map_file.WriteBytes(entry.data(), entry.size());
	}
}
Exemplo n.º 2
0
std::string StringFromFormat(const char* format, ...)
{
  va_list args;
  va_start(args, format);
  std::string res = StringFromFormatV(format, args);
  va_end(args);
  return res;
}
Exemplo n.º 3
0
void LogVulkanResult(int level, const char* func_name, VkResult res, const char* msg, ...)
{
  std::va_list ap;
  va_start(ap, msg);
  std::string real_msg = StringFromFormatV(msg, ap);
  va_end(ap);

  real_msg = StringFromFormat("(%s) %s (%d: %s)", func_name, real_msg.c_str(),
                              static_cast<int>(res), VkResultToString(res));

  GENERIC_LOG(LogTypes::VIDEO, static_cast<LogTypes::LOG_LEVELS>(level), "%s", real_msg.c_str());
}