[cDAC] Compute MethodDesc size directly to support more heap dump scenarios - #124772

Merged
max-charlamb merged 4 commits into
dotnet:mainfrom
max-charlamb:cdac-dumptests-heap-fix-2
Feb 24, 2026
Merged

[cDAC] Compute MethodDesc size directly to support more heap dump scenarios#124772
max-charlamb merged 4 commits into
dotnet:mainfrom
max-charlamb:cdac-dumptests-heap-fix-2

Conversation

@max-charlamb

Copy link
Copy Markdown
Member

Modifies how MethodDesc sizes are computed. Instead of using the runtime s_ClassificationSizeTable which is not present in heap dumps, RuntimeTypeSystem now computes the MethodDesc size from datadescriptors.

Modified DumpTests to run on heap dumps for verification.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

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

@max-charlambmax-charlamb changed the title [cDAC] Allow more functionality in heap dumps[cDAC] Compute MethodDesc size directly to support more heap dump scenariosFeb 24, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR modifies how MethodDesc sizes are computed in the cDAC RuntimeTypeSystem contract to support heap dumps. Previously, the code read from the runtime's s_ClassificationSizeTable global, which is not available in heap dumps. The new implementation computes the MethodDesc size directly from data descriptor type sizes, mirroring the runtime's size table logic but using only metadata that's available in heap dumps.

Changes:

  • Replaced runtime table lookup with data-descriptor-based size computation for MethodDesc instances
  • Added AsyncMethodData data type for computing optional slot sizes
  • Changed TypeHierarchy test debuggee to use heap dumps instead of full dumps for verification

Reviewed changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated 4 comments.

Show a summary per file
FileDescription
RuntimeTypeSystem_1.csReimplemented ComputeSize method to calculate MethodDesc size from data descriptor sizes instead of reading s_ClassificationSizeTable
Constants.csRemoved MethodDescSizeTable global constant that's no longer needed
DataType.csAdded AsyncMethodData enum value for the async method data slot
datadescriptor.incAdded AsyncMethodData data descriptor and removed MethodDescSizeTable global
MockDescriptors.MethodDescriptors.csUpdated mock tests to remove dummy MethodDescSizeTable and add AsyncMethodData type info
RuntimeTypeSystemDumpTests.csRemoved DumpType override to use default "heap" dumps
TypeHierarchy.csprojChanged dump type from "Full" to "Heap"
RuntimeTypeSystem.mdUpdated documentation to reflect new size computation approach and removed MethodDescSizeTable global

- Use DataType.CLRToCOMCallMethodDesc for ComInterop classification
- Use DataType.NonVtableSlot instead of target.PointerSize
- Use DataType.NativeCodeSlot instead of target.PointerSize
- Fix error message typo: AsyncMethodDescData -> AsyncMethodData
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@max-charlamb
max-charlamb merged commit ae967fe into dotnet:mainFeb 24, 2026
110 of 114 checks passed
@max-charlamb
max-charlamb deleted the cdac-dumptests-heap-fix-2 branch February 24, 2026 03:19
iremyux pushed a commit to iremyux/dotnet-runtime that referenced this pull request Mar 2, 2026
…narios (dotnet#124772)
Modifies how MethodDesc sizes are computed. Instead of using the runtime
`s_ClassificationSizeTable` which is not present in heap dumps,
RuntimeTypeSystem now computes the MethodDesc size from datadescriptors.
Modified DumpTests to run on heap dumps for verification.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Mar 26, 2026
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.

4 participants

@max-charlamb@noahfalk@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

[cDAC] Compute MethodDesc size directly to support more heap dump scenarios - #124772

Merged
max-charlamb merged 4 commits into
dotnet:mainfrom
max-charlamb:cdac-dumptests-heap-fix-2
Feb 24, 2026
Merged

[cDAC] Compute MethodDesc size directly to support more heap dump scenarios#124772
max-charlamb merged 4 commits into
dotnet:mainfrom
max-charlamb:cdac-dumptests-heap-fix-2

Conversation

@max-charlamb

Copy link
Copy Markdown
Member

Modifies how MethodDesc sizes are computed. Instead of using the runtime s_ClassificationSizeTable which is not present in heap dumps, RuntimeTypeSystem now computes the MethodDesc size from datadescriptors.

Modified DumpTests to run on heap dumps for verification.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

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

@max-charlambmax-charlamb changed the title [cDAC] Allow more functionality in heap dumps[cDAC] Compute MethodDesc size directly to support more heap dump scenariosFeb 24, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR modifies how MethodDesc sizes are computed in the cDAC RuntimeTypeSystem contract to support heap dumps. Previously, the code read from the runtime's s_ClassificationSizeTable global, which is not available in heap dumps. The new implementation computes the MethodDesc size directly from data descriptor type sizes, mirroring the runtime's size table logic but using only metadata that's available in heap dumps.

Changes:

  • Replaced runtime table lookup with data-descriptor-based size computation for MethodDesc instances
  • Added AsyncMethodData data type for computing optional slot sizes
  • Changed TypeHierarchy test debuggee to use heap dumps instead of full dumps for verification

Reviewed changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated 4 comments.

Show a summary per file
FileDescription
RuntimeTypeSystem_1.csReimplemented ComputeSize method to calculate MethodDesc size from data descriptor sizes instead of reading s_ClassificationSizeTable
Constants.csRemoved MethodDescSizeTable global constant that's no longer needed
DataType.csAdded AsyncMethodData enum value for the async method data slot
datadescriptor.incAdded AsyncMethodData data descriptor and removed MethodDescSizeTable global
MockDescriptors.MethodDescriptors.csUpdated mock tests to remove dummy MethodDescSizeTable and add AsyncMethodData type info
RuntimeTypeSystemDumpTests.csRemoved DumpType override to use default "heap" dumps
TypeHierarchy.csprojChanged dump type from "Full" to "Heap"
RuntimeTypeSystem.mdUpdated documentation to reflect new size computation approach and removed MethodDescSizeTable global

- Use DataType.CLRToCOMCallMethodDesc for ComInterop classification
- Use DataType.NonVtableSlot instead of target.PointerSize
- Use DataType.NativeCodeSlot instead of target.PointerSize
- Fix error message typo: AsyncMethodDescData -> AsyncMethodData
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@max-charlamb
max-charlamb merged commit ae967fe into dotnet:mainFeb 24, 2026
110 of 114 checks passed
@max-charlamb
max-charlamb deleted the cdac-dumptests-heap-fix-2 branch February 24, 2026 03:19
iremyux pushed a commit to iremyux/dotnet-runtime that referenced this pull request Mar 2, 2026
…narios (dotnet#124772)
Modifies how MethodDesc sizes are computed. Instead of using the runtime
`s_ClassificationSizeTable` which is not present in heap dumps,
RuntimeTypeSystem now computes the MethodDesc size from datadescriptors.
Modified DumpTests to run on heap dumps for verification.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Mar 26, 2026
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.

4 participants

@max-charlamb@noahfalk@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

[cDAC] Compute MethodDesc size directly to support more heap dump scenarios - #124772

Merged
max-charlamb merged 4 commits into
dotnet:mainfrom
max-charlamb:cdac-dumptests-heap-fix-2
Feb 24, 2026
Merged

[cDAC] Compute MethodDesc size directly to support more heap dump scenarios#124772
max-charlamb merged 4 commits into
dotnet:mainfrom
max-charlamb:cdac-dumptests-heap-fix-2

Conversation

@max-charlamb

Copy link
Copy Markdown
Member

Modifies how MethodDesc sizes are computed. Instead of using the runtime s_ClassificationSizeTable which is not present in heap dumps, RuntimeTypeSystem now computes the MethodDesc size from datadescriptors.

Modified DumpTests to run on heap dumps for verification.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

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

@max-charlambmax-charlamb changed the title [cDAC] Allow more functionality in heap dumps[cDAC] Compute MethodDesc size directly to support more heap dump scenariosFeb 24, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR modifies how MethodDesc sizes are computed in the cDAC RuntimeTypeSystem contract to support heap dumps. Previously, the code read from the runtime's s_ClassificationSizeTable global, which is not available in heap dumps. The new implementation computes the MethodDesc size directly from data descriptor type sizes, mirroring the runtime's size table logic but using only metadata that's available in heap dumps.

Changes:

  • Replaced runtime table lookup with data-descriptor-based size computation for MethodDesc instances
  • Added AsyncMethodData data type for computing optional slot sizes
  • Changed TypeHierarchy test debuggee to use heap dumps instead of full dumps for verification

Reviewed changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated 4 comments.

Show a summary per file
FileDescription
RuntimeTypeSystem_1.csReimplemented ComputeSize method to calculate MethodDesc size from data descriptor sizes instead of reading s_ClassificationSizeTable
Constants.csRemoved MethodDescSizeTable global constant that's no longer needed
DataType.csAdded AsyncMethodData enum value for the async method data slot
datadescriptor.incAdded AsyncMethodData data descriptor and removed MethodDescSizeTable global
MockDescriptors.MethodDescriptors.csUpdated mock tests to remove dummy MethodDescSizeTable and add AsyncMethodData type info
RuntimeTypeSystemDumpTests.csRemoved DumpType override to use default "heap" dumps
TypeHierarchy.csprojChanged dump type from "Full" to "Heap"
RuntimeTypeSystem.mdUpdated documentation to reflect new size computation approach and removed MethodDescSizeTable global

- Use DataType.CLRToCOMCallMethodDesc for ComInterop classification
- Use DataType.NonVtableSlot instead of target.PointerSize
- Use DataType.NativeCodeSlot instead of target.PointerSize
- Fix error message typo: AsyncMethodDescData -> AsyncMethodData
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@max-charlamb
max-charlamb merged commit ae967fe into dotnet:mainFeb 24, 2026
110 of 114 checks passed
@max-charlamb
max-charlamb deleted the cdac-dumptests-heap-fix-2 branch February 24, 2026 03:19
iremyux pushed a commit to iremyux/dotnet-runtime that referenced this pull request Mar 2, 2026
…narios (dotnet#124772)
Modifies how MethodDesc sizes are computed. Instead of using the runtime
`s_ClassificationSizeTable` which is not present in heap dumps,
RuntimeTypeSystem now computes the MethodDesc size from datadescriptors.
Modified DumpTests to run on heap dumps for verification.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Mar 26, 2026
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.

4 participants

@max-charlamb@noahfalk@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

[cDAC] Compute MethodDesc size directly to support more heap dump scenarios - #124772

Merged
max-charlamb merged 4 commits into
dotnet:mainfrom
max-charlamb:cdac-dumptests-heap-fix-2
Feb 24, 2026
Merged

[cDAC] Compute MethodDesc size directly to support more heap dump scenarios#124772
max-charlamb merged 4 commits into
dotnet:mainfrom
max-charlamb:cdac-dumptests-heap-fix-2

Conversation

@max-charlamb

Copy link
Copy Markdown
Member

Modifies how MethodDesc sizes are computed. Instead of using the runtime s_ClassificationSizeTable which is not present in heap dumps, RuntimeTypeSystem now computes the MethodDesc size from datadescriptors.

Modified DumpTests to run on heap dumps for verification.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

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

@max-charlambmax-charlamb changed the title [cDAC] Allow more functionality in heap dumps[cDAC] Compute MethodDesc size directly to support more heap dump scenariosFeb 24, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR modifies how MethodDesc sizes are computed in the cDAC RuntimeTypeSystem contract to support heap dumps. Previously, the code read from the runtime's s_ClassificationSizeTable global, which is not available in heap dumps. The new implementation computes the MethodDesc size directly from data descriptor type sizes, mirroring the runtime's size table logic but using only metadata that's available in heap dumps.

Changes:

  • Replaced runtime table lookup with data-descriptor-based size computation for MethodDesc instances
  • Added AsyncMethodData data type for computing optional slot sizes
  • Changed TypeHierarchy test debuggee to use heap dumps instead of full dumps for verification

Reviewed changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated 4 comments.

Show a summary per file
FileDescription
RuntimeTypeSystem_1.csReimplemented ComputeSize method to calculate MethodDesc size from data descriptor sizes instead of reading s_ClassificationSizeTable
Constants.csRemoved MethodDescSizeTable global constant that's no longer needed
DataType.csAdded AsyncMethodData enum value for the async method data slot
datadescriptor.incAdded AsyncMethodData data descriptor and removed MethodDescSizeTable global
MockDescriptors.MethodDescriptors.csUpdated mock tests to remove dummy MethodDescSizeTable and add AsyncMethodData type info
RuntimeTypeSystemDumpTests.csRemoved DumpType override to use default "heap" dumps
TypeHierarchy.csprojChanged dump type from "Full" to "Heap"
RuntimeTypeSystem.mdUpdated documentation to reflect new size computation approach and removed MethodDescSizeTable global

- Use DataType.CLRToCOMCallMethodDesc for ComInterop classification
- Use DataType.NonVtableSlot instead of target.PointerSize
- Use DataType.NativeCodeSlot instead of target.PointerSize
- Fix error message typo: AsyncMethodDescData -> AsyncMethodData
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@max-charlamb
max-charlamb merged commit ae967fe into dotnet:mainFeb 24, 2026
110 of 114 checks passed
@max-charlamb
max-charlamb deleted the cdac-dumptests-heap-fix-2 branch February 24, 2026 03:19
iremyux pushed a commit to iremyux/dotnet-runtime that referenced this pull request Mar 2, 2026
…narios (dotnet#124772)
Modifies how MethodDesc sizes are computed. Instead of using the runtime
`s_ClassificationSizeTable` which is not present in heap dumps,
RuntimeTypeSystem now computes the MethodDesc size from datadescriptors.
Modified DumpTests to run on heap dumps for verification.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Mar 26, 2026
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.

4 participants

@max-charlamb@noahfalk@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

[cDAC] Compute MethodDesc size directly to support more heap dump scenarios - #124772

Merged
max-charlamb merged 4 commits into
dotnet:mainfrom
max-charlamb:cdac-dumptests-heap-fix-2
Feb 24, 2026
Merged

[cDAC] Compute MethodDesc size directly to support more heap dump scenarios#124772
max-charlamb merged 4 commits into
dotnet:mainfrom
max-charlamb:cdac-dumptests-heap-fix-2

Conversation

@max-charlamb

Copy link
Copy Markdown
Member

Modifies how MethodDesc sizes are computed. Instead of using the runtime s_ClassificationSizeTable which is not present in heap dumps, RuntimeTypeSystem now computes the MethodDesc size from datadescriptors.

Modified DumpTests to run on heap dumps for verification.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

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

@max-charlambmax-charlamb changed the title [cDAC] Allow more functionality in heap dumps[cDAC] Compute MethodDesc size directly to support more heap dump scenariosFeb 24, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR modifies how MethodDesc sizes are computed in the cDAC RuntimeTypeSystem contract to support heap dumps. Previously, the code read from the runtime's s_ClassificationSizeTable global, which is not available in heap dumps. The new implementation computes the MethodDesc size directly from data descriptor type sizes, mirroring the runtime's size table logic but using only metadata that's available in heap dumps.

Changes:

  • Replaced runtime table lookup with data-descriptor-based size computation for MethodDesc instances
  • Added AsyncMethodData data type for computing optional slot sizes
  • Changed TypeHierarchy test debuggee to use heap dumps instead of full dumps for verification

Reviewed changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated 4 comments.

Show a summary per file
FileDescription
RuntimeTypeSystem_1.csReimplemented ComputeSize method to calculate MethodDesc size from data descriptor sizes instead of reading s_ClassificationSizeTable
Constants.csRemoved MethodDescSizeTable global constant that's no longer needed
DataType.csAdded AsyncMethodData enum value for the async method data slot
datadescriptor.incAdded AsyncMethodData data descriptor and removed MethodDescSizeTable global
MockDescriptors.MethodDescriptors.csUpdated mock tests to remove dummy MethodDescSizeTable and add AsyncMethodData type info
RuntimeTypeSystemDumpTests.csRemoved DumpType override to use default "heap" dumps
TypeHierarchy.csprojChanged dump type from "Full" to "Heap"
RuntimeTypeSystem.mdUpdated documentation to reflect new size computation approach and removed MethodDescSizeTable global

- Use DataType.CLRToCOMCallMethodDesc for ComInterop classification
- Use DataType.NonVtableSlot instead of target.PointerSize
- Use DataType.NativeCodeSlot instead of target.PointerSize
- Fix error message typo: AsyncMethodDescData -> AsyncMethodData
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@max-charlamb
max-charlamb merged commit ae967fe into dotnet:mainFeb 24, 2026
110 of 114 checks passed
@max-charlamb
max-charlamb deleted the cdac-dumptests-heap-fix-2 branch February 24, 2026 03:19
iremyux pushed a commit to iremyux/dotnet-runtime that referenced this pull request Mar 2, 2026
…narios (dotnet#124772)
Modifies how MethodDesc sizes are computed. Instead of using the runtime
`s_ClassificationSizeTable` which is not present in heap dumps,
RuntimeTypeSystem now computes the MethodDesc size from datadescriptors.
Modified DumpTests to run on heap dumps for verification.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Mar 26, 2026
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.

4 participants

@max-charlamb@noahfalk@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

[cDAC] Compute MethodDesc size directly to support more heap dump scenarios - #124772

Merged
max-charlamb merged 4 commits into
dotnet:mainfrom
max-charlamb:cdac-dumptests-heap-fix-2
Feb 24, 2026
Merged

[cDAC] Compute MethodDesc size directly to support more heap dump scenarios#124772
max-charlamb merged 4 commits into
dotnet:mainfrom
max-charlamb:cdac-dumptests-heap-fix-2

Conversation

@max-charlamb

Copy link
Copy Markdown
Member

Modifies how MethodDesc sizes are computed. Instead of using the runtime s_ClassificationSizeTable which is not present in heap dumps, RuntimeTypeSystem now computes the MethodDesc size from datadescriptors.

Modified DumpTests to run on heap dumps for verification.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

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

@max-charlambmax-charlamb changed the title [cDAC] Allow more functionality in heap dumps[cDAC] Compute MethodDesc size directly to support more heap dump scenariosFeb 24, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR modifies how MethodDesc sizes are computed in the cDAC RuntimeTypeSystem contract to support heap dumps. Previously, the code read from the runtime's s_ClassificationSizeTable global, which is not available in heap dumps. The new implementation computes the MethodDesc size directly from data descriptor type sizes, mirroring the runtime's size table logic but using only metadata that's available in heap dumps.

Changes:

  • Replaced runtime table lookup with data-descriptor-based size computation for MethodDesc instances
  • Added AsyncMethodData data type for computing optional slot sizes
  • Changed TypeHierarchy test debuggee to use heap dumps instead of full dumps for verification

Reviewed changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated 4 comments.

Show a summary per file
FileDescription
RuntimeTypeSystem_1.csReimplemented ComputeSize method to calculate MethodDesc size from data descriptor sizes instead of reading s_ClassificationSizeTable
Constants.csRemoved MethodDescSizeTable global constant that's no longer needed
DataType.csAdded AsyncMethodData enum value for the async method data slot
datadescriptor.incAdded AsyncMethodData data descriptor and removed MethodDescSizeTable global
MockDescriptors.MethodDescriptors.csUpdated mock tests to remove dummy MethodDescSizeTable and add AsyncMethodData type info
RuntimeTypeSystemDumpTests.csRemoved DumpType override to use default "heap" dumps
TypeHierarchy.csprojChanged dump type from "Full" to "Heap"
RuntimeTypeSystem.mdUpdated documentation to reflect new size computation approach and removed MethodDescSizeTable global

- Use DataType.CLRToCOMCallMethodDesc for ComInterop classification
- Use DataType.NonVtableSlot instead of target.PointerSize
- Use DataType.NativeCodeSlot instead of target.PointerSize
- Fix error message typo: AsyncMethodDescData -> AsyncMethodData
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@max-charlamb
max-charlamb merged commit ae967fe into dotnet:mainFeb 24, 2026
110 of 114 checks passed
@max-charlamb
max-charlamb deleted the cdac-dumptests-heap-fix-2 branch February 24, 2026 03:19
iremyux pushed a commit to iremyux/dotnet-runtime that referenced this pull request Mar 2, 2026
…narios (dotnet#124772)
Modifies how MethodDesc sizes are computed. Instead of using the runtime
`s_ClassificationSizeTable` which is not present in heap dumps,
RuntimeTypeSystem now computes the MethodDesc size from datadescriptors.
Modified DumpTests to run on heap dumps for verification.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Mar 26, 2026
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.

4 participants

@max-charlamb@noahfalk@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

[cDAC] Compute MethodDesc size directly to support more heap dump scenarios - #124772

Merged
max-charlamb merged 4 commits into
dotnet:mainfrom
max-charlamb:cdac-dumptests-heap-fix-2
Feb 24, 2026
Merged

[cDAC] Compute MethodDesc size directly to support more heap dump scenarios#124772
max-charlamb merged 4 commits into
dotnet:mainfrom
max-charlamb:cdac-dumptests-heap-fix-2

Conversation

@max-charlamb

Copy link
Copy Markdown
Member

Modifies how MethodDesc sizes are computed. Instead of using the runtime s_ClassificationSizeTable which is not present in heap dumps, RuntimeTypeSystem now computes the MethodDesc size from datadescriptors.

Modified DumpTests to run on heap dumps for verification.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

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

@max-charlambmax-charlamb changed the title [cDAC] Allow more functionality in heap dumps[cDAC] Compute MethodDesc size directly to support more heap dump scenariosFeb 24, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR modifies how MethodDesc sizes are computed in the cDAC RuntimeTypeSystem contract to support heap dumps. Previously, the code read from the runtime's s_ClassificationSizeTable global, which is not available in heap dumps. The new implementation computes the MethodDesc size directly from data descriptor type sizes, mirroring the runtime's size table logic but using only metadata that's available in heap dumps.

Changes:

  • Replaced runtime table lookup with data-descriptor-based size computation for MethodDesc instances
  • Added AsyncMethodData data type for computing optional slot sizes
  • Changed TypeHierarchy test debuggee to use heap dumps instead of full dumps for verification

Reviewed changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated 4 comments.

Show a summary per file
FileDescription
RuntimeTypeSystem_1.csReimplemented ComputeSize method to calculate MethodDesc size from data descriptor sizes instead of reading s_ClassificationSizeTable
Constants.csRemoved MethodDescSizeTable global constant that's no longer needed
DataType.csAdded AsyncMethodData enum value for the async method data slot
datadescriptor.incAdded AsyncMethodData data descriptor and removed MethodDescSizeTable global
MockDescriptors.MethodDescriptors.csUpdated mock tests to remove dummy MethodDescSizeTable and add AsyncMethodData type info
RuntimeTypeSystemDumpTests.csRemoved DumpType override to use default "heap" dumps
TypeHierarchy.csprojChanged dump type from "Full" to "Heap"
RuntimeTypeSystem.mdUpdated documentation to reflect new size computation approach and removed MethodDescSizeTable global

- Use DataType.CLRToCOMCallMethodDesc for ComInterop classification
- Use DataType.NonVtableSlot instead of target.PointerSize
- Use DataType.NativeCodeSlot instead of target.PointerSize
- Fix error message typo: AsyncMethodDescData -> AsyncMethodData
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@max-charlamb
max-charlamb merged commit ae967fe into dotnet:mainFeb 24, 2026
110 of 114 checks passed
@max-charlamb
max-charlamb deleted the cdac-dumptests-heap-fix-2 branch February 24, 2026 03:19
iremyux pushed a commit to iremyux/dotnet-runtime that referenced this pull request Mar 2, 2026
…narios (dotnet#124772)
Modifies how MethodDesc sizes are computed. Instead of using the runtime
`s_ClassificationSizeTable` which is not present in heap dumps,
RuntimeTypeSystem now computes the MethodDesc size from datadescriptors.
Modified DumpTests to run on heap dumps for verification.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Mar 26, 2026
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.

4 participants

@max-charlamb@noahfalk@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

[cDAC] Compute MethodDesc size directly to support more heap dump scenarios - #124772

Merged
max-charlamb merged 4 commits into
dotnet:mainfrom
max-charlamb:cdac-dumptests-heap-fix-2
Feb 24, 2026
Merged

[cDAC] Compute MethodDesc size directly to support more heap dump scenarios#124772
max-charlamb merged 4 commits into
dotnet:mainfrom
max-charlamb:cdac-dumptests-heap-fix-2

Conversation

@max-charlamb

Copy link
Copy Markdown
Member

Modifies how MethodDesc sizes are computed. Instead of using the runtime s_ClassificationSizeTable which is not present in heap dumps, RuntimeTypeSystem now computes the MethodDesc size from datadescriptors.

Modified DumpTests to run on heap dumps for verification.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

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

@max-charlambmax-charlamb changed the title [cDAC] Allow more functionality in heap dumps[cDAC] Compute MethodDesc size directly to support more heap dump scenariosFeb 24, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR modifies how MethodDesc sizes are computed in the cDAC RuntimeTypeSystem contract to support heap dumps. Previously, the code read from the runtime's s_ClassificationSizeTable global, which is not available in heap dumps. The new implementation computes the MethodDesc size directly from data descriptor type sizes, mirroring the runtime's size table logic but using only metadata that's available in heap dumps.

Changes:

  • Replaced runtime table lookup with data-descriptor-based size computation for MethodDesc instances
  • Added AsyncMethodData data type for computing optional slot sizes
  • Changed TypeHierarchy test debuggee to use heap dumps instead of full dumps for verification

Reviewed changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated 4 comments.

Show a summary per file
FileDescription
RuntimeTypeSystem_1.csReimplemented ComputeSize method to calculate MethodDesc size from data descriptor sizes instead of reading s_ClassificationSizeTable
Constants.csRemoved MethodDescSizeTable global constant that's no longer needed
DataType.csAdded AsyncMethodData enum value for the async method data slot
datadescriptor.incAdded AsyncMethodData data descriptor and removed MethodDescSizeTable global
MockDescriptors.MethodDescriptors.csUpdated mock tests to remove dummy MethodDescSizeTable and add AsyncMethodData type info
RuntimeTypeSystemDumpTests.csRemoved DumpType override to use default "heap" dumps
TypeHierarchy.csprojChanged dump type from "Full" to "Heap"
RuntimeTypeSystem.mdUpdated documentation to reflect new size computation approach and removed MethodDescSizeTable global

- Use DataType.CLRToCOMCallMethodDesc for ComInterop classification
- Use DataType.NonVtableSlot instead of target.PointerSize
- Use DataType.NativeCodeSlot instead of target.PointerSize
- Fix error message typo: AsyncMethodDescData -> AsyncMethodData
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@max-charlamb
max-charlamb merged commit ae967fe into dotnet:mainFeb 24, 2026
110 of 114 checks passed
@max-charlamb
max-charlamb deleted the cdac-dumptests-heap-fix-2 branch February 24, 2026 03:19
iremyux pushed a commit to iremyux/dotnet-runtime that referenced this pull request Mar 2, 2026
…narios (dotnet#124772)
Modifies how MethodDesc sizes are computed. Instead of using the runtime
`s_ClassificationSizeTable` which is not present in heap dumps,
RuntimeTypeSystem now computes the MethodDesc size from datadescriptors.
Modified DumpTests to run on heap dumps for verification.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Mar 26, 2026
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.

4 participants

@max-charlamb@noahfalk@hoyosjs