Invoke startup hook from ApplyStartupHook diagnostic command - #87490

Merged
davmason merged 4 commits into
dotnet:mainfrom
jander-msft:applystartuphook-invoke
Jun 17, 2023
Merged

Invoke startup hook from ApplyStartupHook diagnostic command#87490
davmason merged 4 commits into
dotnet:mainfrom
jander-msft:applystartuphook-invoke

Conversation

@jander-msft

Copy link
Copy Markdown
Contributor

Update the new ApplyStartupHook diagnostic command to execute the startup hook if managed execution is already running. Add a test that starts an application, waits for managed code to start executing, applies the startup hook, and has the application validate that the startup hook was actually invoked.

cc @dotnet/dotnet-monitor

closes#83756

@ghostghost added area-Diagnostics-coreclr community-contribution Indicates that the PR has been added by a community member labels Jun 13, 2023
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @tommcdon
See info in area-owners.md if you want to be subscribed.

Issue Details

Update the new ApplyStartupHook diagnostic command to execute the startup hook if managed execution is already running. Add a test that starts an application, waits for managed code to start executing, applies the startup hook, and has the application validate that the startup hook was actually invoked.

cc @dotnet/dotnet-monitor

closes #83756

Author:jander-msft
Assignees:-
Labels:

area-Diagnostics-coreclr

Milestone:-

@tommcdon

Copy link
Copy Markdown
Member

@davmason@hoyosjs

GCX_COOP();

// Load and call startup hook since managed execution is already running.
MethodDescCallSite callStartupHook(METHOD__STARTUP_HOOK_PROVIDER__CALL_STARTUP_HOOK);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now that these can get loaded mid process - do we correctly document synchronization guarantees (none pretty much other than loading happens once) and expectations for injected code?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There aren't any guarantees around synchronization. Also, you could invoke this multiple times with the same startup hook assembly path, while the assembly should only be loaded once, its StartupHook.Initialize method would be called each time; it would be the responsibility of the startup hook implementation to guard against multiple execution, if it is impacted at all by it.

Comment threadsrc/libraries/System.Private.CoreLib/src/System/StartupHookProvider.cs Outdated
@jander-msft

Copy link
Copy Markdown
ContributorAuthor

Test failures are due to the StartupHookTests.InvalidSimpleAssemblyName test method testing an implementation detail that if any of the specified assemblies are invalid then nothing is executed whereas my change allows execution of each startup hook in sequence up until the first failure. It'll rewrite my update to maintain the prior implementation behavior.

Comment threadsrc/tests/tracing/eventpipe/applystartuphook/ApplyStartupHookValidation.cs Outdated
Comment threadsrc/tests/tracing/eventpipe/applystartuphook/ApplyStartupHookValidation.cs Outdated
@jander-msft

Copy link
Copy Markdown
ContributorAuthor

If there is no other feedback, could I get this merged?

The two test jogs that are timing out are from Alma Linux Helix jobs, which were just removed in the main branch ~20 minutes ago: 4ae1668

@davmason
davmason merged commit 61ce817 into dotnet:mainJun 17, 2023
@ghostghost locked as resolved and limited conversation to collaborators Jul 17, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Diagnostics-coreclrcommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature Request] Diagnostic IPC command to dynamically add startup hook at diagnostic startup suspension

4 participants

@jander-msft@tommcdon@davmason@hoyosjs
, '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

Invoke startup hook from ApplyStartupHook diagnostic command - #87490

Merged
davmason merged 4 commits into
dotnet:mainfrom
jander-msft:applystartuphook-invoke
Jun 17, 2023
Merged

Invoke startup hook from ApplyStartupHook diagnostic command#87490
davmason merged 4 commits into
dotnet:mainfrom
jander-msft:applystartuphook-invoke

Conversation

@jander-msft

Copy link
Copy Markdown
Contributor

Update the new ApplyStartupHook diagnostic command to execute the startup hook if managed execution is already running. Add a test that starts an application, waits for managed code to start executing, applies the startup hook, and has the application validate that the startup hook was actually invoked.

cc @dotnet/dotnet-monitor

closes#83756

@ghostghost added area-Diagnostics-coreclr community-contribution Indicates that the PR has been added by a community member labels Jun 13, 2023
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @tommcdon
See info in area-owners.md if you want to be subscribed.

Issue Details

Update the new ApplyStartupHook diagnostic command to execute the startup hook if managed execution is already running. Add a test that starts an application, waits for managed code to start executing, applies the startup hook, and has the application validate that the startup hook was actually invoked.

cc @dotnet/dotnet-monitor

closes #83756

Author:jander-msft
Assignees:-
Labels:

area-Diagnostics-coreclr

Milestone:-

@tommcdon

Copy link
Copy Markdown
Member

@davmason@hoyosjs

GCX_COOP();

// Load and call startup hook since managed execution is already running.
MethodDescCallSite callStartupHook(METHOD__STARTUP_HOOK_PROVIDER__CALL_STARTUP_HOOK);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now that these can get loaded mid process - do we correctly document synchronization guarantees (none pretty much other than loading happens once) and expectations for injected code?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There aren't any guarantees around synchronization. Also, you could invoke this multiple times with the same startup hook assembly path, while the assembly should only be loaded once, its StartupHook.Initialize method would be called each time; it would be the responsibility of the startup hook implementation to guard against multiple execution, if it is impacted at all by it.

Comment threadsrc/libraries/System.Private.CoreLib/src/System/StartupHookProvider.cs Outdated
@jander-msft

Copy link
Copy Markdown
ContributorAuthor

Test failures are due to the StartupHookTests.InvalidSimpleAssemblyName test method testing an implementation detail that if any of the specified assemblies are invalid then nothing is executed whereas my change allows execution of each startup hook in sequence up until the first failure. It'll rewrite my update to maintain the prior implementation behavior.

Comment threadsrc/tests/tracing/eventpipe/applystartuphook/ApplyStartupHookValidation.cs Outdated
Comment threadsrc/tests/tracing/eventpipe/applystartuphook/ApplyStartupHookValidation.cs Outdated
@jander-msft

Copy link
Copy Markdown
ContributorAuthor

If there is no other feedback, could I get this merged?

The two test jogs that are timing out are from Alma Linux Helix jobs, which were just removed in the main branch ~20 minutes ago: 4ae1668

@davmason
davmason merged commit 61ce817 into dotnet:mainJun 17, 2023
@ghostghost locked as resolved and limited conversation to collaborators Jul 17, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Diagnostics-coreclrcommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature Request] Diagnostic IPC command to dynamically add startup hook at diagnostic startup suspension

4 participants

@jander-msft@tommcdon@davmason@hoyosjs
, '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

Invoke startup hook from ApplyStartupHook diagnostic command - #87490

Merged
davmason merged 4 commits into
dotnet:mainfrom
jander-msft:applystartuphook-invoke
Jun 17, 2023
Merged

Invoke startup hook from ApplyStartupHook diagnostic command#87490
davmason merged 4 commits into
dotnet:mainfrom
jander-msft:applystartuphook-invoke

Conversation

@jander-msft

Copy link
Copy Markdown
Contributor

Update the new ApplyStartupHook diagnostic command to execute the startup hook if managed execution is already running. Add a test that starts an application, waits for managed code to start executing, applies the startup hook, and has the application validate that the startup hook was actually invoked.

cc @dotnet/dotnet-monitor

closes#83756

@ghostghost added area-Diagnostics-coreclr community-contribution Indicates that the PR has been added by a community member labels Jun 13, 2023
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @tommcdon
See info in area-owners.md if you want to be subscribed.

Issue Details

Update the new ApplyStartupHook diagnostic command to execute the startup hook if managed execution is already running. Add a test that starts an application, waits for managed code to start executing, applies the startup hook, and has the application validate that the startup hook was actually invoked.

cc @dotnet/dotnet-monitor

closes #83756

Author:jander-msft
Assignees:-
Labels:

area-Diagnostics-coreclr

Milestone:-

@tommcdon

Copy link
Copy Markdown
Member

@davmason@hoyosjs

GCX_COOP();

// Load and call startup hook since managed execution is already running.
MethodDescCallSite callStartupHook(METHOD__STARTUP_HOOK_PROVIDER__CALL_STARTUP_HOOK);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now that these can get loaded mid process - do we correctly document synchronization guarantees (none pretty much other than loading happens once) and expectations for injected code?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There aren't any guarantees around synchronization. Also, you could invoke this multiple times with the same startup hook assembly path, while the assembly should only be loaded once, its StartupHook.Initialize method would be called each time; it would be the responsibility of the startup hook implementation to guard against multiple execution, if it is impacted at all by it.

Comment threadsrc/libraries/System.Private.CoreLib/src/System/StartupHookProvider.cs Outdated
@jander-msft

Copy link
Copy Markdown
ContributorAuthor

Test failures are due to the StartupHookTests.InvalidSimpleAssemblyName test method testing an implementation detail that if any of the specified assemblies are invalid then nothing is executed whereas my change allows execution of each startup hook in sequence up until the first failure. It'll rewrite my update to maintain the prior implementation behavior.

Comment threadsrc/tests/tracing/eventpipe/applystartuphook/ApplyStartupHookValidation.cs Outdated
Comment threadsrc/tests/tracing/eventpipe/applystartuphook/ApplyStartupHookValidation.cs Outdated
@jander-msft

Copy link
Copy Markdown
ContributorAuthor

If there is no other feedback, could I get this merged?

The two test jogs that are timing out are from Alma Linux Helix jobs, which were just removed in the main branch ~20 minutes ago: 4ae1668

@davmason
davmason merged commit 61ce817 into dotnet:mainJun 17, 2023
@ghostghost locked as resolved and limited conversation to collaborators Jul 17, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Diagnostics-coreclrcommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature Request] Diagnostic IPC command to dynamically add startup hook at diagnostic startup suspension

4 participants

@jander-msft@tommcdon@davmason@hoyosjs
, '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

Invoke startup hook from ApplyStartupHook diagnostic command - #87490

Merged
davmason merged 4 commits into
dotnet:mainfrom
jander-msft:applystartuphook-invoke
Jun 17, 2023
Merged

Invoke startup hook from ApplyStartupHook diagnostic command#87490
davmason merged 4 commits into
dotnet:mainfrom
jander-msft:applystartuphook-invoke

Conversation

@jander-msft

Copy link
Copy Markdown
Contributor

Update the new ApplyStartupHook diagnostic command to execute the startup hook if managed execution is already running. Add a test that starts an application, waits for managed code to start executing, applies the startup hook, and has the application validate that the startup hook was actually invoked.

cc @dotnet/dotnet-monitor

closes#83756

@ghostghost added area-Diagnostics-coreclr community-contribution Indicates that the PR has been added by a community member labels Jun 13, 2023
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @tommcdon
See info in area-owners.md if you want to be subscribed.

Issue Details

Update the new ApplyStartupHook diagnostic command to execute the startup hook if managed execution is already running. Add a test that starts an application, waits for managed code to start executing, applies the startup hook, and has the application validate that the startup hook was actually invoked.

cc @dotnet/dotnet-monitor

closes #83756

Author:jander-msft
Assignees:-
Labels:

area-Diagnostics-coreclr

Milestone:-

@tommcdon

Copy link
Copy Markdown
Member

@davmason@hoyosjs

GCX_COOP();

// Load and call startup hook since managed execution is already running.
MethodDescCallSite callStartupHook(METHOD__STARTUP_HOOK_PROVIDER__CALL_STARTUP_HOOK);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now that these can get loaded mid process - do we correctly document synchronization guarantees (none pretty much other than loading happens once) and expectations for injected code?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There aren't any guarantees around synchronization. Also, you could invoke this multiple times with the same startup hook assembly path, while the assembly should only be loaded once, its StartupHook.Initialize method would be called each time; it would be the responsibility of the startup hook implementation to guard against multiple execution, if it is impacted at all by it.

Comment threadsrc/libraries/System.Private.CoreLib/src/System/StartupHookProvider.cs Outdated
@jander-msft

Copy link
Copy Markdown
ContributorAuthor

Test failures are due to the StartupHookTests.InvalidSimpleAssemblyName test method testing an implementation detail that if any of the specified assemblies are invalid then nothing is executed whereas my change allows execution of each startup hook in sequence up until the first failure. It'll rewrite my update to maintain the prior implementation behavior.

Comment threadsrc/tests/tracing/eventpipe/applystartuphook/ApplyStartupHookValidation.cs Outdated
Comment threadsrc/tests/tracing/eventpipe/applystartuphook/ApplyStartupHookValidation.cs Outdated
@jander-msft

Copy link
Copy Markdown
ContributorAuthor

If there is no other feedback, could I get this merged?

The two test jogs that are timing out are from Alma Linux Helix jobs, which were just removed in the main branch ~20 minutes ago: 4ae1668

@davmason
davmason merged commit 61ce817 into dotnet:mainJun 17, 2023
@ghostghost locked as resolved and limited conversation to collaborators Jul 17, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Diagnostics-coreclrcommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature Request] Diagnostic IPC command to dynamically add startup hook at diagnostic startup suspension

4 participants

@jander-msft@tommcdon@davmason@hoyosjs
, '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

Invoke startup hook from ApplyStartupHook diagnostic command - #87490

Merged
davmason merged 4 commits into
dotnet:mainfrom
jander-msft:applystartuphook-invoke
Jun 17, 2023
Merged

Invoke startup hook from ApplyStartupHook diagnostic command#87490
davmason merged 4 commits into
dotnet:mainfrom
jander-msft:applystartuphook-invoke

Conversation

@jander-msft

Copy link
Copy Markdown
Contributor

Update the new ApplyStartupHook diagnostic command to execute the startup hook if managed execution is already running. Add a test that starts an application, waits for managed code to start executing, applies the startup hook, and has the application validate that the startup hook was actually invoked.

cc @dotnet/dotnet-monitor

closes#83756

@ghostghost added area-Diagnostics-coreclr community-contribution Indicates that the PR has been added by a community member labels Jun 13, 2023
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @tommcdon
See info in area-owners.md if you want to be subscribed.

Issue Details

Update the new ApplyStartupHook diagnostic command to execute the startup hook if managed execution is already running. Add a test that starts an application, waits for managed code to start executing, applies the startup hook, and has the application validate that the startup hook was actually invoked.

cc @dotnet/dotnet-monitor

closes #83756

Author:jander-msft
Assignees:-
Labels:

area-Diagnostics-coreclr

Milestone:-

@tommcdon

Copy link
Copy Markdown
Member

@davmason@hoyosjs

GCX_COOP();

// Load and call startup hook since managed execution is already running.
MethodDescCallSite callStartupHook(METHOD__STARTUP_HOOK_PROVIDER__CALL_STARTUP_HOOK);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now that these can get loaded mid process - do we correctly document synchronization guarantees (none pretty much other than loading happens once) and expectations for injected code?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There aren't any guarantees around synchronization. Also, you could invoke this multiple times with the same startup hook assembly path, while the assembly should only be loaded once, its StartupHook.Initialize method would be called each time; it would be the responsibility of the startup hook implementation to guard against multiple execution, if it is impacted at all by it.

Comment threadsrc/libraries/System.Private.CoreLib/src/System/StartupHookProvider.cs Outdated
@jander-msft

Copy link
Copy Markdown
ContributorAuthor

Test failures are due to the StartupHookTests.InvalidSimpleAssemblyName test method testing an implementation detail that if any of the specified assemblies are invalid then nothing is executed whereas my change allows execution of each startup hook in sequence up until the first failure. It'll rewrite my update to maintain the prior implementation behavior.

Comment threadsrc/tests/tracing/eventpipe/applystartuphook/ApplyStartupHookValidation.cs Outdated
Comment threadsrc/tests/tracing/eventpipe/applystartuphook/ApplyStartupHookValidation.cs Outdated
@jander-msft

Copy link
Copy Markdown
ContributorAuthor

If there is no other feedback, could I get this merged?

The two test jogs that are timing out are from Alma Linux Helix jobs, which were just removed in the main branch ~20 minutes ago: 4ae1668

@davmason
davmason merged commit 61ce817 into dotnet:mainJun 17, 2023
@ghostghost locked as resolved and limited conversation to collaborators Jul 17, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Diagnostics-coreclrcommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature Request] Diagnostic IPC command to dynamically add startup hook at diagnostic startup suspension

4 participants

@jander-msft@tommcdon@davmason@hoyosjs
, '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

Invoke startup hook from ApplyStartupHook diagnostic command - #87490

Merged
davmason merged 4 commits into
dotnet:mainfrom
jander-msft:applystartuphook-invoke
Jun 17, 2023
Merged

Invoke startup hook from ApplyStartupHook diagnostic command#87490
davmason merged 4 commits into
dotnet:mainfrom
jander-msft:applystartuphook-invoke

Conversation

@jander-msft

Copy link
Copy Markdown
Contributor

Update the new ApplyStartupHook diagnostic command to execute the startup hook if managed execution is already running. Add a test that starts an application, waits for managed code to start executing, applies the startup hook, and has the application validate that the startup hook was actually invoked.

cc @dotnet/dotnet-monitor

closes#83756

@ghostghost added area-Diagnostics-coreclr community-contribution Indicates that the PR has been added by a community member labels Jun 13, 2023
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @tommcdon
See info in area-owners.md if you want to be subscribed.

Issue Details

Update the new ApplyStartupHook diagnostic command to execute the startup hook if managed execution is already running. Add a test that starts an application, waits for managed code to start executing, applies the startup hook, and has the application validate that the startup hook was actually invoked.

cc @dotnet/dotnet-monitor

closes #83756

Author:jander-msft
Assignees:-
Labels:

area-Diagnostics-coreclr

Milestone:-

@tommcdon

Copy link
Copy Markdown
Member

@davmason@hoyosjs

GCX_COOP();

// Load and call startup hook since managed execution is already running.
MethodDescCallSite callStartupHook(METHOD__STARTUP_HOOK_PROVIDER__CALL_STARTUP_HOOK);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now that these can get loaded mid process - do we correctly document synchronization guarantees (none pretty much other than loading happens once) and expectations for injected code?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There aren't any guarantees around synchronization. Also, you could invoke this multiple times with the same startup hook assembly path, while the assembly should only be loaded once, its StartupHook.Initialize method would be called each time; it would be the responsibility of the startup hook implementation to guard against multiple execution, if it is impacted at all by it.

Comment threadsrc/libraries/System.Private.CoreLib/src/System/StartupHookProvider.cs Outdated
@jander-msft

Copy link
Copy Markdown
ContributorAuthor

Test failures are due to the StartupHookTests.InvalidSimpleAssemblyName test method testing an implementation detail that if any of the specified assemblies are invalid then nothing is executed whereas my change allows execution of each startup hook in sequence up until the first failure. It'll rewrite my update to maintain the prior implementation behavior.

Comment threadsrc/tests/tracing/eventpipe/applystartuphook/ApplyStartupHookValidation.cs Outdated
Comment threadsrc/tests/tracing/eventpipe/applystartuphook/ApplyStartupHookValidation.cs Outdated
@jander-msft

Copy link
Copy Markdown
ContributorAuthor

If there is no other feedback, could I get this merged?

The two test jogs that are timing out are from Alma Linux Helix jobs, which were just removed in the main branch ~20 minutes ago: 4ae1668

@davmason
davmason merged commit 61ce817 into dotnet:mainJun 17, 2023
@ghostghost locked as resolved and limited conversation to collaborators Jul 17, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Diagnostics-coreclrcommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature Request] Diagnostic IPC command to dynamically add startup hook at diagnostic startup suspension

4 participants

@jander-msft@tommcdon@davmason@hoyosjs
, '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

Invoke startup hook from ApplyStartupHook diagnostic command - #87490

Merged
davmason merged 4 commits into
dotnet:mainfrom
jander-msft:applystartuphook-invoke
Jun 17, 2023
Merged

Invoke startup hook from ApplyStartupHook diagnostic command#87490
davmason merged 4 commits into
dotnet:mainfrom
jander-msft:applystartuphook-invoke

Conversation

@jander-msft

Copy link
Copy Markdown
Contributor

Update the new ApplyStartupHook diagnostic command to execute the startup hook if managed execution is already running. Add a test that starts an application, waits for managed code to start executing, applies the startup hook, and has the application validate that the startup hook was actually invoked.

cc @dotnet/dotnet-monitor

closes#83756

@ghostghost added area-Diagnostics-coreclr community-contribution Indicates that the PR has been added by a community member labels Jun 13, 2023
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @tommcdon
See info in area-owners.md if you want to be subscribed.

Issue Details

Update the new ApplyStartupHook diagnostic command to execute the startup hook if managed execution is already running. Add a test that starts an application, waits for managed code to start executing, applies the startup hook, and has the application validate that the startup hook was actually invoked.

cc @dotnet/dotnet-monitor

closes #83756

Author:jander-msft
Assignees:-
Labels:

area-Diagnostics-coreclr

Milestone:-

@tommcdon

Copy link
Copy Markdown
Member

@davmason@hoyosjs

GCX_COOP();

// Load and call startup hook since managed execution is already running.
MethodDescCallSite callStartupHook(METHOD__STARTUP_HOOK_PROVIDER__CALL_STARTUP_HOOK);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now that these can get loaded mid process - do we correctly document synchronization guarantees (none pretty much other than loading happens once) and expectations for injected code?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There aren't any guarantees around synchronization. Also, you could invoke this multiple times with the same startup hook assembly path, while the assembly should only be loaded once, its StartupHook.Initialize method would be called each time; it would be the responsibility of the startup hook implementation to guard against multiple execution, if it is impacted at all by it.

Comment threadsrc/libraries/System.Private.CoreLib/src/System/StartupHookProvider.cs Outdated
@jander-msft

Copy link
Copy Markdown
ContributorAuthor

Test failures are due to the StartupHookTests.InvalidSimpleAssemblyName test method testing an implementation detail that if any of the specified assemblies are invalid then nothing is executed whereas my change allows execution of each startup hook in sequence up until the first failure. It'll rewrite my update to maintain the prior implementation behavior.

Comment threadsrc/tests/tracing/eventpipe/applystartuphook/ApplyStartupHookValidation.cs Outdated
Comment threadsrc/tests/tracing/eventpipe/applystartuphook/ApplyStartupHookValidation.cs Outdated
@jander-msft

Copy link
Copy Markdown
ContributorAuthor

If there is no other feedback, could I get this merged?

The two test jogs that are timing out are from Alma Linux Helix jobs, which were just removed in the main branch ~20 minutes ago: 4ae1668

@davmason
davmason merged commit 61ce817 into dotnet:mainJun 17, 2023
@ghostghost locked as resolved and limited conversation to collaborators Jul 17, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Diagnostics-coreclrcommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature Request] Diagnostic IPC command to dynamically add startup hook at diagnostic startup suspension

4 participants

@jander-msft@tommcdon@davmason@hoyosjs
, '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

Invoke startup hook from ApplyStartupHook diagnostic command - #87490

Merged
davmason merged 4 commits into
dotnet:mainfrom
jander-msft:applystartuphook-invoke
Jun 17, 2023
Merged

Invoke startup hook from ApplyStartupHook diagnostic command#87490
davmason merged 4 commits into
dotnet:mainfrom
jander-msft:applystartuphook-invoke

Conversation

@jander-msft

Copy link
Copy Markdown
Contributor

Update the new ApplyStartupHook diagnostic command to execute the startup hook if managed execution is already running. Add a test that starts an application, waits for managed code to start executing, applies the startup hook, and has the application validate that the startup hook was actually invoked.

cc @dotnet/dotnet-monitor

closes#83756

@ghostghost added area-Diagnostics-coreclr community-contribution Indicates that the PR has been added by a community member labels Jun 13, 2023
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @tommcdon
See info in area-owners.md if you want to be subscribed.

Issue Details

Update the new ApplyStartupHook diagnostic command to execute the startup hook if managed execution is already running. Add a test that starts an application, waits for managed code to start executing, applies the startup hook, and has the application validate that the startup hook was actually invoked.

cc @dotnet/dotnet-monitor

closes #83756

Author:jander-msft
Assignees:-
Labels:

area-Diagnostics-coreclr

Milestone:-

@tommcdon

Copy link
Copy Markdown
Member

@davmason@hoyosjs

GCX_COOP();

// Load and call startup hook since managed execution is already running.
MethodDescCallSite callStartupHook(METHOD__STARTUP_HOOK_PROVIDER__CALL_STARTUP_HOOK);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now that these can get loaded mid process - do we correctly document synchronization guarantees (none pretty much other than loading happens once) and expectations for injected code?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There aren't any guarantees around synchronization. Also, you could invoke this multiple times with the same startup hook assembly path, while the assembly should only be loaded once, its StartupHook.Initialize method would be called each time; it would be the responsibility of the startup hook implementation to guard against multiple execution, if it is impacted at all by it.

Comment threadsrc/libraries/System.Private.CoreLib/src/System/StartupHookProvider.cs Outdated
@jander-msft

Copy link
Copy Markdown
ContributorAuthor

Test failures are due to the StartupHookTests.InvalidSimpleAssemblyName test method testing an implementation detail that if any of the specified assemblies are invalid then nothing is executed whereas my change allows execution of each startup hook in sequence up until the first failure. It'll rewrite my update to maintain the prior implementation behavior.

Comment threadsrc/tests/tracing/eventpipe/applystartuphook/ApplyStartupHookValidation.cs Outdated
Comment threadsrc/tests/tracing/eventpipe/applystartuphook/ApplyStartupHookValidation.cs Outdated
@jander-msft

Copy link
Copy Markdown
ContributorAuthor

If there is no other feedback, could I get this merged?

The two test jogs that are timing out are from Alma Linux Helix jobs, which were just removed in the main branch ~20 minutes ago: 4ae1668

@davmason
davmason merged commit 61ce817 into dotnet:mainJun 17, 2023
@ghostghost locked as resolved and limited conversation to collaborators Jul 17, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Diagnostics-coreclrcommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature Request] Diagnostic IPC command to dynamically add startup hook at diagnostic startup suspension

4 participants

@jander-msft@tommcdon@davmason@hoyosjs