diff --git a/configure b/configure index 9a2a2e767bd949ccf5cff4f62aa184b8fa3e0340..94cfc9994bb02b50c7fdb1cae6c6330f8aa05bfe 100755 --- a/configure +++ b/configure @@ -1028,8 +1028,10 @@ HAVE_LIST=" fork getaddrinfo gethrtime + GetProcessMemoryInfo GetProcessTimes getrusage + struct_rusage_ru_maxrss inet_aton inline_asm isatty @@ -2497,6 +2499,7 @@ check_func fork check_func getaddrinfo $network_extralibs check_func gethrtime check_func getrusage +check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss check_func inet_aton $network_extralibs check_func isatty check_func ${malloc_prefix}memalign && enable memalign @@ -2505,6 +2508,7 @@ check_func ${malloc_prefix}posix_memalign && enable posix_memalign check_func setrlimit check_func_headers io.h setmode check_func_headers lzo/lzo1x.h lzo1x_999_compress +check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi check_func_headers windows.h GetProcessTimes check_func_headers windows.h VirtualAlloc diff --git a/doc/ffmpeg-doc.texi b/doc/ffmpeg-doc.texi index b3de32ad7337c104b8fa220d32e596f6dff4383a..2a5313c23d684199f79641534626bc0ece126d50 100644 --- a/doc/ffmpeg-doc.texi +++ b/doc/ffmpeg-doc.texi @@ -734,7 +734,10 @@ Set meta data information of @var{outfile} from @var{infile}. @item -debug Print specific debug info. @item -benchmark -Add timings for benchmarking. +Show benchmarking information at the end of an encode. +Shows CPU time used and maximum memory consumption. +Maximum memory consumption is not supported on all systems, +it will usually display as 0 if not supported. @item -dump Dump each input packet. @item -hex diff --git a/ffmpeg.c b/ffmpeg.c index cb53bfc71559df11ce6687c7769a6507bd871a95..654e7e666a47f865b6242e893aef4574b2269e7b 100644 --- a/ffmpeg.c +++ b/ffmpeg.c @@ -44,10 +44,15 @@ #if HAVE_SYS_RESOURCE_H #include <sys/types.h> +#include <sys/time.h> #include <sys/resource.h> #elif HAVE_GETPROCESSTIMES #include <windows.h> #endif +#if HAVE_GETPROCESSMEMORYINFO +#include <windows.h> +#include <psapi.h> +#endif #if HAVE_SYS_SELECT_H #include <sys/select.h> @@ -3535,6 +3540,24 @@ static int64_t getutime(void) #endif } +static int64_t getmaxrss(void) +{ +#if HAVE_GETRUSAGE && HAVE_STRUCT_RUSAGE_RU_MAXRSS + struct rusage rusage; + getrusage(RUSAGE_SELF, &rusage); + return (int64_t)rusage.ru_maxrss * 1024; +#elif HAVE_GETPROCESSMEMORYINFO + HANDLE proc; + PROCESS_MEMORY_COUNTERS memcounters; + proc = GetCurrentProcess(); + memcounters.cb = sizeof(memcounters); + GetProcessMemoryInfo(proc, &memcounters, sizeof(memcounters)); + return memcounters.PeakPagefileUsage; +#else + return 0; +#endif +} + static void parse_matrix_coeffs(uint16_t *dest, const char *str) { int i; @@ -4029,7 +4052,8 @@ int main(int argc, char **argv) av_exit(1); ti = getutime() - ti; if (do_benchmark) { - printf("bench: utime=%0.3fs\n", ti / 1000000.0); + int maxrss = getmaxrss() / 1024; + printf("bench: utime=%0.3fs maxrss=%ikB\n", ti / 1000000.0, maxrss); } return av_exit(0);