The open source OpenXR runtime
at main 874 lines 22 kB view raw
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