From ed62f56a40b7854c957bef2f18003a511a54d82d Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 26 Aug 2016 20:27:46 +0200 Subject: player: avoid some redundant terminal status updates Run term_osd_update() just once per update, instead of twice (once for the status line, and once for the terminal OSD messafe). --- player/osd.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) (limited to 'player') diff --git a/player/osd.c b/player/osd.c index e2606829be..48bf22b346 100644 --- a/player/osd.c +++ b/player/osd.c @@ -115,17 +115,16 @@ void term_osd_set_subs(struct MPContext *mpctx, const char *text) term_osd_update(mpctx); } -static void term_osd_set_text(struct MPContext *mpctx, const char *text) +static void term_osd_set_text_lazy(struct MPContext *mpctx, const char *text) { if ((mpctx->video_out && mpctx->opts->term_osd != 1) || !mpctx->opts->term_osd || !text) text = ""; // disable talloc_free(mpctx->term_osd_text); mpctx->term_osd_text = talloc_strdup(mpctx, text); - term_osd_update(mpctx); } -static void term_osd_set_status(struct MPContext *mpctx, const char *text) +static void term_osd_set_status_lazy(struct MPContext *mpctx, const char *text) { talloc_free(mpctx->term_osd_status); mpctx->term_osd_status = talloc_strdup(mpctx, text); @@ -134,8 +133,6 @@ static void term_osd_set_status(struct MPContext *mpctx, const char *text) terminal_get_size(&w, &h); if (strlen(mpctx->term_osd_status) > w && !strchr(mpctx->term_osd_status, '\n')) mpctx->term_osd_status[w] = '\0'; - - term_osd_update(mpctx); } static void add_term_osd_bar(struct MPContext *mpctx, char **line, int width) @@ -167,7 +164,7 @@ static bool is_busy(struct MPContext *mpctx) return !mpctx->restart_complete && mp_time_sec() - mpctx->start_timestamp > 0.3; } -static void print_status(struct MPContext *mpctx) +static void term_osd_print_status_lazy(struct MPContext *mpctx) { struct MPOpts *opts = mpctx->opts; @@ -179,13 +176,13 @@ static void print_status(struct MPContext *mpctx) if (opts->quiet || !mpctx->playback_initialized || !mpctx->playing_msg_shown) { - term_osd_set_status(mpctx, ""); + term_osd_set_status_lazy(mpctx, ""); return; } if (opts->status_msg) { char *r = mp_property_expand_escaped_string(mpctx, opts->status_msg); - term_osd_set_status(mpctx, r); + term_osd_set_status_lazy(mpctx, r); talloc_free(r); return; } @@ -292,7 +289,7 @@ static void print_status(struct MPContext *mpctx) } // end - term_osd_set_status(mpctx, line); + term_osd_set_status_lazy(mpctx, line); talloc_free(line); } @@ -563,8 +560,9 @@ void update_osd_msg(struct MPContext *mpctx) update_osd_bar(mpctx, OSD_BAR_SEEK, 0, 1, MPCLAMP(pos, 0, 1)); } - term_osd_set_text(mpctx, mpctx->osd_msg_text); - print_status(mpctx); + term_osd_set_text_lazy(mpctx, mpctx->osd_msg_text); + term_osd_print_status_lazy(mpctx); + term_osd_update(mpctx); int osd_level = opts->osd_level; if (mpctx->osd_show_pos) -- cgit v1.2.3