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