summaryrefslogtreecommitdiff
path: root/src/vm/tieredcompilation.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/vm/tieredcompilation.h')
-rw-r--r--src/vm/tieredcompilation.h18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/vm/tieredcompilation.h b/src/vm/tieredcompilation.h
index 9f6187244a..95dbb741fc 100644
--- a/src/vm/tieredcompilation.h
+++ b/src/vm/tieredcompilation.h
@@ -25,7 +25,12 @@ public:
#endif
void Init(ADID appDomainId);
- BOOL OnMethodCalled(MethodDesc* pMethodDesc, DWORD currentCallCount);
+
+ void InitiateTier1CountingDelay();
+ void OnTier0JitInvoked();
+
+ void OnMethodCalled(MethodDesc* pMethodDesc, DWORD currentCallCount, BOOL* shouldStopCountingCallsRef, BOOL* wasPromotedToTier1Ref);
+ void OnMethodCallCountingStoppedWithoutTier1Promotion(MethodDesc* pMethodDesc);
void AsyncPromoteMethodToTier1(MethodDesc* pMethodDesc);
static void ShutdownAllDomains();
void Shutdown(BOOL fBlockUntilAsyncWorkIsComplete);
@@ -33,6 +38,11 @@ public:
private:
+ static VOID WINAPI Tier1DelayTimerCallback(PVOID parameter, BOOLEAN timerFired);
+ static void Tier1DelayTimerCallbackInAppDomain(LPVOID parameter);
+ void Tier1DelayTimerCallbackWorker();
+ static void ResumeCountingCalls(MethodDesc* pMethodDesc);
+
static DWORD StaticOptimizeMethodsCallback(void* args);
void OptimizeMethodsCallback();
void OptimizeMethod(NativeCodeVersion nativeCodeVersion);
@@ -50,6 +60,12 @@ private:
DWORD m_countOptimizationThreadsRunning;
DWORD m_callCountOptimizationThreshhold;
DWORD m_optimizationQuantumMs;
+
+ SpinLock m_tier1CountingDelayLock;
+ SArray<MethodDesc*>* m_methodsPendingCountingForTier1;
+ HANDLE m_tier1CountingDelayTimerHandle;
+ bool m_wasTier0JitInvokedSinceCountingDelayReset;
+
CLREvent m_asyncWorkDoneEvent;
};