TArray< TUniquePtr< TTraceThreadData< FTraceDatum > > > TraceData
Data Buffer for each trace type - one for Trace/Sweep and one for Overlap
FTraceThreadData is one atomic data size for thread so once that's filled up, this will be sent to thread if you need more, it will allocate new FTraceThreadData and add to TArray
however when we calculate index of buffer, we calculate continuously, meaning if TraceData(1).Buffer[50] will have 1*ASYNC_TRACE_BUFFER_SIZE + 50 as index in order to give UNIQUE INDEX to every data in this buffer