summaryrefslogtreecommitdiffstats
path: root/video
diff options
context:
space:
mode:
authorNiklas Haas <git@haasn.xyz>2017-08-05 18:59:28 +0200
committerNiklas Haas <git@haasn.xyz>2017-08-06 00:10:20 +0200
commite5748e891f36a740faf39d7f9af799123d0e4388 (patch)
tree76bfd1102400fc199d21c220fc0ef5ff3e81ce7b /video
parentf2298f394ec1688e9a02483b15902de24bda403e (diff)
downloadmpv-e5748e891f36a740faf39d7f9af799123d0e4388.tar.bz2
mpv-e5748e891f36a740faf39d7f9af799123d0e4388.tar.xz
vo_opengl: measure pass_draw_osd as a whole
In the past, this always measured the per-shader execution times of the individual OSD parts, which was thrown off because the shader was reused anyway. (And apparently recording the OSD shader execution times was removed completely, probably because of them being so unrealiably anyway) Since ra_timer no longer has the restriction of not allowing timers to run concurrently, we can just wrap the entire OSD block inside a single osd_timer now, and record that. (Technically, this can still be off when using --blend-subtitles=video/yes and showing a full-screen OSD at the same time. Maybe this can be done better?)
Diffstat (limited to 'video')
-rw-r--r--video/out/opengl/video.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/video/out/opengl/video.c b/video/out/opengl/video.c
index 2491ddeb50..b3922f50d1 100644
--- a/video/out/opengl/video.c
+++ b/video/out/opengl/video.c
@@ -271,6 +271,7 @@ struct gl_video {
int pass_idx;
struct timer_pool *upload_timer;
struct timer_pool *blit_timer;
+ struct timer_pool *osd_timer;
// intermediate textures
struct saved_tex saved_tex[SHADER_MAX_SAVED];
@@ -2607,11 +2608,11 @@ static void pass_draw_osd(struct gl_video *p, int draw_flags, double pts,
{
mpgl_osd_generate(p->osd, rect, pts, p->image_params.stereo_out, draw_flags);
+ timer_pool_start(p->osd_timer);
for (int n = 0; n < MAX_OSD_PARTS; n++) {
// (This returns false if this part is empty with nothing to draw.)
if (!mpgl_osd_draw_prepare(p->osd, n, p->sc))
continue;
- pass_describe(p, "drawing osd");
// When subtitles need to be color managed, assume they're in sRGB
// (for lack of anything saner to do)
if (cms) {
@@ -2625,6 +2626,10 @@ static void pass_draw_osd(struct gl_video *p, int draw_flags, double pts,
}
mpgl_osd_draw_finish(p->osd, vp_w, vp_h, n, p->sc, target);
}
+
+ timer_pool_stop(p->osd_timer);
+ pass_describe(p, "drawing osd");
+ pass_record(p, timer_pool_measure(p->osd_timer));
}
static float chroma_realign(int size, int pixel)
@@ -3491,6 +3496,7 @@ static void init_gl(struct gl_video *p)
p->upload_timer = timer_pool_create(p->ra);
p->blit_timer = timer_pool_create(p->ra);
+ p->osd_timer = timer_pool_create(p->ra);
debug_check_gl(p, "after init_gl");
@@ -3514,6 +3520,7 @@ void gl_video_uninit(struct gl_video *p)
timer_pool_destroy(p->upload_timer);
timer_pool_destroy(p->blit_timer);
+ timer_pool_destroy(p->osd_timer);
for (int i = 0; i < PASS_INFO_MAX; i++) {
talloc_free(p->pass_fresh[i].desc.start);