Repository files navigation

Aeon Profiler

aeon - "a period of time"

The Aeon profiler is an instramented profiler for native (non-managed) Windows applications that are using the Microsoft Visual Studio compiler. The Aeon profiler supports 32 bit and 64 bit applications. It supports single threaded and multithreaded applications. Instrumenting the code that you wish to profile is as simple as adding a couple of compiler options. No manual modification of source code is necessary (other than modifying one source code file to include the AeonProfiler.h file). You can select to profile individual source files or an entire project by just modifying one setting.

I created the Aeon profiler because I wanted an instrumented profiler that was fast and easy to use. I wanted something that didn't require me to manually instrument each function that I wanted to profile. I wanted something that didn't take a long time to create the instrumented executable each time I changed the source code and rebuilt my project or solution.

The Aeon profiler works by using the Microsoft Visual Studio compiler options /Gh and /GH to insert hooks to external functions _penter() and _pexit() (respectively). The Aeon profiler implements the _penter() and _pexit() functions and uses them to calculate the amount of time that was spent inside each function. It also maintains a stack of the functions being called so that it can build a call graph which can then be viewed as a table of functions showing the parent function (the function that called this function) and the children functions (the functions that are called by this function). See the UserGuide.md file for details and theory of operation.

Some of the unique features of the Aeon profiler is the ability to not only show the average time spent in a function, but to also show the maximum amount time spent in that function (so you can see what the worst case looks like for functions that are only occasionally slow). It also can show you the depth of recursion for recursive functions so you can get a sense of how "deep" the recursion level can go (to get an idea of how much stack space is being used).

Here's an example screenshot:

screenshot

See the Releases page to download the latest release.

About

Windows instrumented profiler for native applications

Resources

Stars

25 stars

Watchers

6 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Aeon Profiler

aeon - "a period of time"

The Aeon profiler is an instramented profiler for native (non-managed) Windows applications that are using the Microsoft Visual Studio compiler. The Aeon profiler supports 32 bit and 64 bit applications. It supports single threaded and multithreaded applications. Instrumenting the code that you wish to profile is as simple as adding a couple of compiler options. No manual modification of source code is necessary (other than modifying one source code file to include the AeonProfiler.h file). You can select to profile individual source files or an entire project by just modifying one setting.

I created the Aeon profiler because I wanted an instrumented profiler that was fast and easy to use. I wanted something that didn't require me to manually instrument each function that I wanted to profile. I wanted something that didn't take a long time to create the instrumented executable each time I changed the source code and rebuilt my project or solution.

The Aeon profiler works by using the Microsoft Visual Studio compiler options /Gh and /GH to insert hooks to external functions _penter() and _pexit() (respectively). The Aeon profiler implements the _penter() and _pexit() functions and uses them to calculate the amount of time that was spent inside each function. It also maintains a stack of the functions being called so that it can build a call graph which can then be viewed as a table of functions showing the parent function (the function that called this function) and the children functions (the functions that are called by this function). See the UserGuide.md file for details and theory of operation.

Some of the unique features of the Aeon profiler is the ability to not only show the average time spent in a function, but to also show the maximum amount time spent in that function (so you can see what the worst case looks like for functions that are only occasionally slow). It also can show you the depth of recursion for recursive functions so you can get a sense of how "deep" the recursion level can go (to get an idea of how much stack space is being used).

Here's an example screenshot:

screenshot

See the Releases page to download the latest release.

About

Windows instrumented profiler for native applications

Resources

Stars

25 stars

Watchers

6 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Aeon Profiler

aeon - "a period of time"

The Aeon profiler is an instramented profiler for native (non-managed) Windows applications that are using the Microsoft Visual Studio compiler. The Aeon profiler supports 32 bit and 64 bit applications. It supports single threaded and multithreaded applications. Instrumenting the code that you wish to profile is as simple as adding a couple of compiler options. No manual modification of source code is necessary (other than modifying one source code file to include the AeonProfiler.h file). You can select to profile individual source files or an entire project by just modifying one setting.

I created the Aeon profiler because I wanted an instrumented profiler that was fast and easy to use. I wanted something that didn't require me to manually instrument each function that I wanted to profile. I wanted something that didn't take a long time to create the instrumented executable each time I changed the source code and rebuilt my project or solution.

The Aeon profiler works by using the Microsoft Visual Studio compiler options /Gh and /GH to insert hooks to external functions _penter() and _pexit() (respectively). The Aeon profiler implements the _penter() and _pexit() functions and uses them to calculate the amount of time that was spent inside each function. It also maintains a stack of the functions being called so that it can build a call graph which can then be viewed as a table of functions showing the parent function (the function that called this function) and the children functions (the functions that are called by this function). See the UserGuide.md file for details and theory of operation.

Some of the unique features of the Aeon profiler is the ability to not only show the average time spent in a function, but to also show the maximum amount time spent in that function (so you can see what the worst case looks like for functions that are only occasionally slow). It also can show you the depth of recursion for recursive functions so you can get a sense of how "deep" the recursion level can go (to get an idea of how much stack space is being used).

Here's an example screenshot:

screenshot

See the Releases page to download the latest release.

About

Windows instrumented profiler for native applications

Resources

Stars

25 stars

Watchers

6 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Aeon Profiler

aeon - "a period of time"

The Aeon profiler is an instramented profiler for native (non-managed) Windows applications that are using the Microsoft Visual Studio compiler. The Aeon profiler supports 32 bit and 64 bit applications. It supports single threaded and multithreaded applications. Instrumenting the code that you wish to profile is as simple as adding a couple of compiler options. No manual modification of source code is necessary (other than modifying one source code file to include the AeonProfiler.h file). You can select to profile individual source files or an entire project by just modifying one setting.

I created the Aeon profiler because I wanted an instrumented profiler that was fast and easy to use. I wanted something that didn't require me to manually instrument each function that I wanted to profile. I wanted something that didn't take a long time to create the instrumented executable each time I changed the source code and rebuilt my project or solution.

The Aeon profiler works by using the Microsoft Visual Studio compiler options /Gh and /GH to insert hooks to external functions _penter() and _pexit() (respectively). The Aeon profiler implements the _penter() and _pexit() functions and uses them to calculate the amount of time that was spent inside each function. It also maintains a stack of the functions being called so that it can build a call graph which can then be viewed as a table of functions showing the parent function (the function that called this function) and the children functions (the functions that are called by this function). See the UserGuide.md file for details and theory of operation.

Some of the unique features of the Aeon profiler is the ability to not only show the average time spent in a function, but to also show the maximum amount time spent in that function (so you can see what the worst case looks like for functions that are only occasionally slow). It also can show you the depth of recursion for recursive functions so you can get a sense of how "deep" the recursion level can go (to get an idea of how much stack space is being used).

Here's an example screenshot:

screenshot

See the Releases page to download the latest release.

About

Windows instrumented profiler for native applications

Resources

Stars

25 stars

Watchers

6 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Aeon Profiler

aeon - "a period of time"

The Aeon profiler is an instramented profiler for native (non-managed) Windows applications that are using the Microsoft Visual Studio compiler. The Aeon profiler supports 32 bit and 64 bit applications. It supports single threaded and multithreaded applications. Instrumenting the code that you wish to profile is as simple as adding a couple of compiler options. No manual modification of source code is necessary (other than modifying one source code file to include the AeonProfiler.h file). You can select to profile individual source files or an entire project by just modifying one setting.

I created the Aeon profiler because I wanted an instrumented profiler that was fast and easy to use. I wanted something that didn't require me to manually instrument each function that I wanted to profile. I wanted something that didn't take a long time to create the instrumented executable each time I changed the source code and rebuilt my project or solution.

The Aeon profiler works by using the Microsoft Visual Studio compiler options /Gh and /GH to insert hooks to external functions _penter() and _pexit() (respectively). The Aeon profiler implements the _penter() and _pexit() functions and uses them to calculate the amount of time that was spent inside each function. It also maintains a stack of the functions being called so that it can build a call graph which can then be viewed as a table of functions showing the parent function (the function that called this function) and the children functions (the functions that are called by this function). See the UserGuide.md file for details and theory of operation.

Some of the unique features of the Aeon profiler is the ability to not only show the average time spent in a function, but to also show the maximum amount time spent in that function (so you can see what the worst case looks like for functions that are only occasionally slow). It also can show you the depth of recursion for recursive functions so you can get a sense of how "deep" the recursion level can go (to get an idea of how much stack space is being used).

Here's an example screenshot:

screenshot

See the Releases page to download the latest release.

About

Windows instrumented profiler for native applications

Resources

Stars

25 stars

Watchers

6 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Aeon Profiler

aeon - "a period of time"

The Aeon profiler is an instramented profiler for native (non-managed) Windows applications that are using the Microsoft Visual Studio compiler. The Aeon profiler supports 32 bit and 64 bit applications. It supports single threaded and multithreaded applications. Instrumenting the code that you wish to profile is as simple as adding a couple of compiler options. No manual modification of source code is necessary (other than modifying one source code file to include the AeonProfiler.h file). You can select to profile individual source files or an entire project by just modifying one setting.

I created the Aeon profiler because I wanted an instrumented profiler that was fast and easy to use. I wanted something that didn't require me to manually instrument each function that I wanted to profile. I wanted something that didn't take a long time to create the instrumented executable each time I changed the source code and rebuilt my project or solution.

The Aeon profiler works by using the Microsoft Visual Studio compiler options /Gh and /GH to insert hooks to external functions _penter() and _pexit() (respectively). The Aeon profiler implements the _penter() and _pexit() functions and uses them to calculate the amount of time that was spent inside each function. It also maintains a stack of the functions being called so that it can build a call graph which can then be viewed as a table of functions showing the parent function (the function that called this function) and the children functions (the functions that are called by this function). See the UserGuide.md file for details and theory of operation.

Some of the unique features of the Aeon profiler is the ability to not only show the average time spent in a function, but to also show the maximum amount time spent in that function (so you can see what the worst case looks like for functions that are only occasionally slow). It also can show you the depth of recursion for recursive functions so you can get a sense of how "deep" the recursion level can go (to get an idea of how much stack space is being used).

Here's an example screenshot:

screenshot

See the Releases page to download the latest release.

About

Windows instrumented profiler for native applications

Resources

Stars

25 stars

Watchers

6 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Aeon Profiler

aeon - "a period of time"

The Aeon profiler is an instramented profiler for native (non-managed) Windows applications that are using the Microsoft Visual Studio compiler. The Aeon profiler supports 32 bit and 64 bit applications. It supports single threaded and multithreaded applications. Instrumenting the code that you wish to profile is as simple as adding a couple of compiler options. No manual modification of source code is necessary (other than modifying one source code file to include the AeonProfiler.h file). You can select to profile individual source files or an entire project by just modifying one setting.

I created the Aeon profiler because I wanted an instrumented profiler that was fast and easy to use. I wanted something that didn't require me to manually instrument each function that I wanted to profile. I wanted something that didn't take a long time to create the instrumented executable each time I changed the source code and rebuilt my project or solution.

The Aeon profiler works by using the Microsoft Visual Studio compiler options /Gh and /GH to insert hooks to external functions _penter() and _pexit() (respectively). The Aeon profiler implements the _penter() and _pexit() functions and uses them to calculate the amount of time that was spent inside each function. It also maintains a stack of the functions being called so that it can build a call graph which can then be viewed as a table of functions showing the parent function (the function that called this function) and the children functions (the functions that are called by this function). See the UserGuide.md file for details and theory of operation.

Some of the unique features of the Aeon profiler is the ability to not only show the average time spent in a function, but to also show the maximum amount time spent in that function (so you can see what the worst case looks like for functions that are only occasionally slow). It also can show you the depth of recursion for recursive functions so you can get a sense of how "deep" the recursion level can go (to get an idea of how much stack space is being used).

Here's an example screenshot:

screenshot

See the Releases page to download the latest release.

About

Windows instrumented profiler for native applications

Resources

Stars

25 stars

Watchers

6 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Aeon Profiler

aeon - "a period of time"

The Aeon profiler is an instramented profiler for native (non-managed) Windows applications that are using the Microsoft Visual Studio compiler. The Aeon profiler supports 32 bit and 64 bit applications. It supports single threaded and multithreaded applications. Instrumenting the code that you wish to profile is as simple as adding a couple of compiler options. No manual modification of source code is necessary (other than modifying one source code file to include the AeonProfiler.h file). You can select to profile individual source files or an entire project by just modifying one setting.

I created the Aeon profiler because I wanted an instrumented profiler that was fast and easy to use. I wanted something that didn't require me to manually instrument each function that I wanted to profile. I wanted something that didn't take a long time to create the instrumented executable each time I changed the source code and rebuilt my project or solution.

The Aeon profiler works by using the Microsoft Visual Studio compiler options /Gh and /GH to insert hooks to external functions _penter() and _pexit() (respectively). The Aeon profiler implements the _penter() and _pexit() functions and uses them to calculate the amount of time that was spent inside each function. It also maintains a stack of the functions being called so that it can build a call graph which can then be viewed as a table of functions showing the parent function (the function that called this function) and the children functions (the functions that are called by this function). See the UserGuide.md file for details and theory of operation.

Some of the unique features of the Aeon profiler is the ability to not only show the average time spent in a function, but to also show the maximum amount time spent in that function (so you can see what the worst case looks like for functions that are only occasionally slow). It also can show you the depth of recursion for recursive functions so you can get a sense of how "deep" the recursion level can go (to get an idea of how much stack space is being used).

Here's an example screenshot:

screenshot

See the Releases page to download the latest release.

About

Windows instrumented profiler for native applications

Resources

Stars

25 stars

Watchers

6 watching

Forks

Releases

Packages

Used by

Contributors

Languages