public unsafe void TestProfilerThreadsCantInitializeTwice()
        {
            ProfilerProtocolThread.Shutdown();
            Thread thread = new Thread(() => { ProfilerProtocolThread.Initialize(); });

            thread.Start();
            thread.Join();
            Assert.Throws <InvalidOperationException>(() => ProfilerProtocolThread.Initialize());
            ProfilerProtocolThread.Shutdown();
        }
        public unsafe void TestProfilerThreadsHaveUniqueStreams()
        {
            ProfilerProtocolThread.Shutdown();
            ProfilerProtocolThread.Initialize();

            Thread[] threads = new Thread[16];
            IntPtr[] streams = new IntPtr[16];
            for (int i = 0; i < threads.Length; i++)
            {
                threads[i] = new Thread((object p) =>
                {
                    int pi = (int)p;
                    Assert.Zero(ProfilerProtocolThread.Stream.buffer->m_BufferList->TotalBytes);
                    fixed(ProfilerProtocolStream * s = &ProfilerProtocolThread.Stream)
                    streams[pi] = (IntPtr)s;
                    ProfilerProtocolThread.SendNewFrame();
                });
                threads[i].Start(i);
            }

            for (int i = 0; i < threads.Length; i++)
            {
                threads[i].Join();
            }

            for (int i = 0; i < threads.Length; i++)
            {
                ProfilerProtocolStream *stream = (ProfilerProtocolStream *)streams[i];
                Assert.NotZero(stream->buffer->m_BufferList->TotalBytes);
                for (int j = 0; j < threads.Length; j++)
                {
                    Assert.IsTrue(streams[i] != streams[j] || i == j);
                }
            }

            ProfilerProtocolThread.Shutdown();
        }