The open source OpenXR runtime
1#ifndef __TRACYQUEUE_HPP__
2#define __TRACYQUEUE_HPP__
3
4#include <stddef.h>
5#include <stdint.h>
6
7namespace tracy
8{
9
10enum class QueueType : uint8_t
11{
12 ZoneText,
13 ZoneName,
14 Message,
15 MessageColor,
16 MessageCallstack,
17 MessageColorCallstack,
18 MessageAppInfo,
19 ZoneBeginAllocSrcLoc,
20 ZoneBeginAllocSrcLocCallstack,
21 CallstackSerial,
22 Callstack,
23 CallstackAlloc,
24 CallstackSample,
25 CallstackSampleContextSwitch,
26 FrameImage,
27 ZoneBegin,
28 ZoneBeginCallstack,
29 ZoneEnd,
30 LockWait,
31 LockObtain,
32 LockRelease,
33 LockSharedWait,
34 LockSharedObtain,
35 LockSharedRelease,
36 LockName,
37 MemAlloc,
38 MemAllocNamed,
39 MemFree,
40 MemFreeNamed,
41 MemAllocCallstack,
42 MemAllocCallstackNamed,
43 MemFreeCallstack,
44 MemFreeCallstackNamed,
45 GpuZoneBegin,
46 GpuZoneBeginCallstack,
47 GpuZoneBeginAllocSrcLoc,
48 GpuZoneBeginAllocSrcLocCallstack,
49 GpuZoneEnd,
50 GpuZoneBeginSerial,
51 GpuZoneBeginCallstackSerial,
52 GpuZoneBeginAllocSrcLocSerial,
53 GpuZoneBeginAllocSrcLocCallstackSerial,
54 GpuZoneEndSerial,
55 PlotDataInt,
56 PlotDataFloat,
57 PlotDataDouble,
58 ContextSwitch,
59 ThreadWakeup,
60 GpuTime,
61 GpuContextName,
62 CallstackFrameSize,
63 SymbolInformation,
64 ExternalNameMetadata,
65 SymbolCodeMetadata,
66 SourceCodeMetadata,
67 FiberEnter,
68 FiberLeave,
69 Terminate,
70 KeepAlive,
71 ThreadContext,
72 GpuCalibration,
73 Crash,
74 CrashReport,
75 ZoneValidation,
76 ZoneColor,
77 ZoneValue,
78 FrameMarkMsg,
79 FrameMarkMsgStart,
80 FrameMarkMsgEnd,
81 FrameVsync,
82 SourceLocation,
83 LockAnnounce,
84 LockTerminate,
85 LockMark,
86 MessageLiteral,
87 MessageLiteralColor,
88 MessageLiteralCallstack,
89 MessageLiteralColorCallstack,
90 GpuNewContext,
91 CallstackFrame,
92 SysTimeReport,
93 TidToPid,
94 HwSampleCpuCycle,
95 HwSampleInstructionRetired,
96 HwSampleCacheReference,
97 HwSampleCacheMiss,
98 HwSampleBranchRetired,
99 HwSampleBranchMiss,
100 PlotConfig,
101 ParamSetup,
102 AckServerQueryNoop,
103 AckSourceCodeNotAvailable,
104 AckSymbolCodeNotAvailable,
105 CpuTopology,
106 SingleStringData,
107 SecondStringData,
108 MemNamePayload,
109 StringData,
110 ThreadName,
111 PlotName,
112 SourceLocationPayload,
113 CallstackPayload,
114 CallstackAllocPayload,
115 FrameName,
116 FrameImageData,
117 ExternalName,
118 ExternalThreadName,
119 SymbolCode,
120 SourceCode,
121 FiberName,
122 NUM_TYPES
123};
124
125#pragma pack( push, 1 )
126
127struct QueueThreadContext
128{
129 uint32_t thread;
130};
131
132struct QueueZoneBeginLean
133{
134 int64_t time;
135};
136
137struct QueueZoneBegin : public QueueZoneBeginLean
138{
139 uint64_t srcloc; // ptr
140};
141
142struct QueueZoneBeginThread : public QueueZoneBegin
143{
144 uint32_t thread;
145};
146
147struct QueueZoneEnd
148{
149 int64_t time;
150};
151
152struct QueueZoneEndThread : public QueueZoneEnd
153{
154 uint32_t thread;
155};
156
157struct QueueZoneValidation
158{
159 uint32_t id;
160};
161
162struct QueueZoneValidationThread : public QueueZoneValidation
163{
164 uint32_t thread;
165};
166
167struct QueueZoneColor
168{
169 uint8_t b;
170 uint8_t g;
171 uint8_t r;
172};
173
174struct QueueZoneColorThread : public QueueZoneColor
175{
176 uint32_t thread;
177};
178
179struct QueueZoneValue
180{
181 uint64_t value;
182};
183
184struct QueueZoneValueThread : public QueueZoneValue
185{
186 uint32_t thread;
187};
188
189struct QueueStringTransfer
190{
191 uint64_t ptr;
192};
193
194struct QueueFrameMark
195{
196 int64_t time;
197 uint64_t name; // ptr
198};
199
200struct QueueFrameVsync
201{
202 int64_t time;
203 uint32_t id;
204};
205
206struct QueueFrameImage
207{
208 uint32_t frame;
209 uint16_t w;
210 uint16_t h;
211 uint8_t flip;
212};
213
214struct QueueFrameImageFat : public QueueFrameImage
215{
216 uint64_t image; // ptr
217};
218
219struct QueueSourceLocation
220{
221 uint64_t name;
222 uint64_t function; // ptr
223 uint64_t file; // ptr
224 uint32_t line;
225 uint8_t b;
226 uint8_t g;
227 uint8_t r;
228};
229
230struct QueueZoneTextFat
231{
232 uint64_t text; // ptr
233 uint16_t size;
234};
235
236struct QueueZoneTextFatThread : public QueueZoneTextFat
237{
238 uint32_t thread;
239};
240
241enum class LockType : uint8_t
242{
243 Lockable,
244 SharedLockable
245};
246
247struct QueueLockAnnounce
248{
249 uint32_t id;
250 int64_t time;
251 uint64_t lckloc; // ptr
252 LockType type;
253};
254
255struct QueueFiberEnter
256{
257 int64_t time;
258 uint64_t fiber; // ptr
259 uint32_t thread;
260};
261
262struct QueueFiberLeave
263{
264 int64_t time;
265 uint32_t thread;
266};
267
268struct QueueLockTerminate
269{
270 uint32_t id;
271 int64_t time;
272};
273
274struct QueueLockWait
275{
276 uint32_t thread;
277 uint32_t id;
278 int64_t time;
279};
280
281struct QueueLockObtain
282{
283 uint32_t thread;
284 uint32_t id;
285 int64_t time;
286};
287
288struct QueueLockRelease
289{
290 uint32_t id;
291 int64_t time;
292};
293
294struct QueueLockReleaseShared : public QueueLockRelease
295{
296 uint32_t thread;
297};
298
299struct QueueLockMark
300{
301 uint32_t thread;
302 uint32_t id;
303 uint64_t srcloc; // ptr
304};
305
306struct QueueLockName
307{
308 uint32_t id;
309};
310
311struct QueueLockNameFat : public QueueLockName
312{
313 uint64_t name; // ptr
314 uint16_t size;
315};
316
317struct QueuePlotDataBase
318{
319 uint64_t name; // ptr
320 int64_t time;
321};
322
323struct QueuePlotDataInt : public QueuePlotDataBase
324{
325 int64_t val;
326};
327
328struct QueuePlotDataFloat : public QueuePlotDataBase
329{
330 float val;
331};
332
333struct QueuePlotDataDouble : public QueuePlotDataBase
334{
335 double val;
336};
337
338struct QueueMessage
339{
340 int64_t time;
341};
342
343struct QueueMessageColor : public QueueMessage
344{
345 uint8_t b;
346 uint8_t g;
347 uint8_t r;
348};
349
350struct QueueMessageLiteral : public QueueMessage
351{
352 uint64_t text; // ptr
353};
354
355struct QueueMessageLiteralThread : public QueueMessageLiteral
356{
357 uint32_t thread;
358};
359
360struct QueueMessageColorLiteral : public QueueMessageColor
361{
362 uint64_t text; // ptr
363};
364
365struct QueueMessageColorLiteralThread : public QueueMessageColorLiteral
366{
367 uint32_t thread;
368};
369
370struct QueueMessageFat : public QueueMessage
371{
372 uint64_t text; // ptr
373 uint16_t size;
374};
375
376struct QueueMessageFatThread : public QueueMessageFat
377{
378 uint32_t thread;
379};
380
381struct QueueMessageColorFat : public QueueMessageColor
382{
383 uint64_t text; // ptr
384 uint16_t size;
385};
386
387struct QueueMessageColorFatThread : public QueueMessageColorFat
388{
389 uint32_t thread;
390};
391
392// Don't change order, only add new entries at the end, this is also used on trace dumps!
393enum class GpuContextType : uint8_t
394{
395 Invalid,
396 OpenGl,
397 Vulkan,
398 OpenCL,
399 Direct3D12,
400 Direct3D11
401};
402
403enum GpuContextFlags : uint8_t
404{
405 GpuContextCalibration = 1 << 0
406};
407
408struct QueueGpuNewContext
409{
410 int64_t cpuTime;
411 int64_t gpuTime;
412 uint32_t thread;
413 float period;
414 uint8_t context;
415 GpuContextFlags flags;
416 GpuContextType type;
417};
418
419struct QueueGpuZoneBeginLean
420{
421 int64_t cpuTime;
422 uint32_t thread;
423 uint16_t queryId;
424 uint8_t context;
425};
426
427struct QueueGpuZoneBegin : public QueueGpuZoneBeginLean
428{
429 uint64_t srcloc;
430};
431
432struct QueueGpuZoneEnd
433{
434 int64_t cpuTime;
435 uint32_t thread;
436 uint16_t queryId;
437 uint8_t context;
438};
439
440struct QueueGpuTime
441{
442 int64_t gpuTime;
443 uint16_t queryId;
444 uint8_t context;
445};
446
447struct QueueGpuCalibration
448{
449 int64_t gpuTime;
450 int64_t cpuTime;
451 int64_t cpuDelta;
452 uint8_t context;
453};
454
455struct QueueGpuContextName
456{
457 uint8_t context;
458};
459
460struct QueueGpuContextNameFat : public QueueGpuContextName
461{
462 uint64_t ptr;
463 uint16_t size;
464};
465
466struct QueueMemNamePayload
467{
468 uint64_t name;
469};
470
471struct QueueMemAlloc
472{
473 int64_t time;
474 uint32_t thread;
475 uint64_t ptr;
476 char size[6];
477};
478
479struct QueueMemFree
480{
481 int64_t time;
482 uint32_t thread;
483 uint64_t ptr;
484};
485
486struct QueueCallstackFat
487{
488 uint64_t ptr;
489};
490
491struct QueueCallstackFatThread : public QueueCallstackFat
492{
493 uint32_t thread;
494};
495
496struct QueueCallstackAllocFat
497{
498 uint64_t ptr;
499 uint64_t nativePtr;
500};
501
502struct QueueCallstackAllocFatThread : public QueueCallstackAllocFat
503{
504 uint32_t thread;
505};
506
507struct QueueCallstackSample
508{
509 int64_t time;
510 uint32_t thread;
511};
512
513struct QueueCallstackSampleFat : public QueueCallstackSample
514{
515 uint64_t ptr;
516};
517
518struct QueueCallstackFrameSize
519{
520 uint64_t ptr;
521 uint8_t size;
522};
523
524struct QueueCallstackFrameSizeFat : public QueueCallstackFrameSize
525{
526 uint64_t data;
527 uint64_t imageName;
528};
529
530struct QueueCallstackFrame
531{
532 uint32_t line;
533 uint64_t symAddr;
534 uint32_t symLen;
535};
536
537struct QueueSymbolInformation
538{
539 uint32_t line;
540 uint64_t symAddr;
541};
542
543struct QueueSymbolInformationFat : public QueueSymbolInformation
544{
545 uint64_t fileString;
546 uint8_t needFree;
547};
548
549struct QueueCrashReport
550{
551 int64_t time;
552 uint64_t text; // ptr
553};
554
555struct QueueCrashReportThread
556{
557 uint32_t thread;
558};
559
560struct QueueSysTime
561{
562 int64_t time;
563 float sysTime;
564};
565
566struct QueueContextSwitch
567{
568 int64_t time;
569 uint32_t oldThread;
570 uint32_t newThread;
571 uint8_t cpu;
572 uint8_t reason;
573 uint8_t state;
574};
575
576struct QueueThreadWakeup
577{
578 int64_t time;
579 uint32_t thread;
580};
581
582struct QueueTidToPid
583{
584 uint64_t tid;
585 uint64_t pid;
586};
587
588struct QueueHwSample
589{
590 uint64_t ip;
591 int64_t time;
592};
593
594enum class PlotFormatType : uint8_t
595{
596 Number,
597 Memory,
598 Percentage
599};
600
601struct QueuePlotConfig
602{
603 uint64_t name; // ptr
604 uint8_t type;
605 uint8_t step;
606 uint8_t fill;
607 uint32_t color;
608};
609
610struct QueueParamSetup
611{
612 uint32_t idx;
613 uint64_t name; // ptr
614 uint8_t isBool;
615 int32_t val;
616};
617
618struct QueueSourceCodeNotAvailable
619{
620 uint32_t id;
621};
622
623struct QueueCpuTopology
624{
625 uint32_t package;
626 uint32_t core;
627 uint32_t thread;
628};
629
630struct QueueExternalNameMetadata
631{
632 uint64_t thread;
633 uint64_t name;
634 uint64_t threadName;
635};
636
637struct QueueSymbolCodeMetadata
638{
639 uint64_t symbol;
640 uint64_t ptr;
641 uint32_t size;
642};
643
644struct QueueSourceCodeMetadata
645{
646 uint64_t ptr;
647 uint32_t size;
648 uint32_t id;
649};
650
651struct QueueHeader
652{
653 union
654 {
655 QueueType type;
656 uint8_t idx;
657 };
658};
659
660struct QueueItem
661{
662 QueueHeader hdr;
663 union
664 {
665 QueueThreadContext threadCtx;
666 QueueZoneBegin zoneBegin;
667 QueueZoneBeginLean zoneBeginLean;
668 QueueZoneBeginThread zoneBeginThread;
669 QueueZoneEnd zoneEnd;
670 QueueZoneEndThread zoneEndThread;
671 QueueZoneValidation zoneValidation;
672 QueueZoneValidationThread zoneValidationThread;
673 QueueZoneColor zoneColor;
674 QueueZoneColorThread zoneColorThread;
675 QueueZoneValue zoneValue;
676 QueueZoneValueThread zoneValueThread;
677 QueueStringTransfer stringTransfer;
678 QueueFrameMark frameMark;
679 QueueFrameVsync frameVsync;
680 QueueFrameImage frameImage;
681 QueueFrameImageFat frameImageFat;
682 QueueSourceLocation srcloc;
683 QueueZoneTextFat zoneTextFat;
684 QueueZoneTextFatThread zoneTextFatThread;
685 QueueLockAnnounce lockAnnounce;
686 QueueLockTerminate lockTerminate;
687 QueueLockWait lockWait;
688 QueueLockObtain lockObtain;
689 QueueLockRelease lockRelease;
690 QueueLockReleaseShared lockReleaseShared;
691 QueueLockMark lockMark;
692 QueueLockName lockName;
693 QueueLockNameFat lockNameFat;
694 QueuePlotDataInt plotDataInt;
695 QueuePlotDataFloat plotDataFloat;
696 QueuePlotDataDouble plotDataDouble;
697 QueueMessage message;
698 QueueMessageColor messageColor;
699 QueueMessageLiteral messageLiteral;
700 QueueMessageLiteralThread messageLiteralThread;
701 QueueMessageColorLiteral messageColorLiteral;
702 QueueMessageColorLiteralThread messageColorLiteralThread;
703 QueueMessageFat messageFat;
704 QueueMessageFatThread messageFatThread;
705 QueueMessageColorFat messageColorFat;
706 QueueMessageColorFatThread messageColorFatThread;
707 QueueGpuNewContext gpuNewContext;
708 QueueGpuZoneBegin gpuZoneBegin;
709 QueueGpuZoneBeginLean gpuZoneBeginLean;
710 QueueGpuZoneEnd gpuZoneEnd;
711 QueueGpuTime gpuTime;
712 QueueGpuCalibration gpuCalibration;
713 QueueGpuContextName gpuContextName;
714 QueueGpuContextNameFat gpuContextNameFat;
715 QueueMemAlloc memAlloc;
716 QueueMemFree memFree;
717 QueueMemNamePayload memName;
718 QueueCallstackFat callstackFat;
719 QueueCallstackFatThread callstackFatThread;
720 QueueCallstackAllocFat callstackAllocFat;
721 QueueCallstackAllocFatThread callstackAllocFatThread;
722 QueueCallstackSample callstackSample;
723 QueueCallstackSampleFat callstackSampleFat;
724 QueueCallstackFrameSize callstackFrameSize;
725 QueueCallstackFrameSizeFat callstackFrameSizeFat;
726 QueueCallstackFrame callstackFrame;
727 QueueSymbolInformation symbolInformation;
728 QueueSymbolInformationFat symbolInformationFat;
729 QueueCrashReport crashReport;
730 QueueCrashReportThread crashReportThread;
731 QueueSysTime sysTime;
732 QueueContextSwitch contextSwitch;
733 QueueThreadWakeup threadWakeup;
734 QueueTidToPid tidToPid;
735 QueueHwSample hwSample;
736 QueuePlotConfig plotConfig;
737 QueueParamSetup paramSetup;
738 QueueCpuTopology cpuTopology;
739 QueueExternalNameMetadata externalNameMetadata;
740 QueueSymbolCodeMetadata symbolCodeMetadata;
741 QueueSourceCodeMetadata sourceCodeMetadata;
742 QueueSourceCodeNotAvailable sourceCodeNotAvailable;
743 QueueFiberEnter fiberEnter;
744 QueueFiberLeave fiberLeave;
745 };
746};
747#pragma pack( pop )
748
749
750enum { QueueItemSize = sizeof( QueueItem ) };
751
752static constexpr size_t QueueDataSize[] = {
753 sizeof( QueueHeader ), // zone text
754 sizeof( QueueHeader ), // zone name
755 sizeof( QueueHeader ) + sizeof( QueueMessage ),
756 sizeof( QueueHeader ) + sizeof( QueueMessageColor ),
757 sizeof( QueueHeader ) + sizeof( QueueMessage ), // callstack
758 sizeof( QueueHeader ) + sizeof( QueueMessageColor ), // callstack
759 sizeof( QueueHeader ) + sizeof( QueueMessage ), // app info
760 sizeof( QueueHeader ) + sizeof( QueueZoneBeginLean ), // allocated source location
761 sizeof( QueueHeader ) + sizeof( QueueZoneBeginLean ), // allocated source location, callstack
762 sizeof( QueueHeader ), // callstack memory
763 sizeof( QueueHeader ), // callstack
764 sizeof( QueueHeader ), // callstack alloc
765 sizeof( QueueHeader ) + sizeof( QueueCallstackSample ),
766 sizeof( QueueHeader ) + sizeof( QueueCallstackSample ), // context switch
767 sizeof( QueueHeader ) + sizeof( QueueFrameImage ),
768 sizeof( QueueHeader ) + sizeof( QueueZoneBegin ),
769 sizeof( QueueHeader ) + sizeof( QueueZoneBegin ), // callstack
770 sizeof( QueueHeader ) + sizeof( QueueZoneEnd ),
771 sizeof( QueueHeader ) + sizeof( QueueLockWait ),
772 sizeof( QueueHeader ) + sizeof( QueueLockObtain ),
773 sizeof( QueueHeader ) + sizeof( QueueLockRelease ),
774 sizeof( QueueHeader ) + sizeof( QueueLockWait ), // shared
775 sizeof( QueueHeader ) + sizeof( QueueLockObtain ), // shared
776 sizeof( QueueHeader ) + sizeof( QueueLockReleaseShared ),
777 sizeof( QueueHeader ) + sizeof( QueueLockName ),
778 sizeof( QueueHeader ) + sizeof( QueueMemAlloc ),
779 sizeof( QueueHeader ) + sizeof( QueueMemAlloc ), // named
780 sizeof( QueueHeader ) + sizeof( QueueMemFree ),
781 sizeof( QueueHeader ) + sizeof( QueueMemFree ), // named
782 sizeof( QueueHeader ) + sizeof( QueueMemAlloc ), // callstack
783 sizeof( QueueHeader ) + sizeof( QueueMemAlloc ), // callstack, named
784 sizeof( QueueHeader ) + sizeof( QueueMemFree ), // callstack
785 sizeof( QueueHeader ) + sizeof( QueueMemFree ), // callstack, named
786 sizeof( QueueHeader ) + sizeof( QueueGpuZoneBegin ),
787 sizeof( QueueHeader ) + sizeof( QueueGpuZoneBegin ), // callstack
788 sizeof( QueueHeader ) + sizeof( QueueGpuZoneBeginLean ),// allocated source location
789 sizeof( QueueHeader ) + sizeof( QueueGpuZoneBeginLean ),// allocated source location, callstack
790 sizeof( QueueHeader ) + sizeof( QueueGpuZoneEnd ),
791 sizeof( QueueHeader ) + sizeof( QueueGpuZoneBegin ), // serial
792 sizeof( QueueHeader ) + sizeof( QueueGpuZoneBegin ), // serial, callstack
793 sizeof( QueueHeader ) + sizeof( QueueGpuZoneBeginLean ),// serial, allocated source location
794 sizeof( QueueHeader ) + sizeof( QueueGpuZoneBeginLean ),// serial, allocated source location, callstack
795 sizeof( QueueHeader ) + sizeof( QueueGpuZoneEnd ), // serial
796 sizeof( QueueHeader ) + sizeof( QueuePlotDataInt ),
797 sizeof( QueueHeader ) + sizeof( QueuePlotDataFloat ),
798 sizeof( QueueHeader ) + sizeof( QueuePlotDataDouble ),
799 sizeof( QueueHeader ) + sizeof( QueueContextSwitch ),
800 sizeof( QueueHeader ) + sizeof( QueueThreadWakeup ),
801 sizeof( QueueHeader ) + sizeof( QueueGpuTime ),
802 sizeof( QueueHeader ) + sizeof( QueueGpuContextName ),
803 sizeof( QueueHeader ) + sizeof( QueueCallstackFrameSize ),
804 sizeof( QueueHeader ) + sizeof( QueueSymbolInformation ),
805 sizeof( QueueHeader ), // ExternalNameMetadata - not for wire transfer
806 sizeof( QueueHeader ), // SymbolCodeMetadata - not for wire transfer
807 sizeof( QueueHeader ), // SourceCodeMetadata - not for wire transfer
808 sizeof( QueueHeader ) + sizeof( QueueFiberEnter ),
809 sizeof( QueueHeader ) + sizeof( QueueFiberLeave ),
810 // above items must be first
811 sizeof( QueueHeader ), // terminate
812 sizeof( QueueHeader ), // keep alive
813 sizeof( QueueHeader ) + sizeof( QueueThreadContext ),
814 sizeof( QueueHeader ) + sizeof( QueueGpuCalibration ),
815 sizeof( QueueHeader ), // crash
816 sizeof( QueueHeader ) + sizeof( QueueCrashReport ),
817 sizeof( QueueHeader ) + sizeof( QueueZoneValidation ),
818 sizeof( QueueHeader ) + sizeof( QueueZoneColor ),
819 sizeof( QueueHeader ) + sizeof( QueueZoneValue ),
820 sizeof( QueueHeader ) + sizeof( QueueFrameMark ), // continuous frames
821 sizeof( QueueHeader ) + sizeof( QueueFrameMark ), // start
822 sizeof( QueueHeader ) + sizeof( QueueFrameMark ), // end
823 sizeof( QueueHeader ) + sizeof( QueueFrameVsync ),
824 sizeof( QueueHeader ) + sizeof( QueueSourceLocation ),
825 sizeof( QueueHeader ) + sizeof( QueueLockAnnounce ),
826 sizeof( QueueHeader ) + sizeof( QueueLockTerminate ),
827 sizeof( QueueHeader ) + sizeof( QueueLockMark ),
828 sizeof( QueueHeader ) + sizeof( QueueMessageLiteral ),
829 sizeof( QueueHeader ) + sizeof( QueueMessageColorLiteral ),
830 sizeof( QueueHeader ) + sizeof( QueueMessageLiteral ), // callstack
831 sizeof( QueueHeader ) + sizeof( QueueMessageColorLiteral ), // callstack
832 sizeof( QueueHeader ) + sizeof( QueueGpuNewContext ),
833 sizeof( QueueHeader ) + sizeof( QueueCallstackFrame ),
834 sizeof( QueueHeader ) + sizeof( QueueSysTime ),
835 sizeof( QueueHeader ) + sizeof( QueueTidToPid ),
836 sizeof( QueueHeader ) + sizeof( QueueHwSample ), // cpu cycle
837 sizeof( QueueHeader ) + sizeof( QueueHwSample ), // instruction retired
838 sizeof( QueueHeader ) + sizeof( QueueHwSample ), // cache reference
839 sizeof( QueueHeader ) + sizeof( QueueHwSample ), // cache miss
840 sizeof( QueueHeader ) + sizeof( QueueHwSample ), // branch retired
841 sizeof( QueueHeader ) + sizeof( QueueHwSample ), // branch miss
842 sizeof( QueueHeader ) + sizeof( QueuePlotConfig ),
843 sizeof( QueueHeader ) + sizeof( QueueParamSetup ),
844 sizeof( QueueHeader ), // server query acknowledgement
845 sizeof( QueueHeader ) + sizeof( QueueSourceCodeNotAvailable ),
846 sizeof( QueueHeader ), // symbol code not available
847 sizeof( QueueHeader ) + sizeof( QueueCpuTopology ),
848 sizeof( QueueHeader ), // single string data
849 sizeof( QueueHeader ), // second string data
850 sizeof( QueueHeader ) + sizeof( QueueMemNamePayload ),
851 // keep all QueueStringTransfer below
852 sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // string data
853 sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // thread name
854 sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // plot name
855 sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // allocated source location payload
856 sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // callstack payload
857 sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // callstack alloc payload
858 sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // frame name
859 sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // frame image data
860 sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // external name
861 sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // external thread name
862 sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // symbol code
863 sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // source code
864 sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // fiber name
865};
866
867static_assert( QueueItemSize == 32, "Queue item size not 32 bytes" );
868static_assert( sizeof( QueueDataSize ) / sizeof( size_t ) == (uint8_t)QueueType::NUM_TYPES, "QueueDataSize mismatch" );
869static_assert( sizeof( void* ) <= sizeof( uint64_t ), "Pointer size > 8 bytes" );
870static_assert( sizeof( void* ) == sizeof( uintptr_t ), "Pointer size != uintptr_t" );
871
872}
873
874#endif