Add an instrumentation option for performance profiling

Not built by default, this allows printing the emulation speed on stdout and exiting after a certain emulation time.
This commit is contained in:
Adrien Moulin
2022-08-06 14:23:11 +02:00
parent 730af4dd53
commit 3a1d9cff9a
4 changed files with 30 additions and 0 deletions

View File

@@ -138,6 +138,10 @@ char rom_path[1024] = { '\0'}; /* (O) full path to ROMs */
rom_path_t rom_paths = { "", NULL }; /* (O) full paths to ROMs */ rom_path_t rom_paths = { "", NULL }; /* (O) full paths to ROMs */
char log_path[1024] = { '\0'}; /* (O) full path of logfile */ char log_path[1024] = { '\0'}; /* (O) full path of logfile */
char vm_name[1024] = { '\0'}; /* (O) display name of the VM */ char vm_name[1024] = { '\0'}; /* (O) display name of the VM */
#ifdef USE_INSTRUMENT
uint8_t instru_enabled = 0;
uint64_t instru_run_ms = 0;
#endif
/* Configuration values. */ /* Configuration values. */
int window_remember; int window_remember;
@@ -567,6 +571,12 @@ usage:
/* .. and then exit. */ /* .. and then exit. */
return(0); return(0);
#ifdef USE_INSTRUMENT
} else if (!strcasecmp(argv[c], "--instrument")) {
if ((c+1) == argc) goto usage;
instru_enabled = 1;
sscanf(argv[++c], "%llu", &instru_run_ms);
#endif
} }
/* Uhm... out of options here.. */ /* Uhm... out of options here.. */

View File

@@ -57,6 +57,10 @@ if(VNC)
endif() endif()
endif() endif()
if(INSTRUMENT)
add_compile_definitions(USE_INSTRUMENT)
endif()
target_link_libraries(86Box cpu chipset mch dev mem fdd game cdrom zip mo hdd target_link_libraries(86Box cpu chipset mch dev mem fdd game cdrom zip mo hdd
net print scsi sio snd vid voodoo plat ui) net print scsi sio snd vid voodoo plat ui)

View File

@@ -76,6 +76,10 @@ extern uint64_t source_hwnd;
extern char rom_path[1024]; /* (O) full path to ROMs */ extern char rom_path[1024]; /* (O) full path to ROMs */
extern char log_path[1024]; /* (O) full path of logfile */ extern char log_path[1024]; /* (O) full path of logfile */
extern char vm_name[1024]; /* (O) display name of the VM */ extern char vm_name[1024]; /* (O) display name of the VM */
#ifdef USE_INSTRUMENT
extern uint8_t instru_enabled;
extern uint64_t instru_run_ms;
#endif
#define window_x monitor_settings[0].mon_window_x #define window_x monitor_settings[0].mon_window_x
#define window_y monitor_settings[0].mon_window_y #define window_y monitor_settings[0].mon_window_y

View File

@@ -109,9 +109,21 @@ main_thread_fn()
if (drawits > 50) if (drawits > 50)
drawits = 0; drawits = 0;
#ifdef USE_INSTRUMENT
uint64_t start_time = elapsed_timer.nsecsElapsed();
#endif
/* Run a block of code. */ /* Run a block of code. */
pc_run(); pc_run();
#ifdef USE_INSTRUMENT
if (instru_enabled) {
uint64_t elapsed_us = (elapsed_timer.nsecsElapsed() - start_time) / 1000;
uint64_t total_elapsed_us = (uint64_t)((double)tsc / cpu_s->rspeed * 1000);
printf("[instrument] %llu, %llu\n", total_elapsed_us, elapsed_us);
if (instru_run_ms && total_elapsed_us >= instru_run_ms)
break;
}
#endif
/* Every 200 frames we save the machine status. */ /* Every 200 frames we save the machine status. */
if (++frames >= 200 && nvr_dosave) { if (++frames >= 200 && nvr_dosave) {
qt_nvr_save(); qt_nvr_save();