VirtualBox

Changeset 72863 in vbox


Ignore:
Timestamp:
Jul 4, 2018 10:13:40 AM (7 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
123408
Message:

IPRT: RTTimeProgramXxxx must all be derived from the nanosecond timestamp or we may get rounding errors. This happened when mixing the ring-0 formatted 'msprog' and 'timeprog' prefixes with ones from ring-3.

Location:
trunk/src/VBox/Runtime
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/common/log/log.cpp

    r72778 r72863  
    6060# include <iprt/alloca.h>
    6161# include <stdio.h>
    62 # include "internal/time.h" /* For g_u64ProgramStartNanoTS. */
    6362#endif
    6463
     
    13361335    else
    13371336        pInt->pacEntriesPerGroup= NULL;
    1338     pInt->nsR0ProgramStart      = g_u64ProgramStartNanoTS;
     1337    pInt->nsR0ProgramStart      = RTTimeProgramStartNanoTS();
    13391338    RT_ZERO(pInt->szR0ThreadName);
    13401339    if (cchThreadName)
     
    37113710                    uint64_t u64 = RTTimeProgramMilliTS();
    37123711#else
    3713                     uint64_t u64 = (RTTimeNanoTS() - pLogger->pInt->nsR0ProgramStart) / 1000000;
     3712                    uint64_t u64 = (RTTimeNanoTS() - pLogger->pInt->nsR0ProgramStart) / RT_NS_1MS;
    37143713#endif
    37153714                    /* 1E8 milliseconds = 27 hours */
     
    37463745                    uint64_t u64 = RTTimeProgramMicroTS();
    37473746#else
    3748                     uint64_t u64 = (RTTimeNanoTS() - pLogger->pInt->nsR0ProgramStart) / 1000;
     3747                    uint64_t u64 = (RTTimeNanoTS() - pLogger->pInt->nsR0ProgramStart) / RT_NS_1US;
    37493748
    37503749#endif
  • trunk/src/VBox/Runtime/common/time/timeprog.cpp

    r69111 r72863  
    5656RTDECL(uint64_t)  RTTimeProgramMicroTS(void)
    5757{
    58     return RTTimeProgramNanoTS() / 1000;
     58    return RTTimeProgramNanoTS() / RT_NS_1US;
    5959}
    6060RT_EXPORT_SYMBOL(RTTimeProgramMicroTS);
     
    6868RTDECL(uint64_t)  RTTimeProgramMilliTS(void)
    6969{
    70     return RTTimeMilliTS() - g_u64ProgramStartMilliTS;
     70    return RTTimeProgramNanoTS() / RT_NS_1MS;
    7171}
    7272RT_EXPORT_SYMBOL(RTTimeProgramMilliTS);
     
    8080RTDECL(uint32_t)  RTTimeProgramSecTS(void)
    8181{
    82     AssertMsg(g_u64ProgramStartMilliTS, ("rtR3Init hasn't been called!\n"));
    83     return (uint32_t)(RTTimeProgramMilliTS() / 1000);
     82    return (uint32_t)(RTTimeProgramNanoTS() / RT_NS_1SEC);
    8483}
    8584RT_EXPORT_SYMBOL(RTTimeProgramSecTS);
  • trunk/src/VBox/Runtime/gc/initterm-gc.cpp

    r69111 r72863  
    4848uint64_t    g_u64ProgramStartNanoTS;
    4949
    50 /**
    51  * Program start microsecond TS.
    52  */
    53 uint64_t    g_u64ProgramStartMicroTS;
    54 
    55 /**
    56  * Program start millisecond TS.
    57  */
    58 uint64_t    g_u64ProgramStartMilliTS;
    59 
    6050
    6151/**
     
    7262     */
    7363    g_u64ProgramStartNanoTS = u64ProgramStartNanoTS;
    74     g_u64ProgramStartMicroTS = u64ProgramStartNanoTS / 1000;
    75     g_u64ProgramStartMilliTS = u64ProgramStartNanoTS / 1000000;
    7664
    7765    LogFlow(("RTGCInit: returns VINF_SUCCESS\n"));
  • trunk/src/VBox/Runtime/include/internal/time.h

    r69474 r72863  
    3535
    3636extern DECLHIDDEN(uint64_t) g_u64ProgramStartNanoTS;
    37 extern DECLHIDDEN(uint64_t) g_u64ProgramStartMicroTS;
    38 extern DECLHIDDEN(uint64_t) g_u64ProgramStartMilliTS;
    3937
    4038#endif
  • trunk/src/VBox/Runtime/r3/init.cpp

    r71282 r72863  
    107107 */
    108108DECLHIDDEN(uint64_t)        g_u64ProgramStartNanoTS;
    109 
    110 /**
    111  * Program start microsecond TS.
    112  */
    113 DECLHIDDEN(uint64_t)        g_u64ProgramStartMicroTS;
    114 
    115 /**
    116  * Program start millisecond TS.
    117  */
    118 DECLHIDDEN(uint64_t)        g_u64ProgramStartMilliTS;
    119109
    120110/**
     
    470460
    471461    /*
    472      * Init the program start TSes.
     462     * Init the program start timestamp TS.
    473463     * Do that here to be sure that the GIP time was properly updated the 1st time.
    474464     */
    475465    g_u64ProgramStartNanoTS = RTTimeNanoTS();
    476     g_u64ProgramStartMicroTS = g_u64ProgramStartNanoTS / 1000;
    477     g_u64ProgramStartMilliTS = g_u64ProgramStartNanoTS / 1000000;
    478466
    479467    /*
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette