| //------------------------------------------------------------------------------------------------------- |
| // Copyright (C) Microsoft. All rights reserved. |
| // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. |
| //------------------------------------------------------------------------------------------------------- |
| #include "JsrtPch.h" |
| #include "JsrtThreadService.h" |
| |
| // |
| // JsrtThreadService |
| // |
| |
| JsrtThreadService::JsrtThreadService() : |
| ThreadServiceWrapperBase(), |
| nextIdleTick(UINT_MAX) |
| { |
| } |
| |
| JsrtThreadService::~JsrtThreadService() |
| { |
| Shutdown(); |
| } |
| |
| bool JsrtThreadService::Initialize(ThreadContext *threadContext) |
| { |
| return ThreadServiceWrapperBase::Initialize(threadContext); |
| } |
| |
| unsigned int JsrtThreadService::Idle() |
| { |
| unsigned int currentTicks = GetTickCount(); |
| |
| if (currentTicks >= nextIdleTick) |
| { |
| IdleCollect(); |
| } |
| |
| return nextIdleTick; |
| } |
| |
| bool JsrtThreadService::OnScheduleIdleCollect(uint ticks, bool /* canScheduleAsTask */) |
| { |
| nextIdleTick = GetTickCount() + ticks; |
| return true; |
| } |
| |
| bool JsrtThreadService::ShouldFinishConcurrentCollectOnIdleCallback() |
| { |
| // For the JsrtThreadService, there is no idle task host |
| // so we should always try to finish concurrent on entering |
| // the idle callback |
| return true; |
| } |
| |
| void JsrtThreadService::OnFinishIdleCollect() |
| { |
| nextIdleTick = UINT_MAX; |
| } |