setImmediate and MessageChannel are broken in IE10

Won’t fix Issue #109646

Details

Created
Apr 27, 2014
Privacy
This issue is public.
Found in build #
0.0011
Reports
Reported by 0 people

Sign in to watch or report this issue.

Steps to reproduce

URL = http://sampo.kapsi.fi/setImmediate/test1.html

URL:

Repro Steps:

I have set up four demonstration / test pages for the bug:

http://sampo.kapsi.fi/setImmediate/test1.html
Two function loops, one using setTimeout, the other using setImmediate. The setTimeout callback has a 500ms busy-loop to slow it down.

Expected:
The setTimeout and setImmediate callbacks are called alternately.

Actual:
On IE10 Mobile, the setImmediate callback is never called.
On IE10 Desktop, it works as expected (the callbacks are called alternately)

http://sampo.kapsi.fi/setImmediate/test2.html
Same as previous, except without the busy-loop.

Expected:
The setTimeout and setImmediate callbacks are called alternately.

Actual:
On IE10 Mobile, the setImmediate callback is called a few times initially. After the DOM manipulation becomes sufficiently slow, the callback is never called.
On IE10 Desktop, the setImmediate callback initially works normally. After about 30s, the callback can be prevented by either: a) moving the mouse in the browser window, or b) placing the mouse cursor on top of the changing log lines. The combination of DOM manipulation and DOM events is evidently sufficient to cause the bug.

http://sampo.kapsi.fi/setImmediate/test3.html
Same as test2, except the logging replaces the DOM instead of appending to it. This is a (fast) constant-time operation, and thus works properly on both IE10 Mobile and Desktop.

http://sampo.kapsi.fi/setImmediate/testQ.html
This page uses Q promises to demonstrate that both setImmediate and MessageChannel are broken. There are two function loops, one using setTimeout and the other using Q promises. Q promises uses setImmediate if available, falls back to MessageChannel and finally to setTimeout.

Expected:
The setTimeout and Q callbacks are called alternately.

Actual:

Unless both setImmediate and MessageChannel are disabled, the results are the same as in test2: IE10 Mobile fails almost immediately, IE10 Desktop while moving the mouse or by placing the mouse on top of the changing log lines.

Expected Results:

setImmediate should work like setTimeout(fn, 0), only better. Currently (especially on IE10 Mobile), setTimeout pre-empts setImmediate, so that a loop of setTimeouts causes the setImmediate callback never to be called.

Actual Results:

Attachments

0 attachments

    Comments and activity

    • Microsoft Edge Team

      Changed Assigned To to “Justin R.”

      Changed Status to “Confirmed”

      Changed Assigned To from “Justin R.” to “Tobin T.”

      Changed Status from “Confirmed” to “Won’t fix”

    You need to sign in to your Microsoft account to add a comment.

    Sign in