mirror of
https://github.com/reactos/reactos.git
synced 2025-05-07 02:41:22 +00:00
- NtUserWaitForInputIdle: Call EngGetTickCount, removing duplicated code
- GetTickCount/GetTickCount64/EngGetTickCount: Use the correct SharedUserData fields, and fix the calculations - KeUpdateSystemTime: Don't update TickCountLowDeprecated now that it truly is deprecated - Thanks to Fireball and KJK! svn path=/trunk/; revision=38616
This commit is contained in:
parent
c92aee8772
commit
09cde7e355
5 changed files with 34 additions and 15 deletions
|
@ -578,7 +578,8 @@ DWORD
|
|||
WINAPI
|
||||
GetTickCount(VOID)
|
||||
{
|
||||
return (DWORD)((ULONGLONG)SharedUserData->TickCountLowDeprecated * SharedUserData->TickCountMultiplier / 16777216);
|
||||
/* Call the 64-bit version */
|
||||
return (DWORD)GetTickCount64();
|
||||
}
|
||||
|
||||
|
||||
|
@ -589,7 +590,25 @@ ULONGLONG
|
|||
WINAPI
|
||||
GetTickCount64(VOID)
|
||||
{
|
||||
return (ULONGLONG)SharedUserData->TickCountLowDeprecated * (ULONGLONG)SharedUserData->TickCountMultiplier / 16777216;
|
||||
ULONG Multiplier;
|
||||
LARGE_INTEGER TickCount;
|
||||
|
||||
/* Loop until we get a perfect match */
|
||||
for (;;)
|
||||
{
|
||||
/* Read the tick count value */
|
||||
TickCount.HighPart = SharedUserData->TickCount.High1Time;
|
||||
TickCount.LowPart = SharedUserData->TickCount.LowPart;
|
||||
if (TickCount.HighPart == SharedUserData->TickCount.High2Time) break;
|
||||
YieldProcessor();
|
||||
}
|
||||
|
||||
/* Get the multiplier */
|
||||
Multiplier = SharedUserData->TickCountMultiplier;
|
||||
|
||||
/* Convert to milliseconds and return */
|
||||
return (Int64ShrlMod32(UInt32x32To64(Multiplier, TickCount.LowPart), 24) +
|
||||
(Multiplier * (TickCount.HighPart << 8)));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -294,9 +294,6 @@ _KeUpdateSystemTime@0:
|
|||
mov ds:[USER_SHARED_DATA+USER_SHARED_DATA_TICK_COUNT], ecx
|
||||
mov ds:[USER_SHARED_DATA+USER_SHARED_DATA_TICK_COUNT+4], edx
|
||||
|
||||
/* FIXME: HACK */
|
||||
mov ds:[USER_SHARED_DATA], ecx
|
||||
|
||||
/* Get hand index and entry into the table */
|
||||
and eax, TIMER_TABLE_SIZE - 1
|
||||
shl eax, 4
|
||||
|
|
|
@ -349,9 +349,6 @@ KeUpdateSystemTime(IN PKTRAP_FRAME TrapFrame,
|
|||
SharedUserData->TickCount.LowPart = Time.LowPart;
|
||||
SharedUserData->TickCount.High1Time = Time.HighPart;
|
||||
|
||||
/* Update tick count in shared user data as well */
|
||||
SharedUserData->TickCountLowDeprecated++;
|
||||
|
||||
/* Queue a DPC that will expire timers */
|
||||
KeInsertQueueDpc(&KiExpireTimerDpc, 0, 0);
|
||||
}
|
||||
|
|
|
@ -2239,8 +2239,7 @@ NtUserWaitForInputIdle(
|
|||
return STATUS_SUCCESS; /* no event to wait on */
|
||||
}
|
||||
|
||||
StartTime = ((ULONGLONG)SharedUserData->TickCountLowDeprecated *
|
||||
SharedUserData->TickCountMultiplier / 16777216);
|
||||
StartTime = EngGetTickCount();
|
||||
|
||||
Run = dwMilliseconds;
|
||||
|
||||
|
@ -2294,9 +2293,7 @@ NtUserWaitForInputIdle(
|
|||
|
||||
if (dwMilliseconds != INFINITE)
|
||||
{
|
||||
Elapsed = ((ULONGLONG)SharedUserData->TickCountLowDeprecated *
|
||||
SharedUserData->TickCountMultiplier / 16777216)
|
||||
- StartTime;
|
||||
Elapsed = EngGetTickCount() - StartTime;
|
||||
|
||||
if (Elapsed > Run)
|
||||
Status = STATUS_TIMEOUT;
|
||||
|
|
|
@ -2888,12 +2888,21 @@ EngFreeSectionMem(IN PVOID SectionObject OPTIONAL,
|
|||
UNIMPLEMENTED;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
ULONGLONG
|
||||
APIENTRY
|
||||
EngGetTickCount(VOID)
|
||||
{
|
||||
return ((ULONGLONG)SharedUserData->TickCountLowDeprecated * SharedUserData->TickCountMultiplier / 16777216);
|
||||
ULONG Multiplier;
|
||||
LARGE_INTEGER TickCount;
|
||||
|
||||
/* Get the multiplier and current tick count */
|
||||
KeQueryTickCount(&TickCount);
|
||||
Multiplier = SharedUserData->TickCountMultiplier;
|
||||
|
||||
/* Convert to milliseconds and return */
|
||||
return (Int64ShrlMod32(UInt32x32To64(Multiplier, TickCount.LowPart), 24) +
|
||||
(Multiplier * (TickCount.HighPart << 8)));
|
||||
}
|
||||
|
||||
BOOLEAN
|
||||
|
|
Loading…
Reference in a new issue