1 //===-- tsan_stat.h ---------------------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file is a part of ThreadSanitizer (TSan), a race detector.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef TSAN_STAT_H
15 #define TSAN_STAT_H
16 
17 namespace __tsan {
18 
19 enum StatType {
20   // Memory access processing related stuff.
21   StatMop,
22   StatMopRead,
23   StatMopWrite,
24   StatMop1,  // These must be consequtive.
25   StatMop2,
26   StatMop4,
27   StatMop8,
28   StatMopSame,
29   StatMopIgnored,
30   StatMopRange,
31   StatMopRodata,
32   StatMopRangeRodata,
33   StatShadowProcessed,
34   StatShadowZero,
35   StatShadowNonZero,  // Derived.
36   StatShadowSameSize,
37   StatShadowIntersect,
38   StatShadowNotIntersect,
39   StatShadowSameThread,
40   StatShadowAnotherThread,
41   StatShadowReplace,
42 
43   // Func processing.
44   StatFuncEnter,
45   StatFuncExit,
46 
47   // Trace processing.
48   StatEvents,
49 
50   // Threads.
51   StatThreadCreate,
52   StatThreadFinish,
53   StatThreadReuse,
54   StatThreadMaxTid,
55   StatThreadMaxAlive,
56 
57   // Mutexes.
58   StatMutexCreate,
59   StatMutexDestroy,
60   StatMutexLock,
61   StatMutexUnlock,
62   StatMutexRecLock,
63   StatMutexRecUnlock,
64   StatMutexReadLock,
65   StatMutexReadUnlock,
66 
67   // Synchronization.
68   StatSyncCreated,
69   StatSyncDestroyed,
70   StatSyncAcquire,
71   StatSyncRelease,
72 
73   // Clocks - acquire.
74   StatClockAcquire,
75   StatClockAcquireEmpty,
76   StatClockAcquireFastRelease,
77   StatClockAcquireLarge,
78   StatClockAcquireRepeat,
79   StatClockAcquireFull,
80   StatClockAcquiredSomething,
81   // Clocks - release.
82   StatClockRelease,
83   StatClockReleaseResize,
84   StatClockReleaseFast1,
85   StatClockReleaseFast2,
86   StatClockReleaseSlow,
87   StatClockReleaseFull,
88   StatClockReleaseAcquired,
89   StatClockReleaseClearTail,
90   // Clocks - release store.
91   StatClockStore,
92   StatClockStoreResize,
93   StatClockStoreFast,
94   StatClockStoreFull,
95   StatClockStoreTail,
96   // Clocks - acquire-release.
97   StatClockAcquireRelease,
98 
99   // Atomics.
100   StatAtomic,
101   StatAtomicLoad,
102   StatAtomicStore,
103   StatAtomicExchange,
104   StatAtomicFetchAdd,
105   StatAtomicFetchSub,
106   StatAtomicFetchAnd,
107   StatAtomicFetchOr,
108   StatAtomicFetchXor,
109   StatAtomicFetchNand,
110   StatAtomicCAS,
111   StatAtomicFence,
112   StatAtomicRelaxed,
113   StatAtomicConsume,
114   StatAtomicAcquire,
115   StatAtomicRelease,
116   StatAtomicAcq_Rel,
117   StatAtomicSeq_Cst,
118   StatAtomic1,
119   StatAtomic2,
120   StatAtomic4,
121   StatAtomic8,
122   StatAtomic16,
123 
124   // Dynamic annotations.
125   StatAnnotation,
126   StatAnnotateHappensBefore,
127   StatAnnotateHappensAfter,
128   StatAnnotateCondVarSignal,
129   StatAnnotateCondVarSignalAll,
130   StatAnnotateMutexIsNotPHB,
131   StatAnnotateCondVarWait,
132   StatAnnotateRWLockCreate,
133   StatAnnotateRWLockCreateStatic,
134   StatAnnotateRWLockDestroy,
135   StatAnnotateRWLockAcquired,
136   StatAnnotateRWLockReleased,
137   StatAnnotateTraceMemory,
138   StatAnnotateFlushState,
139   StatAnnotateNewMemory,
140   StatAnnotateNoOp,
141   StatAnnotateFlushExpectedRaces,
142   StatAnnotateEnableRaceDetection,
143   StatAnnotateMutexIsUsedAsCondVar,
144   StatAnnotatePCQGet,
145   StatAnnotatePCQPut,
146   StatAnnotatePCQDestroy,
147   StatAnnotatePCQCreate,
148   StatAnnotateExpectRace,
149   StatAnnotateBenignRaceSized,
150   StatAnnotateBenignRace,
151   StatAnnotateIgnoreReadsBegin,
152   StatAnnotateIgnoreReadsEnd,
153   StatAnnotateIgnoreWritesBegin,
154   StatAnnotateIgnoreWritesEnd,
155   StatAnnotateIgnoreSyncBegin,
156   StatAnnotateIgnoreSyncEnd,
157   StatAnnotatePublishMemoryRange,
158   StatAnnotateUnpublishMemoryRange,
159   StatAnnotateThreadName,
160 
161   // Internal mutex contentionz.
162   StatMtxTotal,
163   StatMtxTrace,
164   StatMtxThreads,
165   StatMtxReport,
166   StatMtxSyncVar,
167   StatMtxSyncTab,
168   StatMtxSlab,
169   StatMtxAnnotations,
170   StatMtxAtExit,
171   StatMtxMBlock,
172   StatMtxJavaMBlock,
173   StatMtxDeadlockDetector,
174   StatMtxFD,
175 
176   // This must be the last.
177   StatCnt
178 };
179 
180 }  // namespace __tsan
181 
182 #endif  // TSAN_STAT_H
183