[Mesa-dev] [PATCH 2/2] gallium/os: fix os_time_get_nano() to roll over less

Brian Paul brianp at vmware.com
Thu Aug 17 00:34:02 UTC 2017


On 08/16/2017 04:42 PM, Jose Fonseca wrote:
> On 16/08/17 23:37, Jose Fonseca wrote:
>> On 16/08/17 14:22, Brian Paul wrote:
>>> From: Frank Richter <frank.richter at dynardo.de>
>>>
>>> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=102241
>>> Cc: mesa-stable at lists.freedesktop.org
>>> Reviewed-by: Brian Paul <brianp at vmware.com>
>>> ---
>>>   src/gallium/auxiliary/os/os_time.c | 9 ++++++++-
>>>   1 file changed, 8 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/src/gallium/auxiliary/os/os_time.c
>>> b/src/gallium/auxiliary/os/os_time.c
>>> index e169139..e4a1cae 100644
>>> --- a/src/gallium/auxiliary/os/os_time.c
>>> +++ b/src/gallium/auxiliary/os/os_time.c
>>> @@ -69,10 +69,17 @@ os_time_get_nano(void)
>>>      static LARGE_INTEGER frequency;
>>>      LARGE_INTEGER counter;
>>> +   int64_t secs, nanosecs;
>>>      if(!frequency.QuadPart)
>>>         QueryPerformanceFrequency(&frequency);
>>>      QueryPerformanceCounter(&counter);
>>> -   return counter.QuadPart*INT64_C(1000000000)/frequency.QuadPart;
>>> +   /* Compute seconds and nanoseconds parts separately to
>>> +    * reduce severity of precision loss.
>>> +    */
>>> +   secs = counter.QuadPart / frequency.QuadPart;
>>> +   nanosecs = (counter.QuadPart % frequency.QuadPart) *
>>> INT64_C(1000000000)
>>> +      / frequency.QuadPart;
>>> +   return secs*INT64_C(1000000000) + nanosecs;
>>>   #else
>>>
>>
>> Series looks great.
>>
>> Thanks!
>>
>> Reviewed-by: Jose Fonseca <jfonseca at vmware.com>
>
> BTW, I wonder if we would win by using lldiv().  Because this is often
> use for performance measurements, so these extra division might add some
> impact.

Frank, do you want to look into that?  In the mean time, I'll push the 
patches as-is.

-Brian




More information about the mesa-dev mailing list