Closed Bug 1890167 Opened 1 year ago Closed 1 year ago

Intermittent browser/base/content/test/webrtc/browser_devices_select_audio_output.js | single tracking bug

Categories

(Toolkit :: UI Widgets, defect, P5)

defect

Tracking

()

RESOLVED FIXED
129 Branch
Tracking Status
firefox-esr115 --- wontfix
firefox127 --- wontfix
firefox128 --- fixed
firefox129 --- fixed

People

(Reporter: intermittent-bug-filer, Assigned: pehrsons)

References

(Depends on 1 open bug, Regression)

Details

(Keywords: intermittent-failure, intermittent-testcase, regression)

Attachments

(6 files, 1 obsolete file)

Filed by: nfay [at] mozilla.com
Parsed log: https://treeherder.mozilla.org/logviewer?job_id=453791690&repo=autoland
Full log: https://firefox-ci-tc.services.mozilla.com/api/queue/v1/task/Th7FJd87QhKM__Dt68Rziw/runs/0/artifacts/public/logs/live_backing.log


[task 2024-04-07T01:12:20.610Z] 01:12:20     INFO - TEST-PASS | browser/base/content/test/webrtc/browser_devices_select_audio_output.js | aria-describedby - 
[task 2024-04-07T01:12:20.610Z] 01:12:20     INFO - TEST-PASS | browser/base/content/test/webrtc/browser_devices_select_audio_output.js | screen selector hidden - 
[task 2024-04-07T01:12:20.611Z] 01:12:20     INFO - Console message: [JavaScript Warning: "Empty string passed to getElementById()." {file: "chrome://global/content/elements/richlistbox.js" line: 711}]
[task 2024-04-07T01:12:20.611Z] 01:12:20     INFO - Expect same-device request allowed without prompt
[task 2024-04-07T01:12:20.612Z] 01:12:20     INFO - Expect prompt for different-device request
[task 2024-04-07T01:12:20.612Z] 01:12:20     INFO - Console message: [JavaScript Warning: "Empty string passed to getElementById()." {file: "chrome://global/content/elements/richlistbox.js" line: 711}]
[task 2024-04-07T01:12:20.612Z] 01:12:20     INFO - Buffered messages logged at 01:11:35
[task 2024-04-07T01:12:20.613Z] 01:12:20     INFO - Longer timeout required, waiting longer...  Remaining timeouts: 1
[task 2024-04-07T01:12:20.614Z] 01:12:20     INFO - Buffered messages finished
[task 2024-04-07T01:12:20.614Z] 01:12:20     INFO - TEST-UNEXPECTED-FAIL | browser/base/content/test/webrtc/browser_devices_select_audio_output.js | Test timed out - 
[task 2024-04-07T01:12:20.615Z] 01:12:20     INFO - GECKO(1116) | Completed ShutdownLeaks collections in process 4056
[task 2024-04-07T01:12:20.615Z] 01:12:20     INFO - TEST-START | Shutdown
[task 2024-04-07T01:12:20.616Z] 01:12:20     INFO - Browser Chrome Test Summary
[task 2024-04-07T01:12:20.616Z] 01:12:20     INFO - Passed:  5812
[task 2024-04-07T01:12:20.617Z] 01:12:20     INFO - Failed:  1
[task 2024-04-07T01:12:20.617Z] 01:12:20     INFO - Todo:    0
[task 2024-04-07T01:12:20.618Z] 01:12:20     INFO - Mode:    e10s
[task 2024-04-07T01:12:20.618Z] 01:12:20     INFO - *** End BrowserChrome Test Results ***
[task 2024-04-07T01:12:20.619Z] 01:12:20     INFO - GECKO(1116) | Exiting due to channel error.
[task 2024-04-07T01:12:20.619Z] 01:12:20     INFO - TEST-INFO | Main app process: exit 0
[task 2024-04-07T01:12:20.619Z] 01:12:20     INFO - runtests.py | Application ran for: 0:02:48.553483
[task 2024-04-07T01:12:20.620Z] 01:12:20     INFO - zombiecheck | Reading PID log: C:\Users\task_171245152522058\AppData\Local\Temp\tmp269pvnx6pidlog
Status: NEW → RESOLVED
Closed: 1 year ago
Resolution: --- → INCOMPLETE
Status: RESOLVED → REOPENED
Resolution: INCOMPLETE → ---

Here's a failure on test-verify:

https://treeherder.mozilla.org/logviewer?job_id=461367534&repo=try&lineNumber=2462

It really does look like this test simply takes a long time to run; we're seeing output up until the test times out. It is unclear why this test would run so slowly.

It also looks like each repetition of webrtc/browser_devices_select_audio_output.js takes longer than the last?

[task 2024-06-06T21:03:29.148Z] 21:03:29     INFO - TEST-START | browser/base/content/test/webrtc/browser_devices_select_audio_output.js
[task 2024-06-06T21:03:30.878Z] 21:03:30     INFO - GECKO(1193) | TEST DEVICES: No test devices found (in media.{audio,video}_loopback_dev, using fake streams.
[task 2024-06-06T21:03:34.116Z] 21:03:34     INFO - GECKO(1193) | 2024-06-06 21:03:34.115 firefox[1193:20026] Persistent UI failed to open file file:///Users/cltbld/Library/Saved%20Application%20State/org.mozilla.nightly.savedState/window_1.data: No such file or directory (2)
[task 2024-06-06T21:03:49.310Z] 21:03:49     INFO - GECKO(1193) | MEMORY STAT vsizeMaxContiguous not supported in this build configuration.
[task 2024-06-06T21:03:49.310Z] 21:03:49     INFO - GECKO(1193) | MEMORY STAT | vsize 7994MB | residentFast 297MB | heapAllocated 131MB
[task 2024-06-06T21:03:49.311Z] 21:03:49     INFO - TEST-OK | browser/base/content/test/webrtc/browser_devices_select_audio_output.js | took 20162ms
[task 2024-06-06T21:03:49.368Z] 21:03:49     INFO - checking window state
[task 2024-06-06T21:03:49.570Z] 21:03:49     INFO - TEST-START | browser/base/content/test/webrtc/browser_devices_select_audio_output.js
[task 2024-06-06T21:03:50.556Z] 21:03:50     INFO - GECKO(1193) | TEST DEVICES: No test devices found (in media.{audio,video}_loopback_dev, using fake streams.
[task 2024-06-06T21:04:20.893Z] 21:04:20     INFO - GECKO(1193) | MEMORY STAT | vsize 7992MB | residentFast 299MB | heapAllocated 131MB
[task 2024-06-06T21:04:20.893Z] 21:04:20     INFO - TEST-OK | browser/base/content/test/webrtc/browser_devices_select_audio_output.js | took 31323ms
[task 2024-06-06T21:04:20.976Z] 21:04:20     INFO - checking window state
[task 2024-06-06T21:04:21.175Z] 21:04:21     INFO - TEST-START | browser/base/content/test/webrtc/browser_devices_select_audio_output.js
[task 2024-06-06T21:04:21.968Z] 21:04:21     INFO - GECKO(1193) | TEST DEVICES: No test devices found (in media.{audio,video}_loopback_dev, using fake streams.
[task 2024-06-06T21:05:01.645Z] 21:05:01     INFO - GECKO(1193) | MEMORY STAT | vsize 7991MB | residentFast 299MB | heapAllocated 132MB
[task 2024-06-06T21:05:01.645Z] 21:05:01     INFO - TEST-OK | browser/base/content/test/webrtc/browser_devices_select_audio_output.js | took 40470ms
[task 2024-06-06T21:05:01.727Z] 21:05:01     INFO - checking window state
[task 2024-06-06T21:05:01.878Z] 21:05:01     INFO - TEST-START | browser/base/content/test/webrtc/browser_devices_select_audio_output.js
[task 2024-06-06T21:05:02.417Z] 21:05:02     INFO - GECKO(1193) | TEST DEVICES: No test devices found (in media.{audio,video}_loopback_dev, using fake streams.
[task 2024-06-06T21:05:57.885Z] 21:05:57     INFO - GECKO(1193) | MEMORY STAT | vsize 7991MB | residentFast 299MB | heapAllocated 130MB
[task 2024-06-06T21:05:57.885Z] 21:05:57     INFO - TEST-OK | browser/base/content/test/webrtc/browser_devices_select_audio_output.js | took 56008ms
[task 2024-06-06T21:05:57.977Z] 21:05:57     INFO - checking window state
[task 2024-06-06T21:05:58.162Z] 21:05:58     INFO - TEST-START | browser/base/content/test/webrtc/browser_devices_select_audio_output.js
[task 2024-06-06T21:05:59.088Z] 21:05:59     INFO - GECKO(1193) | TEST DEVICES: No test devices found (in media.{audio,video}_loopback_dev, using fake streams.
[task 2024-06-06T21:07:06.512Z] 21:07:06     INFO - GECKO(1193) | MEMORY STAT | vsize 7991MB | residentFast 299MB | heapAllocated 130MB
[task 2024-06-06T21:07:06.513Z] 21:07:06     INFO - TEST-OK | browser/base/content/test/webrtc/browser_devices_select_audio_output.js | took 68351ms
[task 2024-06-06T21:07:06.573Z] 21:07:06     INFO - checking window state
[task 2024-06-06T21:07:06.719Z] 21:07:06     INFO - TEST-START | browser/base/content/test/webrtc/browser_devices_select_audio_output.js
[task 2024-06-06T21:07:07.757Z] 21:07:07     INFO - GECKO(1193) | TEST DEVICES: No test devices found (in media.{audio,video}_loopback_dev, using fake streams.
[task 2024-06-06T21:08:26.271Z] 21:08:26     INFO - GECKO(1193) | MEMORY STAT | vsize 7989MB | residentFast 296MB | heapAllocated 131MB
[task 2024-06-06T21:08:26.272Z] 21:08:26     INFO - TEST-OK | browser/base/content/test/webrtc/browser_devices_select_audio_output.js | took 79553ms
[task 2024-06-06T21:08:26.343Z] 21:08:26     INFO - checking window state
[task 2024-06-06T21:08:26.518Z] 21:08:26     INFO - TEST-START | browser/base/content/test/webrtc/browser_devices_select_audio_output.js
[task 2024-06-06T21:08:27.109Z] 21:08:27     INFO - GECKO(1193) | TEST DEVICES: No test devices found (in media.{audio,video}_loopback_dev, using fake streams.
[task 2024-06-06T21:09:56.956Z] 21:09:56     INFO - GECKO(1193) | MEMORY STAT | vsize 7987MB | residentFast 297MB | heapAllocated 132MB
[task 2024-06-06T21:09:56.956Z] 21:09:56     INFO - TEST-OK | browser/base/content/test/webrtc/browser_devices_select_audio_output.js | took 90438ms
[task 2024-06-06T21:09:57.030Z] 21:09:57     INFO - checking window state
[task 2024-06-06T21:09:57.191Z] 21:09:57     INFO - TEST-START | browser/base/content/test/webrtc/browser_devices_select_audio_output.js
[task 2024-06-06T21:09:58.043Z] 21:09:58     INFO - GECKO(1193) | TEST DEVICES: No test devices found (in media.{audio,video}_loopback_dev, using fake streams.
[task 2024-06-06T21:11:42.520Z] 21:11:42     INFO - TEST-INFO | started process screencapture
[task 2024-06-06T21:11:42.644Z] 21:11:42     INFO - TEST-INFO | screencapture: exit 0
[task 2024-06-06T21:11:42.644Z] 21:11:42     INFO - <snipped 78 output lines - if you need more context, please use SimpleTest.requestCompleteLog() in your test>

Any idea what might be going on here?

Flags: needinfo?(jib)

I don't see anything obvious with the tests. They appear to take constant time on Windows. MacOS seems to be fairing the worst by a large margin. Linux oddly seems to be somewhere in the middle, but oddly recovers? (from GC maybe?)

In contrast, when I test locally on macOS the tests appear to run in constant time:

mach mochitest --run-until-failure browser/base/content/test/webrtc/browser_devices_select_audio_output.js 

Could it be related to the new voice engine stuff in macOS Andreas was working on? — But AFAICT the tests only touch the front-end part of speaker selection, not playback. But the prompt code probably tickles cubeb. Is that right, Karl?

Flags: needinfo?(karlt)
Flags: needinfo?(jib)
Flags: needinfo?(apehrson)

This is not a recent change in behavior. The timing still looks similar to bug 1775942 comment 7.
Chaos mode has been making tests timeout perhaps since it was introduced (bug 1734020).
I don't know whether or not the increasing time on each repetition is unique to this test.
Either --verify or perhaps MOZ_CHAOSMODE=0xfb would be needed to reproduce.

Depends on: 1842972
Flags: needinfo?(karlt)

The test would trigger device enumeration, which might include cameras also.

The profile from bwc's try run in comment 6 is quite telling.

(In reply to Jan-Ivar Bruaroey [:jib] (needinfo? me) from comment #9)

Could it be related to the new voice engine stuff in macOS Andreas was working on?

The VoiceProcessingIO unit only kicks in if we request input audio from the cubeb backend, and AFAIK we use fake streams for getUserMedia everywhere in CI except on Linux. Even there I'm not sure if we use it

(In reply to Karl Tomlinson (:karlt) from comment #10)

Either --verify or perhaps MOZ_CHAOSMODE=0xfb would be needed to reproduce.

I can confirm locally that MOZ_CHAOSMODE=0xfb makes this reproduce, though not as grave.

I added a profiler marker locally for DelayForChaosMode and ran

MOZ_CHAOSMODE=0xfb MOZ_PROFILER_STARTUP_FEATURES=markersallthreads MOZ_PROFILER_SYMBOLICATE=1 MOZ_PROFILER_SHUTDOWN=$PWD/mochitest-profile.json ./mach mochitest browser/base/content/test/webrtc/browser_devices_select_audio_output.js --repeat 5 --profiler

This seems to have only applied chaos mode to the parent process. I guess because of how I apply the env var? Maybe this is why the effect is less grave than on try, or my machine is just more powerful.

Regardless, here is the profile.

For the first test run there are 5519 "Delaying for chaos mode" markers on the parent process main thread, each a random sleep of <1ms.

For the fourth test run there are 16300 such markers.

Go figure.

There are also "Runnable" markers in this profile. Might be dandy to run some stats over, to see where all the extra delays are coming from.

Flags: needinfo?(apehrson)

Ok, I couldn't not do it.

For the run #1 and run #4 links above, by filtering markers on "Runnable" and running in the console:

var counts = {};
for (let {data} of window.filteredMarkers) {
  if (!counts[data.name]) {
    counts[data.name] = 1;
    continue;
  }
  counts[data.name] += 1;
}
var arr = [];
for (let key of Object.keys(counts)) {
  arr.push({name: key, count: counts[key]});
}
console.log(arr.toSorted((l, r) => r.count - l.count));

I get 216 distinct runnable names for run #1, with top 20 being:

0: Object { name: "LinkStyle::BindToTree", count: 1498 }
​​1: Object { name: "AsyncEventDispatcher", count: 1447 }
​​2: Object { name: "RefreshDriverVsyncObserver::NotifyVsyncTimerOnMainThread", count: 137 }
​​3: Object { name: "DelayedFireDOMPaintEvent", count: 122 }
​​4: Object { name: "PWindowGlobal::Msg_RawMessage", count: 118 }
​​5: Object { name: "FocusBlurEvent", count: 99 }
​​6: Object { name: "RefreshDriver::EnsureTimerStarted::extra", count: 94 }
​​7: Object { name: "PCompositorBridge::Msg_DidComposite", count: 82 }
​​8: Object { name: "PWindowGlobal::Msg_SetSingleChannelId", count: 63 }
​​9: Object { name: "CommandDispatcher", count: 62 }
​​10: Object { name: "nsHtml5SVGLoadDispatcher", count: 57 }
​​11: Object { name: "MozPromise::ThenValueBase::ResolveOrRejectRunnable", count: 55 }
​​12: Object { name: "PWindowGlobal::Msg_UpdateBFCacheStatus", count: 54 }
​​13: Object { name: "ProgressTracker::AsyncNotifyRunnable", count: 49 }
​​14: Object { name: "FocusInOutEvent", count: 47 }
​​15: Object { name: "RefreshDriver::EnsureTimerStarted::catch-up", count: 45 }
​​16: Object { name: "LocalizationRc::format_messages", count: 41 }
​​17: Object { name: "PContent::Msg_CommitWindowContextTransaction", count: 38 }
​​18: Object { name: "nsPipeInputStream AsyncWait Callback", count: 38 }
​19: Object { name: "JSActor Async Message", count: 35 }
20: Object { name: "LayerActivityTracker", count: 32 }

and 203 distinct runnable names for run #4, with top 20 being:

0: Object { name: "LinkStyle::BindToTree", count: 6723 }
​​1: Object { name: "AsyncEventDispatcher", count: 6661 }
​​2: Object { name: "RefreshDriver::EnsureTimerStarted::extra", count: 817 }
​​3: Object { name: "RefreshDriverVsyncObserver::NotifyVsyncTimerOnMainThread", count: 120 }
​​4: Object { name: "PWindowGlobal::Msg_RawMessage", count: 117 }
​​5: Object { name: "DelayedFireDOMPaintEvent", count: 115 }
​​6: Object { name: "FocusBlurEvent", count: 99 }
​​7: Object { name: "PCompositorBridge::Msg_DidComposite", count: 73 }
​​8: Object { name: "CommandDispatcher", count: 61 }
​​9: Object { name: "PWindowGlobal::Msg_SetSingleChannelId", count: 59 }
​​10: Object { name: "PWindowGlobal::Msg_UpdateBFCacheStatus", count: 54 }
​​11: Object { name: "ProgressTracker::AsyncNotifyRunnable", count: 48 }
​​12: Object { name: "FocusInOutEvent", count: 47 }
​​13: Object { name: "LayerActivityTracker", count: 46 }
​​14: Object { name: "MozPromise::ThenValueBase::ResolveOrRejectRunnable", count: 45 }
​​15: Object { name: "RefreshDriver::EnsureTimerStarted::catch-up", count: 44 }
​​16: Object { name: "PContent::Msg_CommitWindowContextTransaction", count: 38 }
​​17: Object { name: "JSActor Async Message", count: 35 }
​​18: Object { name: "LocalizationRc::format_messages", count: 27 }
​​19: Object { name: "CompositorVsyncDispatcher::ObserveVsync", count: 26 }
​​20: Object { name: "Element::NotifyUAWidgetTeardownAndUnattachShadow::UAWidgetTeardown", count: 24 }

I'll note that during run #4 we see roughly 4x the number of LinkStyle::BindToTree and AsyncEventDispatcher runnables as in #1. The running time of #4 is about 2x that of #1.

Emilio, do you know if this is expected?

Flags: needinfo?(emilio)

There are also DOMEvent markers so I'll add that for one of the first popupshowing->popupshown sequences in run #1 I count 28 load events with target html:link. The number of such events is steadily increasing throughout the profiles lifetime. Towards the end of run #4 I see 308 such events.

Smells like something is accumulating and not getting cleaned up but also this is outside my domain.

Did you lose window focus by any chance while reproducing it? The only time I managed to make the test fail was when switching the active window to something else. In that case, the popup didn't show up (but that's kind of expected), and the test timed out.

If the answer is "no" then I'd be curious to know how the failure looks like?

Re. whether this is expected, this means that something is adding links to the document, but these should be fairly short-lived runnables: https://searchfox.org/mozilla-central/rev/4582d908c17fbf7924f5699609fe4a12c28ddc4a/dom/base/LinkStyle.cpp#220, plus links probably get unloaded when the popup gets removed etc, so I don't think we're just leaking or anything, it's fairly common to add links in shadow dom.

Flags: needinfo?(emilio)

No, the test doesn't time out locally. The failure mode is that it runs noticably slower for each iteration. This is only really noticable with chaos mode because of the random delays added. On certain hardware it leads to a test-verify timeout failure, like in CI.

I found the problem, and it seems like a frontend one. Same thing in webRTC-selectMicrophone-menulist and webRTC-selectCamera-menulist.

It seems to me that we append some children in menulist's connectedCallback() that are not removed in disconnectedCallback().

Keywords: regression
Regressed by: 1624482

Set release status flags based on info from the regressing bug 1624482

Prior to bug 1624482 there's in connectedCallback() a

this.prepend(MozMenuList.fragment.cloneNode(true));

and disconnectedCallback() does not attempt to clean that up, so it may well be that the regressor is older than this.

I have a fix that seems to work in either case.

Here's a profile of running MOZ_CHAOSMODE=0xfb MOZ_PROFILER_SYMBOLICATE=1 MOZ_PROFILER_SHUTDOWN=$PWD/mochitest-profile.json ./mach mochitest browser/base/content/test/webrtc/browser_devices_select_audio_output.js --repeat 5 --profiler with the fix.

Attached image with fix, without profiler marker (obsolete) —
Assignee: nobody → apehrson
Attachment #9407048 - Attachment is obsolete: true

Also noting some stats with the fix, to compare with comments 12 and 13.

For run #1 there are 3545 DelayForChaosMode markers, and for run #4 there are 3127 such markers.

Top 20 runnables (of 229 distinct ones) for run #1:

0: Object { name: "AsyncEventDispatcher", count: 399 }
​​1: Object { name: "LinkStyle::BindToTree", count: 373 }
​​2: Object { name: "RefreshDriverVsyncObserver::NotifyVsyncTimerOnMainThread", count: 211 }
​​3: Object { name: "PWindowGlobal::Msg_RawMessage", count: 123 }
​​4: Object { name: "DelayedFireDOMPaintEvent", count: 121 }
​​5: Object { name: "FocusBlurEvent", count: 105 }
​​6: Object { name: "PCompositorBridge::Msg_DidComposite", count: 88 }
​​7: Object { name: "PWindowGlobal::Msg_SetSingleChannelId", count: 69 }
​​8: Object { name: "CommandDispatcher", count: 65 }
​​9: Object { name: "RefreshDriver::EnsureTimerStarted::catch-up", count: 62 }
​​10: Object { name: "MozPromise::ThenValueBase::ResolveOrRejectRunnable", count: 60 }
​​11: Object { name: "nsHtml5SVGLoadDispatcher", count: 57 }
​​12: Object { name: "PWindowGlobal::Msg_UpdateBFCacheStatus", count: 55 }
​​13: Object { name: "ProgressTracker::AsyncNotifyRunnable", count: 50 }
​​14: Object { name: "FocusInOutEvent", count: 49 }
​​15: Object { name: "LocalizationRc::format_messages", count: 42 }
​​16: Object { name: "PContent::Msg_CommitWindowContextTransaction", count: 42 }
​​17: Object { name: "nsPipeInputStream AsyncWait Callback", count: 40 }
​​18: Object { name: "JSActor Async Message", count: 39 }
​​19: Object { name: "LayerActivityTracker", count: 26 }
​​20: Object { name: "Element::NotifyUAWidgetTeardownAndUnattachShadow::UAWidgetTeardown", count: 25 }

and top 20 for run #4 out of 188 distinct runnables:

0: Object { name: "AsyncEventDispatcher", count: 431 }
​​1: Object { name: "LinkStyle::BindToTree", count: 408 }
​​2: Object { name: "RefreshDriverVsyncObserver::NotifyVsyncTimerOnMainThread", count: 192 }
​​3: Object { name: "DelayedFireDOMPaintEvent", count: 125 }
​​4: Object { name: "PWindowGlobal::Msg_RawMessage", count: 124 }
​​5: Object { name: "FocusBlurEvent", count: 111 }
​​6: Object { name: "PCompositorBridge::Msg_DidComposite", count: 101 }
​​7: Object { name: "PWindowGlobal::Msg_SetSingleChannelId", count: 68 }
​​8: Object { name: "CommandDispatcher", count: 67 }
​​9: Object { name: "PWindowGlobal::Msg_UpdateBFCacheStatus", count: 55 }
​​10: Object { name: "ProgressTracker::AsyncNotifyRunnable", count: 52 }
​​11: Object { name: "FocusInOutEvent", count: 51 }
​​12: Object { name: "PContent::Msg_CommitWindowContextTransaction", count: 45 }
​​13: Object { name: "RefreshDriver::EnsureTimerStarted::catch-up", count: 43 }
​​14: Object { name: "MozPromise::ThenValueBase::ResolveOrRejectRunnable", count: 42 }
​​15: Object { name: "JSActor Async Message", count: 40 }
​​16: Object { name: "LocalizationRc::format_messages", count: 29 }
​​17: Object { name: "LayerActivityTracker", count: 24 }
​​18: Object { name: "Element::NotifyUAWidgetTeardownAndUnattachShadow::UAWidgetTeardown", count: 24 }
​​19: Object { name: "Element::NotifyUAWidgetSetupOrChange::UAWidgetSetupOrChange", count: 24 }
​​20: Object { name: "LogMessageRunnable", count: 24 }
Attachment #9407049 - Attachment description: Bug 1890167 - In menulist.js only append children that don't get cleaned up to the shadowRoot once. → Bug 1890167 - In menulist.js track all appended children so they can all be cleaned up on disconnect.
Component: WebRTC → UI Widgets
Product: Core → Toolkit
Pushed by pehrsons@gmail.com: https://hg.mozilla.org/integration/autoland/rev/1ad79122a5f3 In menulist.js track all appended children so they can all be cleaned up on disconnect. r=reusable-components-reviewers,tgiles
Status: REOPENED → RESOLVED
Closed: 1 year ago1 year ago
Resolution: --- → FIXED
Target Milestone: --- → 129 Branch
Attachment #9407791 - Flags: approval-mozilla-beta?

beta Uplift Approval Request

  • User impact if declined: A reusable browser chrome widget accumulates nodes over time. In some cases (media capture permission prompt) they are never cleaned up. Performance impact over time is unclear but when exacerbated by MOZ_CHAOSMODE it quickly has an impact. I'd assume there is some impact on long-running browser sessions.
  • Code covered by automated testing: yes
  • Fix verified in Nightly: no
  • Needs manual QE test: no
  • Steps to reproduce for manual QE testing: N/A
  • Risk associated with taking this patch: Low
  • Explanation of risk level: No functional changes, just an extra cleanup step when the widget gets hidden.
  • String changes made/needed: None
  • Is Android affected?: no
Attachment #9407791 - Flags: approval-mozilla-beta? → approval-mozilla-beta+
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: