store buffer for window title, only update actual title when it changes

This commit is contained in:
Brad Parker 2017-01-19 00:33:52 -05:00
parent 7fbd3fcfb6
commit b44c8c9995
11 changed files with 114 additions and 26 deletions

View File

@ -716,8 +716,14 @@ bool x11_connect(void)
void x11_update_title(void *data, video_frame_info_t *video_info)
{
if (video_info->monitor_fps_enable)
XStoreName(g_x11_dpy, g_x11_win, video_info->window_text);
char title[128];
title[0] = '\0';
video_driver_get_window_title(title, sizeof(title));
if (title[0] && video_info->monitor_fps_enable)
XStoreName(g_x11_dpy, g_x11_win, title);
}
bool x11_input_ctx_new(bool true_full)

View File

@ -534,7 +534,16 @@ static bool sdl2_gfx_frame(void *data, const void *frame, unsigned width,
SDL_RenderPresent(vid->renderer);
if (video_info->monitor_fps_enable)
SDL_SetWindowTitle(vid->window, video_info->window_text);
{
char title[128];
title[0] = '\0';
video_driver_get_window_title(title, sizeof(title));
if (title[0])
SDL_SetWindowTitle(vid->window, title);
}
return true;
}

View File

@ -539,7 +539,16 @@ static void *xv_init(const video_info_t *video,
video_driver_build_info(&video_info);
if (video_info.monitor_fps_enable)
XStoreName(g_x11_dpy, g_x11_win, video_info.window_text);
{
char title[128];
title[0] = '\0';
video_driver_get_window_title(title, sizeof(title));
if (title[0])
XStoreName(g_x11_dpy, g_x11_win, title);
}
x11_set_window_attr(g_x11_dpy, g_x11_win);

View File

@ -425,7 +425,16 @@ static void cocoagl_gfx_ctx_update_title(void *data, video_frame_info_t *video_i
view.data = (CocoaView*)nsview_get_ptr();
if (window && video_info->monitor_fps_enable)
window->set_title(&view, video_info->window_text);
{
char title[128];
title[0] = '\0';
video_driver_get_window_title(title, sizeof(title));
if (title[0])
window->set_title(&view, title);
}
}
#endif

View File

@ -102,7 +102,16 @@ static void gfx_ctx_d3d_update_title(void *data, video_frame_info_t *video_info)
const ui_window_t *window = ui_companion_driver_get_window_ptr();
if (window && video_info->monitor_fps_enable)
window->set_title(&main_window, video_info->window_text);
{
char title[128];
title[0] = '\0';
video_driver_get_window_title(title, sizeof(title));
if (title[0])
window->set_title(&main_window, title);
}
#endif
}

View File

@ -86,12 +86,21 @@ static bool gfx_ctx_gdi_set_resize(void *data,
return false;
}
static void gfx_ctx_gdi_update_title(void *data, video_frame_info_t *video_info)
static void gfx_ctx_gdi_update_window_title(void *data, video_frame_info_t *video_info)
{
const ui_window_t *window = ui_companion_driver_get_window_ptr();
if (window && video_info->monitor_fps_enable)
window->set_title(&main_window, video_info->window_text);
{
char title[128];
title[0] = '\0';
video_driver_get_window_title(title, sizeof(title));
if (title[0])
window->set_title(&main_window, title);
}
}
static void gfx_ctx_gdi_get_video_size(void *data,

View File

@ -268,14 +268,21 @@ static void sdl_ctx_get_video_size(void *data,
static void sdl_ctx_update_title(void *data, video_frame_info_t *video_info)
{
char title[128];
title[0] = '\0';
video_driver_get_window_title(title, sizeof(title));
if (video_info->monitor_fps_enable)
{
#ifdef HAVE_SDL2
gfx_ctx_sdl_data_t *sdl = (gfx_ctx_sdl_data_t*)data;
if (sdl)
SDL_SetWindowTitle(sdl->g_win, video_info->window_text);
if (sdl && title[0])
SDL_SetWindowTitle(sdl->g_win, title);
#else
SDL_WM_SetCaption(video_info->window_text, NULL);
SDL_WM_SetCaption(title, NULL);
#endif
}
}

View File

@ -719,9 +719,14 @@ static bool gfx_ctx_wl_set_resize(void *data, unsigned width, unsigned height)
static void gfx_ctx_wl_update_title(void *data, video_frame_info_t *video_info)
{
gfx_ctx_wayland_data_t *wl = (gfx_ctx_wayland_data_t*)data;
char title[128];
if (wl && video_info->monitor_fps_enable)
wl_shell_surface_set_title(wl->shell_surf, video_info->window_text);
title[0] = '\0';
video_driver_get_window_title(title, sizeof(title));
if (wl && title[0] && video_info->monitor_fps_enable)
wl_shell_surface_set_title(wl->shell_surf, title);
}

View File

@ -390,7 +390,16 @@ static void gfx_ctx_wgl_update_title(void *data, video_frame_info_t *video_info)
const ui_window_t *window = ui_companion_driver_get_window_ptr();
if (window && video_info->monitor_fps_enable)
window->set_title(&main_window, video_info->window_text);
{
char title[128];
title[0] = '\0';
video_driver_get_window_title(title, sizeof(title));
if (title[0])
window->set_title(&main_window, title);
}
}
static void gfx_ctx_wgl_get_video_size(void *data,

View File

@ -137,6 +137,8 @@ static unsigned video_driver_height = 0;
static enum rarch_display_type video_driver_display_type = RARCH_DISPLAY_NONE;
static char video_driver_title_buf[64] = {0};
static char video_driver_window_title[128] = {0};
static bool video_driver_window_title_update = true;
static retro_time_t video_driver_frame_time_samples[MEASURE_FRAME_TIME_SAMPLES_COUNT];
static uint64_t video_driver_frame_time_count = 0;
@ -2039,34 +2041,36 @@ static bool video_monitor_get_fps(video_frame_info_t *video_info)
last_fps = TIME_TO_FPS(curr_time, new_time, FPS_UPDATE_INTERVAL);
curr_time = new_time;
fill_pathname_noext(video_info->window_text,
fill_pathname_noext(video_driver_window_title,
video_driver_title_buf,
" || ",
sizeof(video_info->window_text));
sizeof(video_driver_window_title));
if (video_info->fps_show)
{
snprintf(video_info->fps_text,
sizeof(video_info->fps_text),
" FPS: %6.1f || ", last_fps);
strlcat(video_info->window_text,
strlcat(video_driver_window_title,
video_info->fps_text,
sizeof(video_info->window_text));
sizeof(video_driver_window_title));
}
strlcat(video_info->window_text,
strlcat(video_driver_window_title,
"Frames: ",
sizeof(video_info->window_text));
sizeof(video_driver_window_title));
snprintf(frames_text,
sizeof(frames_text),
STRING_REP_UINT64,
(unsigned long long)video_info->frame_count);
strlcat(video_info->window_text,
strlcat(video_driver_window_title,
frames_text,
sizeof(video_info->window_text));
sizeof(video_driver_window_title));
ret = true;
video_driver_window_title_update = true;
}
if (video_info->fps_show)
@ -2082,14 +2086,16 @@ static bool video_monitor_get_fps(video_frame_info_t *video_info)
}
curr_time = fps_time = new_time;
strlcpy(video_info->window_text,
strlcpy(video_driver_window_title,
video_driver_title_buf,
sizeof(video_info->window_text));
sizeof(video_driver_window_title));
strlcpy(video_info->fps_text,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE),
sizeof(video_info->fps_text));
video_driver_window_title_update = true;
return true;
}
@ -2264,11 +2270,11 @@ void video_driver_build_info(video_frame_info_t *video_info)
video_info->font_enable = settings->video.font_enable;
video_info->frame_count = 0;
video_info->window_text[0] = '\0';
video_info->fps_text[0] = '\0';
video_info->width = video_driver_width;
video_info->height = video_driver_height;
video_driver_threaded_unlock();
}
@ -2325,3 +2331,12 @@ bool video_driver_translate_coord_viewport(
return true;
}
void video_driver_get_window_title(char *buf, unsigned len)
{
if (buf && video_driver_window_title_update)
{
strlcpy(buf, video_driver_window_title, len);
video_driver_window_title_update = false;
}
}

View File

@ -102,7 +102,6 @@ typedef struct video_frame_info
unsigned monitor_index;
bool font_enable;
bool monitor_fps_enable;
char window_text[128];
char fps_text[128];
uint64_t frame_count;
@ -531,6 +530,8 @@ void video_driver_build_info(video_frame_info_t *video_info);
void video_driver_reinit(void);
void video_driver_get_window_title(char *buf, unsigned len);
extern video_driver_t video_gl;
extern video_driver_t video_vulkan;
extern video_driver_t video_psp1;