From 3d78694590691bbbdf94c93e9289aa0d66b4f32e Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Mon, 23 Mar 2020 22:18:45 +0300 Subject: [PATCH] Debug: measure initialization time (before main() function) --- rpcs3/main.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/rpcs3/main.cpp b/rpcs3/main.cpp index 9b4be29257..17cfd3fb54 100644 --- a/rpcs3/main.cpp +++ b/rpcs3/main.cpp @@ -60,6 +60,8 @@ static atomic_t s_argv0; extern char **environ; #endif +LOG_CHANNEL(sys_log, "SYS"); + [[noreturn]] extern void report_fatal_error(const std::string& text) { const bool local = s_qt_init.try_lock(); @@ -263,6 +265,15 @@ QCoreApplication* createApplication(int& argc, char* argv[]) int main(int argc, char** argv) { +#ifdef _WIN32 + ULONG64 intro_cycles{}; + QueryThreadCycleTime(GetCurrentThread(), &intro_cycles); +#elif defined(RUSAGE_THREAD) + struct ::rusage intro_stats{}; + ::getrusage(RUSAGE_THREAD, &intro_stats); + const u64 intro_time = (intro_stats.ru_utime.tv_sec + intro_stats.ru_stime.tv_sec) * 1000000000ull + (intro_stats.ru_utime.tv_usec + intro_stats.ru_stime.tv_usec) * 1000ull; +#endif + s_argv0 = argv[0]; // Save for report_fatal_error // Only run RPCS3 to display an error @@ -354,6 +365,12 @@ int main(int argc, char** argv) logs::set_init({std::move(ver), std::move(os)}); } +#ifdef _WIN32 + sys_log.notice("Initialization times before main(): %fGc", intro_cycles / 1000000000.); +#elif defined(RUSAGE_THREAD) + sys_log.notice("Initialization times before main(): %fs", intro_time / 1000000000.); +#endif + #ifdef __linux__ struct ::rlimit rlim; rlim.rlim_cur = 4096;