8
8
#include " RecyclerTelemetryInfo.h"
9
9
#include " RecyclerWaitReason.h"
10
10
#include " Common/ObservableValue.h"
11
+ #include " CollectionFlags.h"
11
12
12
13
namespace Js
13
14
{
@@ -36,46 +37,6 @@ class ThreadContext;
36
37
37
38
namespace Memory
38
39
{
39
- // NOTE: There is perf lab test infrastructure that takes a dependency on the events in this enumeration. Any modifications may cause
40
- // errors in ETL analysis or report incorrect numbers. Please verify that the GC events are analyzed correctly with your changes.
41
- enum ETWEventGCActivationKind : unsigned
42
- {
43
- ETWEvent_GarbageCollect = 0 , // force in-thread GC
44
- ETWEvent_ThreadCollect = 1 , // thread GC with wait
45
- ETWEvent_ConcurrentCollect = 2 ,
46
- ETWEvent_PartialCollect = 3 ,
47
-
48
- ETWEvent_ConcurrentMark = 11 ,
49
- ETWEvent_ConcurrentRescan = 12 ,
50
- ETWEvent_ConcurrentSweep = 13 ,
51
- ETWEvent_ConcurrentTransferSwept = 14 ,
52
- ETWEvent_ConcurrentFinishMark = 15 ,
53
- ETWEvent_ConcurrentSweep_TwoPassSweepPreCheck = 16 , // Check whether we should do a 2-pass concurrent sweep.
54
-
55
- // The following events are only relevant to the 2-pass concurrent sweep and should not be seen otherwise.
56
- ETWEvent_ConcurrentSweep_Pass1 = 17 , // Concurrent sweep Pass1 of the blocks not getting allocated from during concurrent sweep.
57
- ETWEvent_ConcurrentSweep_FinishSweepPrep = 18 , // Stop allocations and remove all blocks from SLIST so we can finish Pass1 of the remaining blocks.
58
- ETWEvent_ConcurrentSweep_FinishPass1 = 19 , // Concurrent sweep Pass1 of the blocks that were set aside for allocations during concurrent sweep.
59
- ETWEvent_ConcurrentSweep_Pass2 = 20 , // Concurrent sweep Pass1 of the blocks not getting allocated from during concurrent sweep.
60
- ETWEvent_ConcurrentSweep_FinishTwoPassSweep = 21 , // Drain the SLIST at the end of the 2-pass concurrent sweep and begin normal allocations.
61
- };
62
-
63
- #define IS_UNKNOWN_GC_TRIGGER (v ) (v == ETWEvent_GC_Trigger_Unknown)
64
-
65
- enum ETWEventGCActivationTrigger : unsigned
66
- {
67
- ETWEvent_GC_Trigger_Unknown = 0 ,
68
- ETWEvent_GC_Trigger_IdleCollect = 1 ,
69
- ETWEvent_GC_Trigger_Partial_GC_AllocSize_Heuristic = 2 ,
70
- ETWEvent_GC_Trigger_TimeAndAllocSize_Heuristic = 3 ,
71
- ETWEvent_GC_Trigger_TimeAndAllocSizeIfScriptActive_Heuristic = 4 ,
72
- ETWEvent_GC_Trigger_TimeAndAllocSizeIfInScript_Heuristic = 5 ,
73
- ETWEvent_GC_Trigger_NoHeuristic = 6 ,
74
- ETWEvent_GC_Trigger_Status_Completed = 7 ,
75
- ETWEvent_GC_Trigger_Status_StartedConcurrent = 8 ,
76
- ETWEvent_GC_Trigger_Status_Failed = 9 ,
77
- ETWEvent_GC_Trigger_Status_FailedTimeout = 10
78
- };
79
40
80
41
template <typename T> class RecyclerRootPtr ;
81
42
@@ -342,86 +303,6 @@ class RecyclerWeakReferenceRegion {
342
303
343
304
typedef void (__cdecl* ExternalRootMarker)(void *);
344
305
345
- enum CollectionFlags
346
- {
347
- CollectHeuristic_AllocSize = 0x00000001 ,
348
- CollectHeuristic_Time = 0x00000002 ,
349
- CollectHeuristic_TimeIfScriptActive = 0x00000004 ,
350
- CollectHeuristic_TimeIfInScript = 0x00000008 ,
351
- CollectHeuristic_Never = 0x00000080 ,
352
- CollectHeuristic_Mask = 0x000000FF ,
353
-
354
- CollectOverride_FinishConcurrent = 0x00001000 ,
355
- CollectOverride_ExhaustiveCandidate = 0x00002000 ,
356
- CollectOverride_ForceInThread = 0x00004000 ,
357
- CollectOverride_AllowDispose = 0x00008000 ,
358
- CollectOverride_AllowReentrant = 0x00010000 ,
359
- CollectOverride_ForceFinish = 0x00020000 ,
360
- CollectOverride_Explicit = 0x00040000 ,
361
- CollectOverride_DisableIdleFinish = 0x00080000 ,
362
- CollectOverride_BackgroundFinishMark= 0x00100000 ,
363
- CollectOverride_FinishConcurrentTimeout = 0x00200000 ,
364
- CollectOverride_NoExhaustiveCollect = 0x00400000 ,
365
- CollectOverride_SkipStack = 0x01000000 ,
366
- CollectOverride_CheckScriptContextClose = 0x02000000 ,
367
- CollectMode_Partial = 0x08000000 ,
368
- CollectMode_Concurrent = 0x10000000 ,
369
- CollectMode_Exhaustive = 0x20000000 ,
370
- CollectMode_DecommitNow = 0x40000000 ,
371
- CollectMode_CacheCleanup = 0x80000000 ,
372
-
373
- CollectNowForceInThread = CollectOverride_ForceInThread,
374
- CollectNowForceInThreadExternal = CollectOverride_ForceInThread | CollectOverride_AllowDispose,
375
- CollectNowForceInThreadExternalNoStack = CollectOverride_ForceInThread | CollectOverride_AllowDispose | CollectOverride_SkipStack,
376
- CollectNowDefault = CollectOverride_FinishConcurrent,
377
- CollectNowDefaultLSCleanup = CollectOverride_FinishConcurrent | CollectOverride_AllowDispose,
378
- CollectNowDecommitNowExplicit = CollectNowDefault | CollectMode_DecommitNow | CollectMode_CacheCleanup | CollectOverride_Explicit | CollectOverride_AllowDispose,
379
- CollectNowConcurrent = CollectOverride_FinishConcurrent | CollectMode_Concurrent,
380
- CollectNowExhaustive = CollectOverride_FinishConcurrent | CollectMode_Exhaustive | CollectOverride_AllowDispose,
381
- CollectNowPartial = CollectOverride_FinishConcurrent | CollectMode_Partial,
382
- CollectNowConcurrentPartial = CollectMode_Concurrent | CollectNowPartial,
383
-
384
- CollectOnAllocation = CollectHeuristic_AllocSize | CollectHeuristic_Time | CollectMode_Concurrent | CollectMode_Partial | CollectOverride_FinishConcurrent | CollectOverride_AllowReentrant | CollectOverride_FinishConcurrentTimeout,
385
- CollectOnTypedArrayAllocation = CollectHeuristic_AllocSize | CollectHeuristic_Time | CollectMode_Concurrent | CollectMode_Partial | CollectOverride_FinishConcurrent | CollectOverride_AllowReentrant | CollectOverride_FinishConcurrentTimeout | CollectOverride_AllowDispose,
386
- CollectOnScriptIdle = CollectOverride_CheckScriptContextClose | CollectOverride_FinishConcurrent | CollectMode_Concurrent | CollectMode_CacheCleanup | CollectOverride_SkipStack,
387
- CollectOnScriptExit = CollectOverride_CheckScriptContextClose | CollectHeuristic_AllocSize | CollectOverride_FinishConcurrent | CollectMode_Concurrent | CollectMode_CacheCleanup,
388
- CollectExhaustiveCandidate = CollectHeuristic_Never | CollectOverride_ExhaustiveCandidate,
389
- CollectOnScriptCloseNonPrimary = CollectNowConcurrent | CollectOverride_ExhaustiveCandidate | CollectOverride_AllowDispose,
390
- CollectOnRecoverFromOutOfMemory = CollectOverride_ForceInThread | CollectMode_DecommitNow,
391
- CollectOnSuspendCleanup = CollectNowConcurrent | CollectMode_Exhaustive | CollectMode_DecommitNow | CollectOverride_DisableIdleFinish,
392
-
393
- FinishConcurrentOnIdle = CollectMode_Concurrent | CollectOverride_DisableIdleFinish,
394
- FinishConcurrentOnIdleAtRoot = CollectMode_Concurrent | CollectOverride_DisableIdleFinish | CollectOverride_SkipStack,
395
- FinishConcurrentDefault = CollectMode_Concurrent | CollectOverride_DisableIdleFinish | CollectOverride_BackgroundFinishMark,
396
- FinishConcurrentOnExitScript = FinishConcurrentDefault,
397
- FinishConcurrentOnEnterScript = FinishConcurrentDefault,
398
- FinishConcurrentOnAllocation = FinishConcurrentDefault,
399
- FinishDispose = CollectOverride_AllowDispose,
400
- FinishDisposeTimed = CollectOverride_AllowDispose | CollectHeuristic_TimeIfScriptActive,
401
- ForceFinishCollection = CollectOverride_ForceFinish | CollectOverride_ForceInThread,
402
-
403
- #ifdef RECYCLER_STRESS
404
- CollectStress = CollectNowForceInThread,
405
- #if ENABLE_PARTIAL_GC
406
- CollectPartialStress = CollectMode_Partial,
407
- #endif
408
- #if ENABLE_CONCURRENT_GC
409
- CollectBackgroundStress = CollectNowDefault,
410
- CollectConcurrentStress = CollectNowConcurrent,
411
- #if ENABLE_PARTIAL_GC
412
- CollectConcurrentPartialStress = CollectConcurrentStress | CollectPartialStress,
413
- #endif
414
- #endif
415
- #endif
416
-
417
- #if defined(CHECK_MEMORY_LEAK) || defined(LEAK_REPORT)
418
- CollectNowFinalGC = CollectNowExhaustive | CollectOverride_ForceInThread | CollectOverride_SkipStack | CollectOverride_Explicit | CollectOverride_AllowDispose,
419
- #endif
420
- #ifdef ENABLE_DEBUG_CONFIG_OPTIONS
421
- CollectNowExhaustiveSkipStack = CollectNowExhaustive | CollectOverride_SkipStack, // Used by test
422
- #endif
423
- };
424
-
425
306
class RecyclerCollectionWrapper
426
307
{
427
308
public:
@@ -814,9 +695,9 @@ class Recycler
814
695
};
815
696
816
697
#if defined(ENABLE_JS_ETW)
817
- uint collectionStartReason;
698
+ ETWEventGCActivationTrigger collectionStartReason;
818
699
CollectionFlags collectionStartFlags;
819
- uint collectionFinishReason;
700
+ ETWEventGCActivationTrigger collectionFinishReason;
820
701
#endif
821
702
822
703
class CollectionStateChangedObserver : public ObservableValueObserver <CollectionState>
@@ -834,11 +715,11 @@ class Recycler
834
715
#ifdef ENABLE_BASIC_TELEMETRY
835
716
if (oldVal == CollectionState::CollectionStateNotCollecting && newVal != CollectionState::CollectionStateNotCollecting && newVal != CollectionState::Collection_PreCollection)
836
717
{
837
- this ->recycler ->GetRecyclerTelemetryInfo ().StartPass ();
718
+ this ->recycler ->GetRecyclerTelemetryInfo ().StartPass (newVal );
838
719
}
839
720
else if (oldVal != CollectionState::CollectionStateNotCollecting && oldVal != CollectionState::Collection_PreCollection && newVal == CollectionState::CollectionStateNotCollecting)
840
721
{
841
- this ->recycler ->GetRecyclerTelemetryInfo ().EndPass ();
722
+ this ->recycler ->GetRecyclerTelemetryInfo ().EndPass (oldVal );
842
723
}
843
724
#endif
844
725
}
0 commit comments