Commit 3d151d8
Enhance heap progress PR: -noprogress flag, deterministic timing tests, literal output assertions (dotnet#5773)
- [x] Address review comment 1: refactor `ProgressCallback` as optional
method parameter on `EnumerateFilteredObjects` (remove from
`HeapWithFilters` class property)
- [x] Address review comment 2: rewrite byte-tracking in
`EnumerateFilteredObjects` to use segment position (`obj.Address -
segment.Start`, 16KB threshold, segment start/end callbacks)
- [x] Refactor `ProgressReporter` to be the timed console writer
registered as callback (takes `Action<string>` writeMessage, receives
`(scannedBytes, totalBytes)` via `Report` method)
- [x] Update `DumpHeapCommand` and `VerifyHeapCommand` to use new API
- [x] Update `ProgressReporterTests` to match new `ProgressReporter` API
(7/7 tests pass)
<!-- START COPILOT ORIGINAL PROMPT -->
<details>
<summary>Original prompt</summary>
> Modify Dan Moseley's PR dotnet#5763 (branch: danmoseley:heap-progress) to do
the following:
>
> 1. Add a flag to opt out of progress reporting for heap enumeration.
> 2. Update the unit test cases so that they validate literal output
from progress lines, rather than simply inferring correctness using
text.Contains("5").
> 3. Refactor progress timing tests to use TimeProvider, so that the
test does not rely on sleep() or time delays, and instead
deterministically validates timing.
>
> Requirements:
> - Show the full `git diff` of changes before pushing to the PR branch.
> - Do not push any changes until the user explicitly approves after
seeing the diff.
>
> The following is the prior conversation context from the user's chat
exploration (may be truncated):
>
> User: Can you push commits to this PR?
>
> Assistant: **Yes, you should be able to push commits to this PR.**
Here's why:
>
> 1. **`maintainer_can_modify` is `true`** — The PR author (@danmoseley)
enabled "Allow edits from maintainers" when creating this PR from their
fork (`danmoseley/diagnostics` → `dotnet/diagnostics`).
>
> 2. **You have write access** — As long as you have push/write
permissions to the base repository (`dotnet/diagnostics`), GitHub allows
you to push commits directly to the PR's head branch (`heap-progress` on
`danmoseley/diagnostics`).
>
> You can push to the branch by adding the fork as a remote and pushing
to the `heap-progress` branch:
>
> ```bash
> git remote add danmoseley
https://github.com/danmoseley/diagnostics.git
> git push danmoseley HEAD:heap-progress
> ```
>
> This is documented in GitHub's guide on [Committing changes to a pull
request branch created from a
fork](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/committing-changes-to-a-pull-request-branch-created-from-a-fork).
>
> User: Do you have permissions to modify this PR?
>
> Assistant: I'm waiting for your confirmation to proceed with the tool
call that was just proposed.
>
> User: @Copilot Accepted Confirmation: Confirm agent session
>
> Assistant: I don't have the ability to directly check my own
permissions on a repository. However, I've kicked off a task that will
attempt to interact with the PR, which will effectively test whether I
have write access:
>
> ````list type="task"
> data:
> - title: '[WIP] Check push permissions to PR dotnet#5763'
> repository: dotnet/diagnostics
> url:
https://github.com/copilot/tasks/pull/PR_kwDOB4aLFs7MAicv?session_id=88a58d80-0bba-4b9d-bf31-fcfdb05e5cf0
> state: queued
>
> ````
>
> That said, to answer your question more directly: **I don't know for
certain whether I (Copilot) have write permissions to
`dotnet/diagnostics`**. That depends on:
>
> 1. **Whether GitHub Copilot is installed** on the `dotnet/diagnostics`
repository (or the `dotnet` org) with write permissions.
> 2. **Whether the org/repo settings** allow Copilot to push to forks
via `maintainer_can_modify`.
>
> If the task above fails with a permissions error, that will confirm I
don't have the necessary access. In that case, you (hoyosjs) would need
to push the commits yourself, assuming you have write access to
`dotnet/diagnostics`.
>
> User: Modify Dan Moseleys pr to:
>
> - add a flag to opt out of progress report
> -we actually see some literal output in the test cases rather than
just infering the whole thing is good from text.Contains("5")
> - use TimeProvider to validate the progress part without relying on
sleep() in the test (or the current state that doesn't actually validate
progress timing)
>
> Show me the diff before pushing to the PR
>
> Assistant: I'll prepare a diff that modifies Dan Moseley's PR as you
requested—adding a flag to opt out of progress reporting, improving test
assertions to check the actual output, and refactoring timing
verification to use TimeProvider instead of sleep.
>
> Once the changes are ready, I will show you the complete diff so you
can review it before anything is pushed.
>
>
</details>
<!-- START COPILOT CODING AGENT SUFFIX -->
*This pull request was created from Copilot chat.*
>
<!-- START COPILOT CODING AGENT TIPS -->
---
💬 Send tasks to Copilot coding agent from
[Slack](https://gh.io/cca-slack-docs) and
[Teams](https://gh.io/cca-teams-docs) to turn conversations into code.
Copilot posts an update in your thread when it's finished.
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Dan Moseley <danmose@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: hoyosjs <19413848+hoyosjs@users.noreply.github.com>
Co-authored-by: noahfalk <6243776+noahfalk@users.noreply.github.com>1 parent a4a7a3b commit 3d151d8
7 files changed
Lines changed: 295 additions & 4 deletions
File tree
- src
- Microsoft.Diagnostics.ExtensionCommands
- tests/Microsoft.Diagnostics.ExtensionCommands.UnitTests
Lines changed: 11 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
68 | 68 | | |
69 | 69 | | |
70 | 70 | | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
71 | 74 | | |
72 | 75 | | |
73 | 76 | | |
| |||
77 | 80 | | |
78 | 81 | | |
79 | 82 | | |
80 | | - | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
81 | 91 | | |
82 | 92 | | |
83 | 93 | | |
| |||
Lines changed: 37 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
209 | 209 | | |
210 | 210 | | |
211 | 211 | | |
212 | | - | |
| 212 | + | |
213 | 213 | | |
214 | | - | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
215 | 218 | | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
216 | 232 | | |
217 | 233 | | |
218 | 234 | | |
| |||
232 | 248 | | |
233 | 249 | | |
234 | 250 | | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
235 | 262 | | |
236 | 263 | | |
237 | 264 | | |
| 265 | + | |
238 | 266 | | |
239 | 267 | | |
240 | 268 | | |
| |||
248 | 276 | | |
249 | 277 | | |
250 | 278 | | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
251 | 283 | | |
252 | 284 | | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
253 | 288 | | |
254 | 289 | | |
Lines changed: 4 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
21 | 25 | | |
22 | 26 | | |
23 | 27 | | |
| |||
Lines changed: 83 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
Lines changed: 12 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
| 3 | + | |
3 | 4 | | |
4 | 5 | | |
5 | 6 | | |
| |||
28 | 29 | | |
29 | 30 | | |
30 | 31 | | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
31 | 35 | | |
32 | 36 | | |
33 | 37 | | |
| |||
58 | 62 | | |
59 | 63 | | |
60 | 64 | | |
61 | | - | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
62 | 73 | | |
63 | 74 | | |
64 | 75 | | |
| |||
Lines changed: 16 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
Lines changed: 132 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
0 commit comments