🔍 Backtrace Viewer

{filteredThreads.length} / {threads.length} threads
{#if threads.length === 0}

No backtrace data loaded. Upload a file to get started.

{:else} {#each filteredThreads as thread (thread.id)}
toggleThread(thread.id)} on:keydown={(e) => e.key === "Enter" && toggleThread(thread.id)} role="button" tabindex="0" >
{thread.sampleCount} {thread.id} {#if thread.name} : {thread.name} {/if}
{#if thread.expanded}
{#each thread.collapsibleBacktrace as backtraceLine (backtraceLine.id)} {#if !backtraceLine.hidden} {#if backtraceLine.startsWithDigit && backtraceLine.hasSection}
toggleSection(thread.id, backtraceLine.id)} on:keydown={(e) => e.key === "Enter" && toggleSection(thread.id, backtraceLine.id)} role="button" tabindex="0" > {backtraceLine.parsed.indent} {backtraceLine.sectionCollapsed ? "▶" : "▼"} {#if backtraceLine.parsed.sampleCount} {backtraceLine.parsed.sampleCount} {/if} {backtraceLine.parsed.content}
{:else if backtraceLine.startsWithDigit && !backtraceLine.hasSection}
{backtraceLine.parsed.indent} {#if backtraceLine.parsed.sampleCount} {backtraceLine.parsed.sampleCount} {/if} {backtraceLine.parsed.content}
{:else}
{backtraceLine.parsed.indent} {#if backtraceLine.parsed.sampleCount} {backtraceLine.parsed.sampleCount} {/if} {backtraceLine.parsed.content}
{/if} {/if} {/each}
{/if}
{/each} {/if}