CollectionFlags.h 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. #pragma once
  6. namespace Memory
  7. {
  8. enum CollectionFlags
  9. {
  10. CollectHeuristic_AllocSize = 0x00000001,
  11. CollectHeuristic_Time = 0x00000002,
  12. CollectHeuristic_TimeIfScriptActive = 0x00000004,
  13. CollectHeuristic_TimeIfInScript = 0x00000008,
  14. CollectHeuristic_Never = 0x00000080,
  15. CollectHeuristic_Mask = 0x000000FF,
  16. CollectOverride_FinishConcurrent = 0x00001000,
  17. CollectOverride_ExhaustiveCandidate = 0x00002000,
  18. CollectOverride_ForceInThread = 0x00004000,
  19. CollectOverride_AllowDispose = 0x00008000,
  20. CollectOverride_AllowReentrant = 0x00010000,
  21. CollectOverride_ForceFinish = 0x00020000,
  22. CollectOverride_Explicit = 0x00040000,
  23. CollectOverride_DisableIdleFinish = 0x00080000,
  24. CollectOverride_BackgroundFinishMark= 0x00100000,
  25. CollectOverride_FinishConcurrentTimeout = 0x00200000,
  26. CollectOverride_NoExhaustiveCollect = 0x00400000,
  27. CollectOverride_SkipStack = 0x01000000,
  28. CollectOverride_CheckScriptContextClose = 0x02000000,
  29. CollectMode_Partial = 0x08000000,
  30. CollectMode_Concurrent = 0x10000000,
  31. CollectMode_Exhaustive = 0x20000000,
  32. CollectMode_DecommitNow = 0x40000000,
  33. CollectMode_CacheCleanup = 0x80000000,
  34. CollectNowForceInThread = CollectOverride_ForceInThread,
  35. CollectNowForceInThreadExternal = CollectOverride_ForceInThread | CollectOverride_AllowDispose,
  36. CollectNowForceInThreadExternalNoStack = CollectOverride_ForceInThread | CollectOverride_AllowDispose | CollectOverride_SkipStack,
  37. CollectNowForceInThreadExternalExhaustive = CollectOverride_ForceInThread | CollectOverride_AllowDispose | CollectMode_Exhaustive,
  38. CollectNowForceInThreadExternalExhaustiveNoStack = CollectOverride_ForceInThread | CollectOverride_AllowDispose | CollectMode_Exhaustive | CollectOverride_SkipStack,
  39. CollectNowDefault = CollectOverride_FinishConcurrent,
  40. CollectNowDefaultLSCleanup = CollectOverride_FinishConcurrent | CollectOverride_AllowDispose,
  41. CollectNowDecommitNowExplicit = CollectNowDefault | CollectMode_DecommitNow | CollectMode_CacheCleanup | CollectOverride_Explicit | CollectOverride_AllowDispose,
  42. CollectNowConcurrent = CollectOverride_FinishConcurrent | CollectMode_Concurrent,
  43. CollectNowExhaustive = CollectOverride_FinishConcurrent | CollectMode_Exhaustive | CollectOverride_AllowDispose,
  44. CollectNowPartial = CollectOverride_FinishConcurrent | CollectMode_Partial,
  45. CollectNowConcurrentPartial = CollectMode_Concurrent | CollectNowPartial,
  46. CollectOnAllocation = CollectHeuristic_AllocSize | CollectHeuristic_Time | CollectMode_Concurrent | CollectMode_Partial | CollectOverride_FinishConcurrent | CollectOverride_AllowReentrant | CollectOverride_FinishConcurrentTimeout,
  47. CollectOnTypedArrayAllocation = CollectHeuristic_AllocSize | CollectHeuristic_Time | CollectMode_Concurrent | CollectMode_Partial | CollectOverride_FinishConcurrent | CollectOverride_AllowReentrant | CollectOverride_FinishConcurrentTimeout | CollectOverride_AllowDispose,
  48. CollectOnScriptIdle = CollectOverride_CheckScriptContextClose | CollectOverride_FinishConcurrent | CollectMode_Concurrent | CollectMode_CacheCleanup | CollectOverride_SkipStack,
  49. CollectOnScriptExit = CollectOverride_CheckScriptContextClose | CollectHeuristic_AllocSize | CollectOverride_FinishConcurrent | CollectMode_Concurrent | CollectMode_CacheCleanup,
  50. CollectExhaustiveCandidate = CollectHeuristic_Never | CollectOverride_ExhaustiveCandidate,
  51. CollectOnScriptCloseNonPrimary = CollectNowConcurrent | CollectOverride_ExhaustiveCandidate | CollectOverride_AllowDispose,
  52. CollectOnRecoverFromOutOfMemory = CollectOverride_ForceInThread | CollectMode_DecommitNow,
  53. CollectOnSuspendCleanup = CollectNowConcurrent | CollectMode_Exhaustive | CollectMode_DecommitNow | CollectOverride_DisableIdleFinish,
  54. FinishConcurrentOnIdle = CollectMode_Concurrent | CollectOverride_DisableIdleFinish,
  55. FinishConcurrentOnIdleAtRoot = CollectMode_Concurrent | CollectOverride_DisableIdleFinish | CollectOverride_SkipStack,
  56. FinishConcurrentDefault = CollectMode_Concurrent | CollectOverride_DisableIdleFinish | CollectOverride_BackgroundFinishMark,
  57. FinishConcurrentOnExitScript = FinishConcurrentDefault,
  58. FinishConcurrentOnEnterScript = FinishConcurrentDefault,
  59. FinishConcurrentOnAllocation = FinishConcurrentDefault,
  60. FinishDispose = CollectOverride_AllowDispose,
  61. FinishDisposeTimed = CollectOverride_AllowDispose | CollectHeuristic_TimeIfScriptActive,
  62. ForceFinishCollection = CollectOverride_ForceFinish | CollectOverride_ForceInThread,
  63. #ifdef RECYCLER_STRESS
  64. CollectStress = CollectNowForceInThread,
  65. #if ENABLE_PARTIAL_GC
  66. CollectPartialStress = CollectMode_Partial,
  67. #endif
  68. #if ENABLE_CONCURRENT_GC
  69. CollectBackgroundStress = CollectNowDefault,
  70. CollectConcurrentStress = CollectNowConcurrent,
  71. #if ENABLE_PARTIAL_GC
  72. CollectConcurrentPartialStress = CollectConcurrentStress | CollectPartialStress,
  73. #endif
  74. #endif
  75. #endif
  76. #if defined(CHECK_MEMORY_LEAK) || defined(LEAK_REPORT)
  77. CollectNowFinalGC = CollectNowExhaustive | CollectOverride_ForceInThread | CollectOverride_SkipStack | CollectOverride_Explicit | CollectOverride_AllowDispose,
  78. #endif
  79. #ifdef ENABLE_DEBUG_CONFIG_OPTIONS
  80. CollectNowExhaustiveSkipStack = CollectNowExhaustive | CollectOverride_SkipStack, // Used by test
  81. #endif
  82. };
  83. // NOTE: There is perf lab test infrastructure that takes a dependency on the events in this enumeration. Any modifications may cause
  84. // errors in ETL analysis or report incorrect numbers. Please verify that the GC events are analyzed correctly with your changes.
  85. enum ETWEventGCActivationKind : unsigned
  86. {
  87. ETWEvent_GarbageCollect = 0, // force in-thread GC
  88. ETWEvent_ThreadCollect = 1, // thread GC with wait
  89. ETWEvent_ConcurrentCollect = 2,
  90. ETWEvent_PartialCollect = 3,
  91. ETWEvent_ConcurrentMark = 11,
  92. ETWEvent_ConcurrentRescan = 12,
  93. ETWEvent_ConcurrentSweep = 13,
  94. ETWEvent_ConcurrentTransferSwept = 14,
  95. ETWEvent_ConcurrentFinishMark = 15,
  96. ETWEvent_ConcurrentSweep_TwoPassSweepPreCheck = 16, // Check whether we should do a 2-pass concurrent sweep.
  97. // The following events are only relevant to the 2-pass concurrent sweep and should not be seen otherwise.
  98. ETWEvent_ConcurrentSweep_Pass1 = 17, // Concurrent sweep Pass1 of the blocks not getting allocated from during concurrent sweep.
  99. ETWEvent_ConcurrentSweep_FinishSweepPrep = 18, // Stop allocations and remove all blocks from SLIST so we can finish Pass1 of the remaining blocks.
  100. ETWEvent_ConcurrentSweep_FinishPass1 = 19, // Concurrent sweep Pass1 of the blocks that were set aside for allocations during concurrent sweep.
  101. ETWEvent_ConcurrentSweep_Pass2 = 20, // Concurrent sweep Pass1 of the blocks not getting allocated from during concurrent sweep.
  102. ETWEvent_ConcurrentSweep_FinishTwoPassSweep = 21, // Drain the SLIST at the end of the 2-pass concurrent sweep and begin normal allocations.
  103. };
  104. #define IS_UNKNOWN_GC_TRIGGER(v) (v == ETWEvent_GC_Trigger_Unknown)
  105. enum ETWEventGCActivationTrigger : unsigned
  106. {
  107. ETWEvent_GC_Trigger_Unknown = 0,
  108. ETWEvent_GC_Trigger_IdleCollect = 1,
  109. ETWEvent_GC_Trigger_Partial_GC_AllocSize_Heuristic = 2,
  110. ETWEvent_GC_Trigger_TimeAndAllocSize_Heuristic = 3,
  111. ETWEvent_GC_Trigger_TimeAndAllocSizeIfScriptActive_Heuristic = 4,
  112. ETWEvent_GC_Trigger_TimeAndAllocSizeIfInScript_Heuristic = 5,
  113. ETWEvent_GC_Trigger_NoHeuristic = 6,
  114. ETWEvent_GC_Trigger_Status_Completed = 7,
  115. ETWEvent_GC_Trigger_Status_StartedConcurrent = 8,
  116. ETWEvent_GC_Trigger_Status_Failed = 9,
  117. ETWEvent_GC_Trigger_Status_FailedTimeout = 10
  118. };
  119. }