mirror of
https://github.com/reactos/reactos.git
synced 2025-06-08 19:00:42 +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
reactos
dll/win32/kernel32/misc
ntoskrnl/ke
subsystems/win32/win32k
|
@ -578,7 +578,8 @@ DWORD
|
||||||
WINAPI
|
WINAPI
|
||||||
GetTickCount(VOID)
|
GetTickCount(VOID)
|
||||||
{
|
{
|
||||||
return (DWORD)((ULONGLONG)SharedUserData->TickCountLowDeprecated * SharedUserData->TickCountMultiplier / 16777216);
|
/* Call the 64-bit version */
|
||||||
|
return (DWORD)GetTickCount64();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -589,7 +590,25 @@ ULONGLONG
|
||||||
WINAPI
|
WINAPI
|
||||||
GetTickCount64(VOID)
|
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], ecx
|
||||||
mov ds:[USER_SHARED_DATA+USER_SHARED_DATA_TICK_COUNT+4], edx
|
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 */
|
/* Get hand index and entry into the table */
|
||||||
and eax, TIMER_TABLE_SIZE - 1
|
and eax, TIMER_TABLE_SIZE - 1
|
||||||
shl eax, 4
|
shl eax, 4
|
||||||
|
|
|
@ -349,9 +349,6 @@ KeUpdateSystemTime(IN PKTRAP_FRAME TrapFrame,
|
||||||
SharedUserData->TickCount.LowPart = Time.LowPart;
|
SharedUserData->TickCount.LowPart = Time.LowPart;
|
||||||
SharedUserData->TickCount.High1Time = Time.HighPart;
|
SharedUserData->TickCount.High1Time = Time.HighPart;
|
||||||
|
|
||||||
/* Update tick count in shared user data as well */
|
|
||||||
SharedUserData->TickCountLowDeprecated++;
|
|
||||||
|
|
||||||
/* Queue a DPC that will expire timers */
|
/* Queue a DPC that will expire timers */
|
||||||
KeInsertQueueDpc(&KiExpireTimerDpc, 0, 0);
|
KeInsertQueueDpc(&KiExpireTimerDpc, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2239,8 +2239,7 @@ NtUserWaitForInputIdle(
|
||||||
return STATUS_SUCCESS; /* no event to wait on */
|
return STATUS_SUCCESS; /* no event to wait on */
|
||||||
}
|
}
|
||||||
|
|
||||||
StartTime = ((ULONGLONG)SharedUserData->TickCountLowDeprecated *
|
StartTime = EngGetTickCount();
|
||||||
SharedUserData->TickCountMultiplier / 16777216);
|
|
||||||
|
|
||||||
Run = dwMilliseconds;
|
Run = dwMilliseconds;
|
||||||
|
|
||||||
|
@ -2294,9 +2293,7 @@ NtUserWaitForInputIdle(
|
||||||
|
|
||||||
if (dwMilliseconds != INFINITE)
|
if (dwMilliseconds != INFINITE)
|
||||||
{
|
{
|
||||||
Elapsed = ((ULONGLONG)SharedUserData->TickCountLowDeprecated *
|
Elapsed = EngGetTickCount() - StartTime;
|
||||||
SharedUserData->TickCountMultiplier / 16777216)
|
|
||||||
- StartTime;
|
|
||||||
|
|
||||||
if (Elapsed > Run)
|
if (Elapsed > Run)
|
||||||
Status = STATUS_TIMEOUT;
|
Status = STATUS_TIMEOUT;
|
||||||
|
|
|
@ -2893,7 +2893,16 @@ ULONGLONG
|
||||||
APIENTRY
|
APIENTRY
|
||||||
EngGetTickCount(VOID)
|
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
|
BOOLEAN
|
||||||
|
|
Loading…
Reference in a new issue