[vlc-commits] [Git][videolan/vlc][master] win32: thread: use the performance counter by default for the date
Hugo Beauzée-Luyssen (@chouquette)
gitlab at videolan.org
Fri Oct 22 11:51:53 UTC 2021
Hugo Beauzée-Luyssen pushed to branch master at VideoLAN / VLC
Commits:
fdbbae70 by Steve Lhomme at 2021-10-22T11:36:26+00:00
win32: thread: use the performance counter by default for the date
This should have a better precision (<1us), and we don't have to beg the system
to give us a 5 ms precision. We also don't need extra LoadLibray. And we use
the same code between regular/uwp builds.
Some background on the latency and performance (we are in the Win7 case):
https://docs.microsoft.com/en-us/windows/win32/sysinfo/acquiring-high-resolution-time-stamps
- - - - -
1 changed file:
- src/win32/thread.c
Changes:
=====================================
src/win32/thread.c
=====================================
@@ -40,9 +40,6 @@
#include <limits.h>
#include <errno.h>
#include <time.h>
-#ifndef VLC_WINSTORE_APP
-#include <mmsystem.h>
-#endif
#include <vlc_atomic.h>
/*** Static mutex and condition variable ***/
@@ -523,13 +520,6 @@ static union
{
LARGE_INTEGER freq;
} perf;
-#ifndef VLC_WINSTORE_APP
- struct
- {
- MMRESULT (WINAPI *timeGetDevCaps)(LPTIMECAPS ptc,UINT cbtc);
- DWORD (WINAPI *timeGetTime)(void);
- } multimedia;
-#endif
} clk;
static vlc_tick_t mdate_interrupt (void)
@@ -554,16 +544,6 @@ static vlc_tick_t mdate_tick (void)
static_assert ((CLOCK_FREQ % 1000) == 0, "Broken frequencies ratio");
return VLC_TICK_FROM_MS( ts );
}
-#ifndef VLC_WINSTORE_APP
-static vlc_tick_t mdate_multimedia (void)
-{
- DWORD ts = clk.multimedia.timeGetTime ();
-
- /* milliseconds */
- static_assert ((CLOCK_FREQ % 1000) == 0, "Broken frequencies ratio");
- return VLC_TICK_FROM_MS( ts );
-}
-#endif
static vlc_tick_t mdate_perf (void)
{
@@ -660,16 +640,14 @@ void (vlc_tick_sleep)(vlc_tick_t delay)
static BOOL SelectClockSource(vlc_object_t *obj)
{
-#ifdef VLC_WINSTORE_APP
const char *name = "perf";
-#else
- const char *name = "multimedia";
-#endif
char *str = NULL;
if (obj != NULL)
+ {
str = var_InheritString(obj, "clock-source");
- if (str != NULL)
- name = str;
+ if (str != NULL)
+ name = str;
+ }
if (!strcmp (name, "interrupt"))
{
msg_Dbg (obj, "using interrupt time as clock source");
@@ -681,38 +659,9 @@ static BOOL SelectClockSource(vlc_object_t *obj)
msg_Dbg (obj, "using Windows time as clock source");
mdate_selected = mdate_tick;
}
-#ifndef VLC_WINSTORE_APP
- else
- if (!strcmp (name, "multimedia"))
- {
- TIMECAPS caps;
- MMRESULT (WINAPI * timeBeginPeriod)(UINT);
-
- HMODULE hWinmm = LoadLibrary(TEXT("winmm.dll"));
- if (!hWinmm)
- goto perf;
-
- clk.multimedia.timeGetDevCaps = (void*)GetProcAddress(hWinmm, "timeGetDevCaps");
- clk.multimedia.timeGetTime = (void*)GetProcAddress(hWinmm, "timeGetTime");
- if (!clk.multimedia.timeGetDevCaps || !clk.multimedia.timeGetTime)
- goto perf;
-
- msg_Dbg (obj, "using multimedia timers as clock source");
- if (clk.multimedia.timeGetDevCaps (&caps, sizeof (caps)) != MMSYSERR_NOERROR)
- goto perf;
- msg_Dbg (obj, " min period: %u ms, max period: %u ms",
- caps.wPeriodMin, caps.wPeriodMax);
- mdate_selected = mdate_multimedia;
-
- timeBeginPeriod = (void*)GetProcAddress(hWinmm, "timeBeginPeriod");
- if (timeBeginPeriod != NULL)
- timeBeginPeriod(5);
- }
-#endif
else
if (!strcmp (name, "perf"))
{
- perf:
msg_Dbg (obj, "using performance counters as clock source");
if (!QueryPerformanceFrequency (&clk.perf.freq))
abort ();
View it on GitLab: https://code.videolan.org/videolan/vlc/-/commit/fdbbae70af8005bcaa771ef63968a2d023da267e
--
View it on GitLab: https://code.videolan.org/videolan/vlc/-/commit/fdbbae70af8005bcaa771ef63968a2d023da267e
You're receiving this email because of your account on code.videolan.org.
More information about the vlc-commits
mailing list