From patchwork Fri Apr 20 20:21:13 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Wachsler X-Patchwork-Id: 8540 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:a02:155:0:0:0:0:0 with SMTP id c82-v6csp1086597jad; Fri, 20 Apr 2018 13:30:14 -0700 (PDT) X-Google-Smtp-Source: AIpwx48SczERdsScMDvJbJLhD6VvLRkuxf7c2SGgJCcCsSY/lVbMwHIbbMW7rdl0M02lm1+ROSYt X-Received: by 2002:adf:c4b6:: with SMTP id m51-v6mr9433042wrf.126.1524256213945; Fri, 20 Apr 2018 13:30:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524256213; cv=none; d=google.com; s=arc-20160816; b=sRzcYiianS+sOZIni+Qwb91LBeArY36nLo61fGBapF7cCNpMbNCU2tRveLnVHVh0wE IqIhHDw0ts5+lXTb2NEo5XSvpU2Nk4C5YD8DGb1KDYpj9KSpyeXBht1/1FTyHZtFUWgr pHnhqAvCjtSAHmGFlRH/Lm/ZHrCV439LhMcW5qeeAraSzquGI/xIvS5kHciuGZkGTKmu 3pNGTydnIKX5Ixo/lpQ1sBLwcEfjW7OxXSW6uFAe0UDe9rSxY13tDHlbqfUXpavaWXX+ 8Ix6yITTVpYPyQ6yY/XES/0xCIG+6KyQkD1GnXcJZyxv260BdyFqD1qVO5QNkqveLuJd QLvg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:dkim-signature :delivered-to:arc-authentication-results; bh=8ugAyFsgvsCO2oGAtwiOmCvxsIPNSKy03KO5344uSAU=; b=TPCmwtGJCRzGhP5UTH7SQz9fHAN03Ni1y5LjVw1ZLVM69eB3RWuY069lwfme6HtSxU TU3Bi4QpnO7WRYclCk3iPcQV8FoPC2v22U3J7XX/GEy0TZuV/NACiZqCGU73TgPyQrb7 +kgAHKh1PP1EXJcBC1O2ePw8Q+s9CLP0pHZdOIQ6CiPVEtvqi5KV3gWlELABboYvJEDS xrfH2jie1+Wt1sWBB6uScQx+SK5/hrWsvXQTrlsE0oZd987Zxu/o11lL4AWKK7ORCBDk 5e3ryC9twN+nLJAqXm8s9UaBKxdbe9R6u7lTEUMCrX6ZAUfRyzyT8JL/YbUJck2SM1Og GEBA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@google.com header.s=20161025 header.b=tUarxs+H; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id b135si1674423wmf.164.2018.04.20.13.30.13; Fri, 20 Apr 2018 13:30:13 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@google.com header.s=20161025 header.b=tUarxs+H; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1713C689B4A; Fri, 20 Apr 2018 23:29:44 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-yb0-f195.google.com (mail-yb0-f195.google.com [209.85.213.195]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 580366805C5 for ; Fri, 20 Apr 2018 23:29:37 +0300 (EEST) Received: by mail-yb0-f195.google.com with SMTP id r13-v6so2327654ybm.12 for ; Fri, 20 Apr 2018 13:30:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=9KclUKq/W8XVDaLZYDkWqCQyv+KnXbahIWViIg+uf9Q=; b=tUarxs+HZR4WgcmwfugID/bwjO+m8CoBQmToR4vL95KrmOILP4v7ruCS2ySxLTihgC utZD8eGhMH7UOtspCcUAA/m3b8X202hylnRFQ1gu2y0pihqLCUx0mcgtXUjKAG+xAm3V aKiJFOcIkv/u65M65w8Ixo09dXbvaYc7jy/eX57ifsupwP+AlCBbNH0e6GYIBA8OICSB B8rMougX38Jt1IzZ2Y/rkSu+mZvz+HwqJsier+YDri/pyS+NlQH0Qp7x/3MBHyuPoX2i UPz96fLZpOoR1v3QJ7HoLrwaIQR1740gT7F30HOpPWiASAu9/rt8xkwf+dj7DOtpsUSr WxCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=9KclUKq/W8XVDaLZYDkWqCQyv+KnXbahIWViIg+uf9Q=; b=LMWsyVf6VM1edg9Dvmn1SWq8lOrAS3YMh3oQZ9gL/14HZT9OsSUOKY6QPogkBdWpt0 E5nREQuaS9W1p8rzSrMlI3/AiURXoUvbh4oPpbTPinHVSI5yjy/lsfspjhj6A3qpV6ot VgM9VjWYFwGNrQM8HJE39m4FmBWda5SLFxL5UAFtVqO7F7J5Vfj0TxZVDQ9E5xy3SAOp juifOsOn67dP8LHnoLdzIf/PBitEMQ/g84jMDXH1E/DRHmKBiz4T/vpmrClwlCmhsmSb FCDxkERSVk0tpp5v7tc1aZwQfctVNUtHvP+NV1RyI+fxq83z1BpZxJi/ekws8ICvtYN6 nekA== X-Gm-Message-State: ALQs6tCAxshv+MjeOodRvN0Y2xq87CyLFABhePPZ7dhs9iLw/zuM6ROI BTnVkmFfmHP5mcRsgL8443acUqgU4Xo= X-Received: by 2002:a25:2a55:: with SMTP id q82-v6mr6204154ybq.168.1524255894500; Fri, 20 Apr 2018 13:24:54 -0700 (PDT) Received: from quechee.cam.corp.google.com ([100.67.2.16]) by smtp.gmail.com with ESMTPSA id j138-v6sm72220ywg.40.2018.04.20.13.24.53 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 20 Apr 2018 13:24:54 -0700 (PDT) From: Mark Wachsler To: ffmpeg-devel@ffmpeg.org Date: Fri, 20 Apr 2018 16:21:13 -0400 Message-Id: <20180420202113.131836-1-wachsler@google.com> X-Mailer: git-send-email 2.17.0.484.g0c8726318c-goog Subject: [FFmpeg-devel] [PATCH] Add system and real time to benchmarking. X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Mark Wachsler MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" The -benchmark and -benchmark_all options now show user, system, and real time, instead of just user time. --- fftools/ffmpeg.c | 50 ++++++++++++++++++++++++++++++++++-------------- 1 file changed, 36 insertions(+), 14 deletions(-) diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index 4dbe72186d..d37171d567 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -120,8 +120,14 @@ const char *const forced_keyframes_const_names[] = { NULL }; +typedef struct TimeStamps { + int64_t real_usec; + int64_t user_usec; + int64_t sys_usec; +} TimeStamps; + static void do_video_stats(OutputStream *ost, int frame_size); -static int64_t getutime(void); +static TimeStamps get_time_stamps(void); static int64_t getmaxrss(void); static int ifilter_has_all_input_formats(FilterGraph *fg); @@ -133,7 +139,7 @@ static int64_t decode_error_stat[2]; static int want_sdp = 1; -static int current_time; +static TimeStamps current_time; AVIOContext *progress_avio = NULL; static uint8_t *subtitle_out; @@ -653,7 +659,7 @@ static void abort_codec_experimental(AVCodec *c, int encoder) static void update_benchmark(const char *fmt, ...) { if (do_benchmark_all) { - int64_t t = getutime(); + TimeStamps t = get_time_stamps(); va_list va; char buf[1024]; @@ -661,7 +667,11 @@ static void update_benchmark(const char *fmt, ...) va_start(va, fmt); vsnprintf(buf, sizeof(buf), fmt, va); va_end(va); - av_log(NULL, AV_LOG_INFO, "bench: %8"PRIu64" %s \n", t - current_time, buf); + av_log(NULL, AV_LOG_INFO, + "bench: %8" PRIu64 " user %8" PRIu64 " sys %8" PRIu64 " real %s \n", + t.user_usec - current_time.user_usec, + t.sys_usec - current_time.sys_usec, + t.real_usec - current_time.real_usec, buf); } current_time = t; } @@ -4715,23 +4725,30 @@ static int transcode(void) return ret; } - -static int64_t getutime(void) -{ +static TimeStamps get_time_stamps(void) { + TimeStamps time_stamps; + time_stamps.real_usec = av_gettime_relative(); #if HAVE_GETRUSAGE struct rusage rusage; getrusage(RUSAGE_SELF, &rusage); - return (rusage.ru_utime.tv_sec * 1000000LL) + rusage.ru_utime.tv_usec; + time_stamps.user_usec = + (rusage.ru_utime.tv_sec * 1000000LL) + rusage.ru_utime.tv_usec; + time_stamps.sys_usec = + (rusage.ru_stime.tv_sec * 1000000LL) + rusage.ru_stime.tv_usec; #elif HAVE_GETPROCESSTIMES HANDLE proc; FILETIME c, e, k, u; proc = GetCurrentProcess(); GetProcessTimes(proc, &c, &e, &k, &u); - return ((int64_t) u.dwHighDateTime << 32 | u.dwLowDateTime) / 10; + time_stamps.user_usec = + ((int64_t)u.dwHighDateTime << 32 | u.dwLowDateTime) / 10; + time_stamps.sys_usec = + ((int64_t)k.dwHighDateTime << 32 | k.dwLowDateTime) / 10; #else - return av_gettime_relative(); + time_stamps.user_usec = time_stamps.sys_usec = 0; #endif + return time_stamps; } static int64_t getmaxrss(void) @@ -4759,7 +4776,7 @@ static void log_callback_null(void *ptr, int level, const char *fmt, va_list vl) int main(int argc, char **argv) { int i, ret; - int64_t ti; + TimeStamps ti; init_dynload(); @@ -4811,12 +4828,17 @@ int main(int argc, char **argv) want_sdp = 0; } - current_time = ti = getutime(); + current_time = ti = get_time_stamps(); if (transcode() < 0) exit_program(1); - ti = getutime() - ti; if (do_benchmark) { - av_log(NULL, AV_LOG_INFO, "bench: utime=%0.3fs\n", ti / 1000000.0); + current_time = get_time_stamps(); + int64_t utime = current_time.user_usec - ti.user_usec; + int64_t stime = current_time.sys_usec - ti.sys_usec; + int64_t rtime = current_time.real_usec - ti.real_usec; + av_log(NULL, AV_LOG_INFO, + "bench: utime=%0.3fs stime=%0.3fs rtime=%0.3fs\n", + utime / 1000000.0, stime / 1000000.0, rtime / 1000000.0); } av_log(NULL, AV_LOG_DEBUG, "%"PRIu64" frames successfully decoded, %"PRIu64" decoding errors\n", decode_error_stat[0], decode_error_stat[1]);