private void Flush(TimingThread thread, TimingEntry[] entries, int count) { var span = entries.AsSpan(0, count); lock (m_seen) { if (m_seen.Contains(thread) == false) { // output thread name to chrome trace // we can affort to do this inefficiently since it's only done once per thread m_writer?.WriteLine(", { \"name\": \"thread_name\", \"ph\": \"M\", \"pid\": 0, \"tid\": " + thread.Index.ToString() + ", \"args\": { \"name\": \"" + thread.Name + "\" } }"); m_seen.Add(thread); } } // some acrobatics here to avoid string allocations // assume thread name < 64 chars Span <char> buffer = stackalloc char[64 + 5 + k_part0.Length + k_part1.Length + k_part2.Length]; k_part0.AsSpan().CopyTo(buffer); var work = buffer.Slice(k_part0.Length); var invFrequencyToMicros = m_invFrequencyToMicros; var ti = thread.Index; for (int i = 0; i < span.Length; i++) { ref readonly var entry = ref span[i];
private void Flush(TimingThread thread, TimingEntry[] entries, int count) { var span = entries.AsSpan(0, count); var writer = m_writer; if (writer == null) { return; } lock (m_seen) { if (m_seen.Contains(thread) == false) { // output thread name to chrome trace // we can affort to do this inefficiently since it's only done once per thread writer.WriteLine(", { \"name\": \"thread_name\", \"ph\": \"M\", \"pid\": 0, \"tid\": " + thread.Index.ToString() + ", \"args\": { \"name\": \"" + thread.Name + "\" } }"); m_seen.Add(thread); } } var invFrequencyToMicros = m_invFrequencyToMicros; var ti = thread.Index; Span <char> buf = stackalloc char[256]; var bdr = new FixedStringBuilder(buf); bdr.Append(k_namePart); for (int i = 0; i < span.Length; i++) { bdr.Length = k_namePart.Length; // keep name part only ref readonly var entry = ref span[i];
internal static void Flush(TimingThread thread, TimingEntry[] items, int count) { foreach (var listener in s_listeners.ReadOnlySpan) { lock (listener) listener(thread, items, count); } }
private static TimingThread CreateNewTimingThread() { var instance = new TimingThread(); int index = TimingService.RegisterThread(instance); instance.Init(index); return(instance); }
public static int RegisterThread(TimingThread thread) { lock (s_threads) { var retval = s_threads.Count; s_threads.Add(thread); return(retval); } }