diff options
Diffstat (limited to 'trace_profile')
-rw-r--r-- | trace_profile/index.html | 1 | ||||
-rw-r--r-- | trace_profile/tracy.html | 434 | ||||
-rw-r--r-- | trace_profile/tracy/.gitignore | 3 | ||||
-rw-r--r-- | trace_profile/tracy/Makefile | 53 | ||||
-rw-r--r-- | trace_profile/tracy/foo.c | 48 | ||||
-rw-r--r-- | trace_profile/tracy/get-tracy.sh | 39 | ||||
-rw-r--r-- | trace_profile/tracy/main.cpp | 91 | ||||
-rw-r--r-- | trace_profile/vtune.html | 4 |
8 files changed, 671 insertions, 2 deletions
diff --git a/trace_profile/index.html b/trace_profile/index.html index 870d61b..8866e1f 100644 --- a/trace_profile/index.html +++ b/trace_profile/index.html @@ -165,6 +165,7 @@ <li><a href="./callgrind.html">callgrind</a></li> <li><a href="./valgrind.html">valgrind</a></li> <li><a href="./vtune.html">vtune</a></li> +<li><a href="./tracy.html">tracy</a></li> </ul> </main> diff --git a/trace_profile/tracy.html b/trace_profile/tracy.html new file mode 100644 index 0000000..a4382ab --- /dev/null +++ b/trace_profile/tracy.html @@ -0,0 +1,434 @@ +<!DOCTYPE HTML> +<html lang="en" class="light sidebar-visible" dir="ltr"> + <head> + <!-- Book generated using mdBook --> + <meta charset="UTF-8"> + <title>tracy - Notes</title> + + + <!-- Custom HTML head --> + + <meta name="description" content=""> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <meta name="theme-color" content="#ffffff"> + + <link rel="icon" href="../favicon.svg"> + <link rel="shortcut icon" href="../favicon.png"> + <link rel="stylesheet" href="../css/variables.css"> + <link rel="stylesheet" href="../css/general.css"> + <link rel="stylesheet" href="../css/chrome.css"> + <link rel="stylesheet" href="../css/print.css" media="print"> + + <!-- Fonts --> + <link rel="stylesheet" href="../FontAwesome/css/font-awesome.css"> + <link rel="stylesheet" href="../fonts/fonts.css"> + + <!-- Highlight.js Stylesheets --> + <link rel="stylesheet" id="highlight-css" href="../highlight.css"> + <link rel="stylesheet" id="tomorrow-night-css" href="../tomorrow-night.css"> + <link rel="stylesheet" id="ayu-highlight-css" href="../ayu-highlight.css"> + + <!-- Custom theme stylesheets --> + + + <!-- Provide site root to javascript --> + <script> + var path_to_root = "../"; + var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "navy" : "light"; + </script> + <!-- Start loading toc.js asap --> + <script src="../toc.js"></script> + </head> + <body> + <div id="body-container"> + <!-- Work around some values being stored in localStorage wrapped in quotes --> + <script> + try { + var theme = localStorage.getItem('mdbook-theme'); + var sidebar = localStorage.getItem('mdbook-sidebar'); + + if (theme.startsWith('"') && theme.endsWith('"')) { + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); + } + + if (sidebar.startsWith('"') && sidebar.endsWith('"')) { + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); + } + } catch (e) { } + </script> + + <!-- Set the theme before any content is loaded, prevents flash --> + <script> + var theme; + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } + if (theme === null || theme === undefined) { theme = default_theme; } + const html = document.documentElement; + html.classList.remove('light') + html.classList.add(theme); + html.classList.add("js"); + </script> + + <input type="checkbox" id="sidebar-toggle-anchor" class="hidden"> + + <!-- Hide / unhide sidebar before it is displayed --> + <script> + var sidebar = null; + var sidebar_toggle = document.getElementById("sidebar-toggle-anchor"); + if (document.body.clientWidth >= 1080) { + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } + sidebar = sidebar || 'visible'; + } else { + sidebar = 'hidden'; + } + sidebar_toggle.checked = sidebar === 'visible'; + html.classList.remove('sidebar-visible'); + html.classList.add("sidebar-" + sidebar); + </script> + + <nav id="sidebar" class="sidebar" aria-label="Table of contents"> + <!-- populated by js --> + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> + <noscript> + <iframe class="sidebar-iframe-outer" src="../toc.html"></iframe> + </noscript> + <div id="sidebar-resize-handle" class="sidebar-resize-handle"> + <div class="sidebar-resize-indicator"></div> + </div> + </nav> + + <div id="page-wrapper" class="page-wrapper"> + + <div class="page"> + <div id="menu-bar-hover-placeholder"></div> + <div id="menu-bar" class="menu-bar sticky"> + <div class="left-buttons"> + <label id="sidebar-toggle" class="icon-button" for="sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar"> + <i class="fa fa-bars"></i> + </label> + <button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list"> + <i class="fa fa-paint-brush"></i> + </button> + <ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu"> + <li role="none"><button role="menuitem" class="theme" id="light">Light</button></li> + <li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li> + <li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li> + <li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li> + <li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li> + </ul> + <button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar"> + <i class="fa fa-search"></i> + </button> + </div> + + <h1 class="menu-title">Notes</h1> + + <div class="right-buttons"> + <a href="../print.html" title="Print this book" aria-label="Print this book"> + <i id="print-button" class="fa fa-print"></i> + </a> + <a href="https://github.com/johannst/notes" title="Git repository" aria-label="Git repository"> + <i id="git-repository-button" class="fa fa-github"></i> + </a> + + </div> + </div> + + <div id="search-wrapper" class="hidden"> + <form id="searchbar-outer" class="searchbar-outer"> + <input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header"> + </form> + <div id="searchresults-outer" class="searchresults-outer hidden"> + <div id="searchresults-header" class="searchresults-header"></div> + <ul id="searchresults"> + </ul> + </div> + </div> + + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> + <script> + document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); + document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); + Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) { + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); + }); + </script> + + <div id="content" class="content"> + <main> + <h1 id="tracy1"><a class="header" href="#tracy1">tracy(1)</a></h1> +<p><a href="https://github.com/wolfpld/tracy">Tracy</a> is a frame profiler, supporting manual code instrumentation +and providing a sampling profiler.</p> +<p>One can either record and visualize the profiling data live using +<code>tracy-profiler</code> or record the profiling data to a file using <code>tracy-capture</code>.</p> +<pre><code>tracy-profiler [file] [-p port] + +tracy-capture -o file [-f] [-p port] + -f overwrite <file> if it exists +</code></pre> +<h2 id="example"><a class="header" href="#example">Example</a></h2> +<p>The example showcases different cases:</p> +<ol> +<li>Use tracy from a single binary. In that case the <code>TracyClient.cpp</code> can be +directly linked / included in the instrumented binary.</li> +<li>Use tracy from different binaries (eg main executable + shared library). In +this case the <code>TracyClient.cpp</code> should be compiled into its own shared +library, such that there is a single tracy client.</li> +<li>Use tracy from different binaries on windows. In this case the +<code>TracyClient.cpp</code> must be compiled again into a separate shared library, +while defining <code>TRACY_EXPORTS</code>. The code being instrumented must be compiled +with <code>TRACY_IMPORTS</code> defined.</li> +</ol> +<p>An instrumented <code>c++</code> example:</p> +<pre><code class="language-cpp">#include <chrono> +#include <thread> + +#include <tracy/Tracy.hpp> + +#ifdef USE_FOO +extern "C" void foo_comp_hook(int64_t); +#endif + +void init() { + // Create a named zone (active for the current scope). + // Name will be used when rendering the zone in the thread timeline. + ZoneScopedN("init()"); + // Set explicit color for the rendered zone. + ZoneColor(0xff0000); + + std::this_thread::sleep_for(std::chrono::seconds(1)); +} + +void comp(const char* name) { + // Track call count. + static int64_t ccnt = 0; + ccnt += 1; + + // Create an unnamed zone for the current scope. + ZoneScoped; + // Name the zone by formatting the name dynamically. + // This name is shown for the zone in the thread timeline, however + // in the zone statistics they are all accounted under one common + // zone "comp". + ZoneNameF("comp(%s)", name); + // Additional text to attach to the zone. + ZoneTextF("text(%s)", name); + // Additional value to attach to the zone measurement. + ZoneValue(ccnt); + + // Statistics for dynamic names, text and values can be looked at in the zone + // statistics.There measurements can be grouped by different categories. + + // Add a simple plot. + TracyPlot("comp-plot", ccnt % 4); + + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + +#ifdef USE_FOO + foo_comp_hook(ccnt); +#endif +} + +void post_comp() { + // Create an unnamed zone for the current scope and capture callstack (max + // depth 10). Capturing callstack requires platform with TRACY_HAS_CALLSTACK + // support. + ZoneScopedS(10); + // Name the zone, w/o formatting. + const char name[] = "post_comp()"; + ZoneName(name, sizeof(name)); + + // Add trace messages to the timeline. + TracyMessageL("start sleep in post_comp()"); + std::this_thread::sleep_for(std::chrono::milliseconds(50)); + TracyMessageL("end sleep in post_comp()"); +} + +void fini() { + // Create a named zone with an explicit color. + ZoneScopedNC("fini()", 0x00ff00); + std::this_thread::sleep_for(std::chrono::seconds(1)); +} + +int main() { + // Create a named zone. + ZoneScopedN("main()"); + + init(); + + int step = 0; + while (step++ < 10) { + // Create a frame message, this start a new frame with the name + // "step" and end the previous frame with the name "step". + FrameMarkNamed("step"); + // Create a named scope. + ZoneScopedN("step()"); + comp("a"); + comp("b"); + comp("c"); + post_comp(); + } + + fini(); +} +</code></pre> +<p>An instrumented <code>c</code> example:</p> +<pre><code class="language-c">#include <stdint.h> +#include <inttypes.h> +#include <stdio.h> + +#include <tracy/TracyC.h> + +static void comp_helper(int64_t i) { + char buf[64]; + int cnt = snprintf(buf, sizeof(buf), "helper(%" PRId64 ")", i); + + // Create an active unnamed zone. + TracyCZone(ctx, 1); + + // Name the zone. + TracyCZoneName(ctx, buf, cnt); + // Add custom text to the zone measurement. + TracyCZoneText(ctx, buf, cnt); + // Add custom value to the zone measurement. + TracyCZoneValue(ctx, i); + + for (int ii = 0; ii < i * 100000; ++ii) { + /* fake work */ + } + + // End the zone measurement. + TracyCZoneEnd(ctx); +} + +void foo_comp_hook(int64_t cnt) { + // Create an active named zone. + TracyCZoneN(ctx, "foo", 1); + + for (int i = 0; i < cnt; ++i) { + // Plot value. + TracyCPlot("foo_comp_hook", cnt + i); + + comp_helper(i); + } + + // Configure plot "foo", probably best done once during initialization.. + TracyCPlotConfig("foo", TracyPlotFormatNumber, 1 /* step */, 1 /* fill */, + 0xff0000); + // Plot value. + TracyCPlot("foo", cnt); + + // End the zone measurement. + TracyCZoneEnd(ctx); +} +</code></pre> +<p>Raw build commands to demonstrate compiling tracy w/o <code>cmake</code>, in case we need +to integrate it into a different build system.</p> +<pre><code class="language-makefile">B := BUILD + +main: $(B)/main-static $(B)/main-dynamic $(B)/main-dynamic-win +tracy: $(B)/tracy +.PHONY: main tracy + +# -- TRACY STATIC --------------------------------------------------------------- + +$(B)/main-static: main.cpp | $(B) + clang++ -DTRACY_ENABLE -I$(B)/tracy/public -o $@ $^ $(B)/tracy/public/TracyClient.cpp + +# -- TRACY DYNAMIC -------------------------------------------------------------- + +$(B)/main-dynamic: main.cpp $(B)/foo.so $(B)/TracyClient.so | $(B) + clang++ -DTRACY_ENABLE -I$(B)/tracy/public -DUSE_FOO -o $@ $^ + +$(B)/foo.so: foo.c $(B)/TracyClient.so + clang -DTRACY_ENABLE -I$(B)/tracy/public -fPIC -shared -o $@ $^ + +$(B)/TracyClient.so: $(B)/tracy/public/TracyClient.cpp + clang++ -DTRACY_ENABLE -I$(B)/tracy/public -fPIC -shared -o $@ $^ + +# -- TRACY DYNAMIC WINDOWS ------------------------------------------------------ + +$(B)/main-dynamic-win: main.cpp $(B)/foo.dll $(B)/TracyClient.dll + @# eg run with wine + zig c++ -target x86_64-windows -DTRACY_ENABLE -DTRACY_IMPORTS -DUSE_FOO -o $@ $^ -I $(B)/tracy/public + +$(B)/foo.dll: foo.c $(B)/TracyClient.dll + zig c++ -target x86_64-windows -DTRACY_ENABLE -DTRACY_IMPORTS -fPIC -shared -o $@ $^ -I $(B)/tracy/public + +$(B)/TracyClient.dll: $(B)/tracy/public/TracyClient.cpp + @# win libs from 'pragma comment(lib, ..)' + zig c++ -target x86_64-windows -DTRACY_ENABLE -DTRACY_EXPORTS -fPIC -shared -o $@ $^ -lws2_32 -ldbghelp -ladvapi32 -luser32 + +# -- TRACY ---------------------------------------------------------------------- + +# Get latest tracy and build profiler. +$(B)/tracy: $(B) + cd $(B); bash $(CURDIR)/get-tracy.sh +.PHONY: $(B)/tracy + +$B: + mkdir -p $(B) +.PHONY: $(B) + +# -- CLEAN ---------------------------------------------------------------------- + +clean: + $(RM) $(B)/*.so $(B)/*.dll $(B)/*.pdb $(B)/*.lib $(B)/main* + +distclean: + rm -rf $(B) +</code></pre> +<blockquote> +<p>Find <code>get-tracy.sh</code> <a href="https://github.com/johannst/notes/blob/master/src/trace_profile/tracy/get-tracy.sh">here</a>.</p> +</blockquote> + + </main> + + <nav class="nav-wrapper" aria-label="Page navigation"> + <!-- Mobile navigation buttons --> + <a rel="prev" href="../trace_profile/vtune.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> + <i class="fa fa-angle-left"></i> + </a> + + <a rel="next prefetch" href="../debug/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> + <i class="fa fa-angle-right"></i> + </a> + + <div style="clear: both"></div> + </nav> + </div> + </div> + + <nav class="nav-wide-wrapper" aria-label="Page navigation"> + <a rel="prev" href="../trace_profile/vtune.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> + <i class="fa fa-angle-left"></i> + </a> + + <a rel="next prefetch" href="../debug/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> + <i class="fa fa-angle-right"></i> + </a> + </nav> + + </div> + + + + + <script> + window.playground_copyable = true; + </script> + + + <script src="../elasticlunr.min.js"></script> + <script src="../mark.min.js"></script> + <script src="../searcher.js"></script> + + <script src="../clipboard.min.js"></script> + <script src="../highlight.js"></script> + <script src="../book.js"></script> + + <!-- Custom JS scripts --> + + + </div> + </body> +</html> diff --git a/trace_profile/tracy/.gitignore b/trace_profile/tracy/.gitignore new file mode 100644 index 0000000..83f22d3 --- /dev/null +++ b/trace_profile/tracy/.gitignore @@ -0,0 +1,3 @@ +BUILD/ +.cache +compile_commands.json
\ No newline at end of file diff --git a/trace_profile/tracy/Makefile b/trace_profile/tracy/Makefile new file mode 100644 index 0000000..0d21426 --- /dev/null +++ b/trace_profile/tracy/Makefile @@ -0,0 +1,53 @@ +B := BUILD + +main: $(B)/main-static $(B)/main-dynamic $(B)/main-dynamic-win +tracy: $(B)/tracy +.PHONY: main tracy + +# -- TRACY STATIC --------------------------------------------------------------- + +$(B)/main-static: main.cpp | $(B) + clang++ -DTRACY_ENABLE -I$(B)/tracy/public -o $@ $^ $(B)/tracy/public/TracyClient.cpp + +# -- TRACY DYNAMIC -------------------------------------------------------------- + +$(B)/main-dynamic: main.cpp $(B)/foo.so $(B)/TracyClient.so | $(B) + clang++ -DTRACY_ENABLE -I$(B)/tracy/public -DUSE_FOO -o $@ $^ + +$(B)/foo.so: foo.c $(B)/TracyClient.so + clang -DTRACY_ENABLE -I$(B)/tracy/public -fPIC -shared -o $@ $^ + +$(B)/TracyClient.so: $(B)/tracy/public/TracyClient.cpp + clang++ -DTRACY_ENABLE -I$(B)/tracy/public -fPIC -shared -o $@ $^ + +# -- TRACY DYNAMIC WINDOWS ------------------------------------------------------ + +$(B)/main-dynamic-win: main.cpp $(B)/foo.dll $(B)/TracyClient.dll + @# eg run with wine + zig c++ -target x86_64-windows -DTRACY_ENABLE -DTRACY_IMPORTS -DUSE_FOO -o $@ $^ -I $(B)/tracy/public + +$(B)/foo.dll: foo.c $(B)/TracyClient.dll + zig c++ -target x86_64-windows -DTRACY_ENABLE -DTRACY_IMPORTS -fPIC -shared -o $@ $^ -I $(B)/tracy/public + +$(B)/TracyClient.dll: $(B)/tracy/public/TracyClient.cpp + @# win libs from 'pragma comment(lib, ..)' + zig c++ -target x86_64-windows -DTRACY_ENABLE -DTRACY_EXPORTS -fPIC -shared -o $@ $^ -lws2_32 -ldbghelp -ladvapi32 -luser32 + +# -- TRACY ---------------------------------------------------------------------- + +# Get latest tracy and build profiler. +$(B)/tracy: $(B) + cd $(B); bash $(CURDIR)/get-tracy.sh +.PHONY: $(B)/tracy + +$B: + mkdir -p $(B) +.PHONY: $(B) + +# -- CLEAN ---------------------------------------------------------------------- + +clean: + $(RM) $(B)/*.so $(B)/*.dll $(B)/*.pdb $(B)/*.lib $(B)/main* + +distclean: + rm -rf $(B) diff --git a/trace_profile/tracy/foo.c b/trace_profile/tracy/foo.c new file mode 100644 index 0000000..e233e68 --- /dev/null +++ b/trace_profile/tracy/foo.c @@ -0,0 +1,48 @@ +#include <stdint.h> +#include <inttypes.h> +#include <stdio.h> + +#include <tracy/TracyC.h> + +static void comp_helper(int64_t i) { + char buf[64]; + int cnt = snprintf(buf, sizeof(buf), "helper(%" PRId64 ")", i); + + // Create an active unnamed zone. + TracyCZone(ctx, 1); + + // Name the zone. + TracyCZoneName(ctx, buf, cnt); + // Add custom text to the zone measurement. + TracyCZoneText(ctx, buf, cnt); + // Add custom value to the zone measurement. + TracyCZoneValue(ctx, i); + + for (int ii = 0; ii < i * 100000; ++ii) { + /* fake work */ + } + + // End the zone measurement. + TracyCZoneEnd(ctx); +} + +void foo_comp_hook(int64_t cnt) { + // Create an active named zone. + TracyCZoneN(ctx, "foo", 1); + + for (int i = 0; i < cnt; ++i) { + // Plot value. + TracyCPlot("foo_comp_hook", cnt + i); + + comp_helper(i); + } + + // Configure plot "foo", probably best done once during initialization.. + TracyCPlotConfig("foo", TracyPlotFormatNumber, 1 /* step */, 1 /* fill */, + 0xff0000); + // Plot value. + TracyCPlot("foo", cnt); + + // End the zone measurement. + TracyCZoneEnd(ctx); +} diff --git a/trace_profile/tracy/get-tracy.sh b/trace_profile/tracy/get-tracy.sh new file mode 100644 index 0000000..4fab480 --- /dev/null +++ b/trace_profile/tracy/get-tracy.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +# -- DOWNLOAD ------------------------------------------------------------------- + +test -f tracy.json || curl -s -L https://api.github.com/repos/wolfpld/tracy/releases/latest > tracy.json +TRACY_URL=$(cat tracy.json | jq -r .tarball_url) +TRACY_TAG=$(cat tracy.json | jq -r .tag_name) + +echo TRACY_URL $TRACY_URL +echo TRACY_TAG $TRACY_TAG + +if ! test -d tracy; then + wget --no-clobber -O tracy-$TRACY_TAG.tgz $TRACY_URL + mkdir tracy + tar xf tracy-$TRACY_TAG.tgz -C tracy --strip-component 1 + echo $TRACY_TAG > tracy/VERSION +elif ! test $TRACY_TAG = $(cat tracy/VERSION); then + echo -e "\e[1;33mWARN\e[0m: new tracy version available have:$(cat tracy/VERSION) new:$TRACY_TAG" +fi + +export CC=$(which clang) +export CXX=$(which clang++) + +# -- BUILD PROFILER ------------------------------------------------------------- + +if ! test -d build-profiler; then + # Legacy -> x11 + cmake -B build-profiler -S tracy/profiler -DLEGACY=ON +fi + +cmake --build build-profiler -j$(nproc) + +# -- BUILD CAPTURE -------------------------------------------------------------- + +if ! test -d build-capture; then + cmake -B build-capture -S tracy/capture +fi + +cmake --build build-capture/ -j$(nproc) diff --git a/trace_profile/tracy/main.cpp b/trace_profile/tracy/main.cpp new file mode 100644 index 0000000..62f7637 --- /dev/null +++ b/trace_profile/tracy/main.cpp @@ -0,0 +1,91 @@ +#include <chrono> +#include <thread> + +#include <tracy/Tracy.hpp> + +#ifdef USE_FOO +extern "C" void foo_comp_hook(int64_t); +#endif + +void init() { + // Create a named zone (active for the current scope). + // Name will be used when rendering the zone in the thread timeline. + ZoneScopedN("init()"); + // Set explicit color for the rendered zone. + ZoneColor(0xff0000); + + std::this_thread::sleep_for(std::chrono::seconds(1)); +} + +void comp(const char* name) { + // Track call count. + static int64_t ccnt = 0; + ccnt += 1; + + // Create an unnamed zone for the current scope. + ZoneScoped; + // Name the zone by formatting the name dynamically. + // This name is shown for the zone in the thread timeline, however + // in the zone statistics they are all accounted under one common + // zone "comp". + ZoneNameF("comp(%s)", name); + // Additional text to attach to the zone. + ZoneTextF("text(%s)", name); + // Additional value to attach to the zone measurement. + ZoneValue(ccnt); + + // Statistics for dynamic names, text and values can be looked at in the zone + // statistics.There measurements can be grouped by different categories. + + // Add a simple plot. + TracyPlot("comp-plot", ccnt % 4); + + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + +#ifdef USE_FOO + foo_comp_hook(ccnt); +#endif +} + +void post_comp() { + // Create an unnamed zone for the current scope and capture callstack (max + // depth 10). Capturing callstack requires platform with TRACY_HAS_CALLSTACK + // support. + ZoneScopedS(10); + // Name the zone, w/o formatting. + const char name[] = "post_comp()"; + ZoneName(name, sizeof(name)); + + // Add trace messages to the timeline. + TracyMessageL("start sleep in post_comp()"); + std::this_thread::sleep_for(std::chrono::milliseconds(50)); + TracyMessageL("end sleep in post_comp()"); +} + +void fini() { + // Create a named zone with an explicit color. + ZoneScopedNC("fini()", 0x00ff00); + std::this_thread::sleep_for(std::chrono::seconds(1)); +} + +int main() { + // Create a named zone. + ZoneScopedN("main()"); + + init(); + + int step = 0; + while (step++ < 10) { + // Create a frame message, this start a new frame with the name + // "step" and end the previous frame with the name "step". + FrameMarkNamed("step"); + // Create a named scope. + ZoneScopedN("step()"); + comp("a"); + comp("b"); + comp("c"); + post_comp(); + } + + fini(); +} diff --git a/trace_profile/vtune.html b/trace_profile/vtune.html index c02910d..225349b 100644 --- a/trace_profile/vtune.html +++ b/trace_profile/vtune.html @@ -217,7 +217,7 @@ vtune: main <i class="fa fa-angle-left"></i> </a> - <a rel="next prefetch" href="../debug/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> + <a rel="next prefetch" href="../trace_profile/tracy.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> <i class="fa fa-angle-right"></i> </a> @@ -231,7 +231,7 @@ vtune: main <i class="fa fa-angle-left"></i> </a> - <a rel="next prefetch" href="../debug/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> + <a rel="next prefetch" href="../trace_profile/tracy.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> <i class="fa fa-angle-right"></i> </a> </nav> |