[cdac] Implement ISOSDacInterface::GetObjectData getting COM RCW/CCW - #105846

Merged
elinor-fung merged 8 commits into
dotnet:mainfrom
elinor-fung:cdac-object-data-com
Aug 6, 2024
Merged

[cdac] Implement ISOSDacInterface::GetObjectData getting COM RCW/CCW#105846
elinor-fung merged 8 commits into
dotnet:mainfrom
elinor-fung:cdac-object-data-com

Conversation

@elinor-fung

@elinor-fungelinor-fung commented Aug 1, 2024

Copy link
Copy Markdown
Member
  • Add SyncTableEntry, SyncBlock, InteropSyncBlockInfo data descriptors, SyncTableEntries global
  • Get the sync block corresponding to a given object address in Object contract
  • Add GetComData to Object contract
  • Finish implementation of ISOSDacInterface::GetObjectData such that it populates the RCW/CCW
  • Add test helpers for mocking out sync blocks

Contributes to #99302

Manually validated with a COM server and callback that the RCW/CCW were set when expected and matched values returned by DAC.
Ran SOS unit tests from diagnostics repo using private build.

@elinor-fungelinor-fung mentioned this pull request Aug 2, 2024
25 tasks
Comment threadsrc/coreclr/debug/daccess/request.cpp Outdated
struct cdac_data<InteropSyncBlockInfo>
{
#ifdef FEATURE_COMINTEROP
static constexpr size_t CCW = offsetof(InteropSyncBlockInfo, m_pCCW);

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.

I assume this is only for built-in. Are we going to defer ComWrappers support for later? Same for RCW.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Yeah. I deferred for later.

I went back and forth on object contract should have

  1. GetComData for built-in and GetComWrappersData for ComWrappers
  2. GetComData for both built-in and ComWrappers
  3. Separate functions for each (trying to thing of names was a struggle) - GetRCW/CCW (built-in), GetComWrappersRCW, GetComWrappersManagedObjectWrapperList

I ended up with (1) - definitely open to thoughts.

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.

What about if we call it "BuiltInComData" to match how our docs and current code talk about built-in COM vs ComWrappers?

Then in the future, the contract to pull data about built-in RCWs and CCWs could be called "BuiltInCom" and the ComWrappers one could be "ComWrappers".

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Renamed to GetBuiltInComData

Comment threadsrc/native/managed/cdacreader/src/Contracts/Object_1.cs Outdated
Comment threaddocs/design/datacontracts/Object.md Outdated
Comment threaddocs/design/datacontracts/Object.md Outdated
Co-authored-by: Aaron Robinson <arobins@microsoft.com>
@elinor-fung
elinor-fung merged commit c5a89d4 into dotnet:mainAug 6, 2024
@elinor-fung
elinor-fung deleted the cdac-object-data-com branch August 6, 2024 19:38
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Sep 7, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@elinor-fung@jkoritzinsky@AaronRobinsonMSFT
, '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

[cdac] Implement ISOSDacInterface::GetObjectData getting COM RCW/CCW - #105846

Merged
elinor-fung merged 8 commits into
dotnet:mainfrom
elinor-fung:cdac-object-data-com
Aug 6, 2024
Merged

[cdac] Implement ISOSDacInterface::GetObjectData getting COM RCW/CCW#105846
elinor-fung merged 8 commits into
dotnet:mainfrom
elinor-fung:cdac-object-data-com

Conversation

@elinor-fung

@elinor-fungelinor-fung commented Aug 1, 2024

Copy link
Copy Markdown
Member
  • Add SyncTableEntry, SyncBlock, InteropSyncBlockInfo data descriptors, SyncTableEntries global
  • Get the sync block corresponding to a given object address in Object contract
  • Add GetComData to Object contract
  • Finish implementation of ISOSDacInterface::GetObjectData such that it populates the RCW/CCW
  • Add test helpers for mocking out sync blocks

Contributes to #99302

Manually validated with a COM server and callback that the RCW/CCW were set when expected and matched values returned by DAC.
Ran SOS unit tests from diagnostics repo using private build.

@elinor-fungelinor-fung mentioned this pull request Aug 2, 2024
25 tasks
Comment threadsrc/coreclr/debug/daccess/request.cpp Outdated
struct cdac_data<InteropSyncBlockInfo>
{
#ifdef FEATURE_COMINTEROP
static constexpr size_t CCW = offsetof(InteropSyncBlockInfo, m_pCCW);

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.

I assume this is only for built-in. Are we going to defer ComWrappers support for later? Same for RCW.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Yeah. I deferred for later.

I went back and forth on object contract should have

  1. GetComData for built-in and GetComWrappersData for ComWrappers
  2. GetComData for both built-in and ComWrappers
  3. Separate functions for each (trying to thing of names was a struggle) - GetRCW/CCW (built-in), GetComWrappersRCW, GetComWrappersManagedObjectWrapperList

I ended up with (1) - definitely open to thoughts.

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.

What about if we call it "BuiltInComData" to match how our docs and current code talk about built-in COM vs ComWrappers?

Then in the future, the contract to pull data about built-in RCWs and CCWs could be called "BuiltInCom" and the ComWrappers one could be "ComWrappers".

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Renamed to GetBuiltInComData

Comment threadsrc/native/managed/cdacreader/src/Contracts/Object_1.cs Outdated
Comment threaddocs/design/datacontracts/Object.md Outdated
Comment threaddocs/design/datacontracts/Object.md Outdated
Co-authored-by: Aaron Robinson <arobins@microsoft.com>
@elinor-fung
elinor-fung merged commit c5a89d4 into dotnet:mainAug 6, 2024
@elinor-fung
elinor-fung deleted the cdac-object-data-com branch August 6, 2024 19:38
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Sep 7, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@elinor-fung@jkoritzinsky@AaronRobinsonMSFT
, '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

[cdac] Implement ISOSDacInterface::GetObjectData getting COM RCW/CCW - #105846

Merged
elinor-fung merged 8 commits into
dotnet:mainfrom
elinor-fung:cdac-object-data-com
Aug 6, 2024
Merged

[cdac] Implement ISOSDacInterface::GetObjectData getting COM RCW/CCW#105846
elinor-fung merged 8 commits into
dotnet:mainfrom
elinor-fung:cdac-object-data-com

Conversation

@elinor-fung

@elinor-fungelinor-fung commented Aug 1, 2024

Copy link
Copy Markdown
Member
  • Add SyncTableEntry, SyncBlock, InteropSyncBlockInfo data descriptors, SyncTableEntries global
  • Get the sync block corresponding to a given object address in Object contract
  • Add GetComData to Object contract
  • Finish implementation of ISOSDacInterface::GetObjectData such that it populates the RCW/CCW
  • Add test helpers for mocking out sync blocks

Contributes to #99302

Manually validated with a COM server and callback that the RCW/CCW were set when expected and matched values returned by DAC.
Ran SOS unit tests from diagnostics repo using private build.

@elinor-fungelinor-fung mentioned this pull request Aug 2, 2024
25 tasks
Comment threadsrc/coreclr/debug/daccess/request.cpp Outdated
struct cdac_data<InteropSyncBlockInfo>
{
#ifdef FEATURE_COMINTEROP
static constexpr size_t CCW = offsetof(InteropSyncBlockInfo, m_pCCW);

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.

I assume this is only for built-in. Are we going to defer ComWrappers support for later? Same for RCW.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Yeah. I deferred for later.

I went back and forth on object contract should have

  1. GetComData for built-in and GetComWrappersData for ComWrappers
  2. GetComData for both built-in and ComWrappers
  3. Separate functions for each (trying to thing of names was a struggle) - GetRCW/CCW (built-in), GetComWrappersRCW, GetComWrappersManagedObjectWrapperList

I ended up with (1) - definitely open to thoughts.

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.

What about if we call it "BuiltInComData" to match how our docs and current code talk about built-in COM vs ComWrappers?

Then in the future, the contract to pull data about built-in RCWs and CCWs could be called "BuiltInCom" and the ComWrappers one could be "ComWrappers".

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Renamed to GetBuiltInComData

Comment threadsrc/native/managed/cdacreader/src/Contracts/Object_1.cs Outdated
Comment threaddocs/design/datacontracts/Object.md Outdated
Comment threaddocs/design/datacontracts/Object.md Outdated
Co-authored-by: Aaron Robinson <arobins@microsoft.com>
@elinor-fung
elinor-fung merged commit c5a89d4 into dotnet:mainAug 6, 2024
@elinor-fung
elinor-fung deleted the cdac-object-data-com branch August 6, 2024 19:38
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Sep 7, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@elinor-fung@jkoritzinsky@AaronRobinsonMSFT
, '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

[cdac] Implement ISOSDacInterface::GetObjectData getting COM RCW/CCW - #105846

Merged
elinor-fung merged 8 commits into
dotnet:mainfrom
elinor-fung:cdac-object-data-com
Aug 6, 2024
Merged

[cdac] Implement ISOSDacInterface::GetObjectData getting COM RCW/CCW#105846
elinor-fung merged 8 commits into
dotnet:mainfrom
elinor-fung:cdac-object-data-com

Conversation

@elinor-fung

@elinor-fungelinor-fung commented Aug 1, 2024

Copy link
Copy Markdown
Member
  • Add SyncTableEntry, SyncBlock, InteropSyncBlockInfo data descriptors, SyncTableEntries global
  • Get the sync block corresponding to a given object address in Object contract
  • Add GetComData to Object contract
  • Finish implementation of ISOSDacInterface::GetObjectData such that it populates the RCW/CCW
  • Add test helpers for mocking out sync blocks

Contributes to #99302

Manually validated with a COM server and callback that the RCW/CCW were set when expected and matched values returned by DAC.
Ran SOS unit tests from diagnostics repo using private build.

@elinor-fungelinor-fung mentioned this pull request Aug 2, 2024
25 tasks
Comment threadsrc/coreclr/debug/daccess/request.cpp Outdated
struct cdac_data<InteropSyncBlockInfo>
{
#ifdef FEATURE_COMINTEROP
static constexpr size_t CCW = offsetof(InteropSyncBlockInfo, m_pCCW);

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.

I assume this is only for built-in. Are we going to defer ComWrappers support for later? Same for RCW.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Yeah. I deferred for later.

I went back and forth on object contract should have

  1. GetComData for built-in and GetComWrappersData for ComWrappers
  2. GetComData for both built-in and ComWrappers
  3. Separate functions for each (trying to thing of names was a struggle) - GetRCW/CCW (built-in), GetComWrappersRCW, GetComWrappersManagedObjectWrapperList

I ended up with (1) - definitely open to thoughts.

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.

What about if we call it "BuiltInComData" to match how our docs and current code talk about built-in COM vs ComWrappers?

Then in the future, the contract to pull data about built-in RCWs and CCWs could be called "BuiltInCom" and the ComWrappers one could be "ComWrappers".

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Renamed to GetBuiltInComData

Comment threadsrc/native/managed/cdacreader/src/Contracts/Object_1.cs Outdated
Comment threaddocs/design/datacontracts/Object.md Outdated
Comment threaddocs/design/datacontracts/Object.md Outdated
Co-authored-by: Aaron Robinson <arobins@microsoft.com>
@elinor-fung
elinor-fung merged commit c5a89d4 into dotnet:mainAug 6, 2024
@elinor-fung
elinor-fung deleted the cdac-object-data-com branch August 6, 2024 19:38
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Sep 7, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@elinor-fung@jkoritzinsky@AaronRobinsonMSFT
, '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

[cdac] Implement ISOSDacInterface::GetObjectData getting COM RCW/CCW - #105846

Merged
elinor-fung merged 8 commits into
dotnet:mainfrom
elinor-fung:cdac-object-data-com
Aug 6, 2024
Merged

[cdac] Implement ISOSDacInterface::GetObjectData getting COM RCW/CCW#105846
elinor-fung merged 8 commits into
dotnet:mainfrom
elinor-fung:cdac-object-data-com

Conversation

@elinor-fung

@elinor-fungelinor-fung commented Aug 1, 2024

Copy link
Copy Markdown
Member
  • Add SyncTableEntry, SyncBlock, InteropSyncBlockInfo data descriptors, SyncTableEntries global
  • Get the sync block corresponding to a given object address in Object contract
  • Add GetComData to Object contract
  • Finish implementation of ISOSDacInterface::GetObjectData such that it populates the RCW/CCW
  • Add test helpers for mocking out sync blocks

Contributes to #99302

Manually validated with a COM server and callback that the RCW/CCW were set when expected and matched values returned by DAC.
Ran SOS unit tests from diagnostics repo using private build.

@elinor-fungelinor-fung mentioned this pull request Aug 2, 2024
25 tasks
Comment threadsrc/coreclr/debug/daccess/request.cpp Outdated
struct cdac_data<InteropSyncBlockInfo>
{
#ifdef FEATURE_COMINTEROP
static constexpr size_t CCW = offsetof(InteropSyncBlockInfo, m_pCCW);

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.

I assume this is only for built-in. Are we going to defer ComWrappers support for later? Same for RCW.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Yeah. I deferred for later.

I went back and forth on object contract should have

  1. GetComData for built-in and GetComWrappersData for ComWrappers
  2. GetComData for both built-in and ComWrappers
  3. Separate functions for each (trying to thing of names was a struggle) - GetRCW/CCW (built-in), GetComWrappersRCW, GetComWrappersManagedObjectWrapperList

I ended up with (1) - definitely open to thoughts.

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.

What about if we call it "BuiltInComData" to match how our docs and current code talk about built-in COM vs ComWrappers?

Then in the future, the contract to pull data about built-in RCWs and CCWs could be called "BuiltInCom" and the ComWrappers one could be "ComWrappers".

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Renamed to GetBuiltInComData

Comment threadsrc/native/managed/cdacreader/src/Contracts/Object_1.cs Outdated
Comment threaddocs/design/datacontracts/Object.md Outdated
Comment threaddocs/design/datacontracts/Object.md Outdated
Co-authored-by: Aaron Robinson <arobins@microsoft.com>
@elinor-fung
elinor-fung merged commit c5a89d4 into dotnet:mainAug 6, 2024
@elinor-fung
elinor-fung deleted the cdac-object-data-com branch August 6, 2024 19:38
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Sep 7, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@elinor-fung@jkoritzinsky@AaronRobinsonMSFT
, '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

[cdac] Implement ISOSDacInterface::GetObjectData getting COM RCW/CCW - #105846

Merged
elinor-fung merged 8 commits into
dotnet:mainfrom
elinor-fung:cdac-object-data-com
Aug 6, 2024
Merged

[cdac] Implement ISOSDacInterface::GetObjectData getting COM RCW/CCW#105846
elinor-fung merged 8 commits into
dotnet:mainfrom
elinor-fung:cdac-object-data-com

Conversation

@elinor-fung

@elinor-fungelinor-fung commented Aug 1, 2024

Copy link
Copy Markdown
Member
  • Add SyncTableEntry, SyncBlock, InteropSyncBlockInfo data descriptors, SyncTableEntries global
  • Get the sync block corresponding to a given object address in Object contract
  • Add GetComData to Object contract
  • Finish implementation of ISOSDacInterface::GetObjectData such that it populates the RCW/CCW
  • Add test helpers for mocking out sync blocks

Contributes to #99302

Manually validated with a COM server and callback that the RCW/CCW were set when expected and matched values returned by DAC.
Ran SOS unit tests from diagnostics repo using private build.

@elinor-fungelinor-fung mentioned this pull request Aug 2, 2024
25 tasks
Comment threadsrc/coreclr/debug/daccess/request.cpp Outdated
struct cdac_data<InteropSyncBlockInfo>
{
#ifdef FEATURE_COMINTEROP
static constexpr size_t CCW = offsetof(InteropSyncBlockInfo, m_pCCW);

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.

I assume this is only for built-in. Are we going to defer ComWrappers support for later? Same for RCW.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Yeah. I deferred for later.

I went back and forth on object contract should have

  1. GetComData for built-in and GetComWrappersData for ComWrappers
  2. GetComData for both built-in and ComWrappers
  3. Separate functions for each (trying to thing of names was a struggle) - GetRCW/CCW (built-in), GetComWrappersRCW, GetComWrappersManagedObjectWrapperList

I ended up with (1) - definitely open to thoughts.

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.

What about if we call it "BuiltInComData" to match how our docs and current code talk about built-in COM vs ComWrappers?

Then in the future, the contract to pull data about built-in RCWs and CCWs could be called "BuiltInCom" and the ComWrappers one could be "ComWrappers".

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Renamed to GetBuiltInComData

Comment threadsrc/native/managed/cdacreader/src/Contracts/Object_1.cs Outdated
Comment threaddocs/design/datacontracts/Object.md Outdated
Comment threaddocs/design/datacontracts/Object.md Outdated
Co-authored-by: Aaron Robinson <arobins@microsoft.com>
@elinor-fung
elinor-fung merged commit c5a89d4 into dotnet:mainAug 6, 2024
@elinor-fung
elinor-fung deleted the cdac-object-data-com branch August 6, 2024 19:38
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Sep 7, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@elinor-fung@jkoritzinsky@AaronRobinsonMSFT
, '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

[cdac] Implement ISOSDacInterface::GetObjectData getting COM RCW/CCW - #105846

Merged
elinor-fung merged 8 commits into
dotnet:mainfrom
elinor-fung:cdac-object-data-com
Aug 6, 2024
Merged

[cdac] Implement ISOSDacInterface::GetObjectData getting COM RCW/CCW#105846
elinor-fung merged 8 commits into
dotnet:mainfrom
elinor-fung:cdac-object-data-com

Conversation

@elinor-fung

@elinor-fungelinor-fung commented Aug 1, 2024

Copy link
Copy Markdown
Member
  • Add SyncTableEntry, SyncBlock, InteropSyncBlockInfo data descriptors, SyncTableEntries global
  • Get the sync block corresponding to a given object address in Object contract
  • Add GetComData to Object contract
  • Finish implementation of ISOSDacInterface::GetObjectData such that it populates the RCW/CCW
  • Add test helpers for mocking out sync blocks

Contributes to #99302

Manually validated with a COM server and callback that the RCW/CCW were set when expected and matched values returned by DAC.
Ran SOS unit tests from diagnostics repo using private build.

@elinor-fungelinor-fung mentioned this pull request Aug 2, 2024
25 tasks
Comment threadsrc/coreclr/debug/daccess/request.cpp Outdated
struct cdac_data<InteropSyncBlockInfo>
{
#ifdef FEATURE_COMINTEROP
static constexpr size_t CCW = offsetof(InteropSyncBlockInfo, m_pCCW);

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.

I assume this is only for built-in. Are we going to defer ComWrappers support for later? Same for RCW.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Yeah. I deferred for later.

I went back and forth on object contract should have

  1. GetComData for built-in and GetComWrappersData for ComWrappers
  2. GetComData for both built-in and ComWrappers
  3. Separate functions for each (trying to thing of names was a struggle) - GetRCW/CCW (built-in), GetComWrappersRCW, GetComWrappersManagedObjectWrapperList

I ended up with (1) - definitely open to thoughts.

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.

What about if we call it "BuiltInComData" to match how our docs and current code talk about built-in COM vs ComWrappers?

Then in the future, the contract to pull data about built-in RCWs and CCWs could be called "BuiltInCom" and the ComWrappers one could be "ComWrappers".

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Renamed to GetBuiltInComData

Comment threadsrc/native/managed/cdacreader/src/Contracts/Object_1.cs Outdated
Comment threaddocs/design/datacontracts/Object.md Outdated
Comment threaddocs/design/datacontracts/Object.md Outdated
Co-authored-by: Aaron Robinson <arobins@microsoft.com>
@elinor-fung
elinor-fung merged commit c5a89d4 into dotnet:mainAug 6, 2024
@elinor-fung
elinor-fung deleted the cdac-object-data-com branch August 6, 2024 19:38
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Sep 7, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@elinor-fung@jkoritzinsky@AaronRobinsonMSFT
, '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

[cdac] Implement ISOSDacInterface::GetObjectData getting COM RCW/CCW - #105846

Merged
elinor-fung merged 8 commits into
dotnet:mainfrom
elinor-fung:cdac-object-data-com
Aug 6, 2024
Merged

[cdac] Implement ISOSDacInterface::GetObjectData getting COM RCW/CCW#105846
elinor-fung merged 8 commits into
dotnet:mainfrom
elinor-fung:cdac-object-data-com

Conversation

@elinor-fung

@elinor-fungelinor-fung commented Aug 1, 2024

Copy link
Copy Markdown
Member
  • Add SyncTableEntry, SyncBlock, InteropSyncBlockInfo data descriptors, SyncTableEntries global
  • Get the sync block corresponding to a given object address in Object contract
  • Add GetComData to Object contract
  • Finish implementation of ISOSDacInterface::GetObjectData such that it populates the RCW/CCW
  • Add test helpers for mocking out sync blocks

Contributes to #99302

Manually validated with a COM server and callback that the RCW/CCW were set when expected and matched values returned by DAC.
Ran SOS unit tests from diagnostics repo using private build.

@elinor-fungelinor-fung mentioned this pull request Aug 2, 2024
25 tasks
Comment threadsrc/coreclr/debug/daccess/request.cpp Outdated
struct cdac_data<InteropSyncBlockInfo>
{
#ifdef FEATURE_COMINTEROP
static constexpr size_t CCW = offsetof(InteropSyncBlockInfo, m_pCCW);

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.

I assume this is only for built-in. Are we going to defer ComWrappers support for later? Same for RCW.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Yeah. I deferred for later.

I went back and forth on object contract should have

  1. GetComData for built-in and GetComWrappersData for ComWrappers
  2. GetComData for both built-in and ComWrappers
  3. Separate functions for each (trying to thing of names was a struggle) - GetRCW/CCW (built-in), GetComWrappersRCW, GetComWrappersManagedObjectWrapperList

I ended up with (1) - definitely open to thoughts.

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.

What about if we call it "BuiltInComData" to match how our docs and current code talk about built-in COM vs ComWrappers?

Then in the future, the contract to pull data about built-in RCWs and CCWs could be called "BuiltInCom" and the ComWrappers one could be "ComWrappers".

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Renamed to GetBuiltInComData

Comment threadsrc/native/managed/cdacreader/src/Contracts/Object_1.cs Outdated
Comment threaddocs/design/datacontracts/Object.md Outdated
Comment threaddocs/design/datacontracts/Object.md Outdated
Co-authored-by: Aaron Robinson <arobins@microsoft.com>
@elinor-fung
elinor-fung merged commit c5a89d4 into dotnet:mainAug 6, 2024
@elinor-fung
elinor-fung deleted the cdac-object-data-com branch August 6, 2024 19:38
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Sep 7, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@elinor-fung@jkoritzinsky@AaronRobinsonMSFT