Bug 1687263 Comment 12 Edit History

Note: The actual edited comment in the bug view page will always show the original commenter’s name and original timestamp.

With a debug build, `mozInlineSpellChecker` sometimes can just check five words per time-slice:

```
[Child 20327: Main Thread]: D/InlineSpellChecker BuildSoftText: got DOM string: _yuv gfx/wr/swgl/src/composite.h:8531 xul.dll CompositeYUV gfx/wr/swgl/src/composite.h:9152 xul.dll webrender_bindings::swgl_bindings::SwCompositeThread::process_job gfx/webrender_bindings/src/swgl_bindings.rs:7493 xul.dll std::sys_common::backtrace::__rust_begin_short_backtrace<closure-0, tuple<>> ../e1884a8e3c3e813aada8254edfa120e85bf5ffca/library/std/src/sys_common/backtrace.rs:1314 xul.dll core::ops::function::FnOnce::call_once<closure-0, tuple<>> ../e1884a8e3c3e813aada8254edfa120e85bf5ffca/library/core/src/ops/function.rs:2275 xul.dll std::sys::windows::thread::{{impl}}::new::thread_start ../e1884a8e3c3e813aada8254edfa120e85bf5ffca//library/std/src/sys/windows/thread.rs:566 kernel32.dll BaseThreadInitThunk7 mozglue.dll patched_BaseThreadInitThunk mozglue/dllservices/WindowsDllBlocklist.cpp:5918 ntdll.dll RtlUserThreadStart9 kernelbase.dll TerminateProcessOnMemoryExhaustion```  
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: mNextWordIndex=0
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: returning: yuv (skip=0)
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: got word "yuv"
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: removing ranges for some interval.
[Child 20327: Main Thread]: D/InlineSpellChecker RemoveRange
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: mNextWordIndex=1
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: returning: gfx (skip=0)
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: got word "gfx"
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: removing ranges for some interval.
[Child 20327: Main Thread]: D/InlineSpellChecker RemoveRange
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: mNextWordIndex=2
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: returning: wr (skip=0)
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: got word "wr"
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: removing ranges for some interval.
[Child 20327: Main Thread]: D/InlineSpellChecker RemoveRange
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: mNextWordIndex=3
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: returning: swgl (skip=0)
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: got word "swgl"
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: removing ranges for some interval.
[Child 20327: Main Thread]: D/InlineSpellChecker RemoveRange
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: mNextWordIndex=4
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: returning: src (skip=0)
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: got word "src"
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: removing ranges for some interval.
[Child 20327: Main Thread]: D/InlineSpellChecker RemoveRange
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: mNextWordIndex=5
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: returning: composite (skip=0)
[Child 20327: Main Thread]: V/InlineSpellChecker DoSpellCheck: we have run out of time, schedule next round.
[Child 20327: Main Thread]: D/InlineSpellChecker ScheduleSpellCheck
[Child 20327: Main Thread]: D/InlineSpellChecker ResumeCheck
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck
[Child 20327: Main Thread]: D/InlineSpellChecker BuildSoftText: got DOM string: _yuv gfx/wr/swgl/src/composite.h:8531 xul.dll CompositeYUV gfx/wr/swgl/src/composite.h:9152 xul.dll webrender_bindings::swgl_bindings::SwCompositeThread::process_job gfx/webrender_bindings/src/swgl_bindings.rs:7493 xul.dll std::sys_common::backtrace::__rust_begin_short_backtrace<closure-0, tuple<>> ../e1884a8e3c3e813aada8254edfa120e85bf5ffca/library/std/src/sys_common/backtrace.rs:1314 xul.dll core::ops::function::FnOnce::call_once<closure-0, tuple<>> ../e1884a8e3c3e813aada8254edfa120e85bf5ffca/library/core/src/ops/function.rs:2275 xul.dll std::sys::windows::thread::{{impl}}::new::thread_start ../e1884a8e3c3e813aada8254edfa120e85bf5ffca//library/std/src/sys/windows/thread.rs:566 kernel32.dll BaseThreadInitThunk7 mozglue.dll patched_BaseThreadInitThunk mozglue/dllservices/WindowsDllBlocklist.cpp:5918 ntdll.dll RtlUserThreadStart9 kernelbase.dll TerminateProcessOnMemoryExhaustion```  
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: mNextWordIndex=0
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: returning: yuv (skip=0)
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: got word "yuv"
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: removing ranges for some interval.
[Child 20327: Main Thread]: D/InlineSpellChecker RemoveRange
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: mNextWordIndex=1
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: returning: gfx (skip=0)
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: got word "gfx"
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: removing ranges for some interval.
[Child 20327: Main Thread]: D/InlineSpellChecker RemoveRange
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: mNextWordIndex=2
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: returning: wr (skip=0)
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: got word "wr"
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: removing ranges for some interval.
[Child 20327: Main Thread]: D/InlineSpellChecker RemoveRange
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: mNextWordIndex=3
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: returning: swgl (skip=0)
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: got word "swgl"
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: removing ranges for some interval.
[Child 20327: Main Thread]: D/InlineSpellChecker RemoveRange
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: mNextWordIndex=4
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: returning: src (skip=0)
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: got word "src"
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: removing ranges for some interval.
[Child 20327: Main Thread]: D/InlineSpellChecker RemoveRange
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: mNextWordIndex=5
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: returning: composite (skip=0)
[Child 20327: Main Thread]: V/InlineSpellChecker DoSpellCheck: we have run out of time, schedule next round.
```

As above log shows, when resuming the check, it starts at the first word again. This seems to lead to the flickering.

I don't know why:
1\. only so few checks are performed during on time-slice.
2\. when resuming the check, not the next word is chosen.

To fix this issue, both questions deserve investigation.

This seems related to bug 1502661.
With a debug build, `mozInlineSpellChecker` sometimes can just check five words per time-slice:

```
[Child 20327: Main Thread]: D/InlineSpellChecker BuildSoftText: got DOM string: _yuv gfx/wr/swgl/src/composite.h:8531 xul.dll CompositeYUV gfx/wr/swgl/src/composite.h:9152 xul.dll webrender_bindings::swgl_bindings::SwCompositeThread::process_job gfx/webrender_bindings/src/swgl_bindings.rs:7493 xul.dll std::sys_common::backtrace::__rust_begin_short_backtrace<closure-0, tuple<>> ../e1884a8e3c3e813aada8254edfa120e85bf5ffca/library/std/src/sys_common/backtrace.rs:1314 xul.dll core::ops::function::FnOnce::call_once<closure-0, tuple<>> ../e1884a8e3c3e813aada8254edfa120e85bf5ffca/library/core/src/ops/function.rs:2275 xul.dll std::sys::windows::thread::{{impl}}::new::thread_start ../e1884a8e3c3e813aada8254edfa120e85bf5ffca//library/std/src/sys/windows/thread.rs:566 kernel32.dll BaseThreadInitThunk7 mozglue.dll patched_BaseThreadInitThunk mozglue/dllservices/WindowsDllBlocklist.cpp:5918 ntdll.dll RtlUserThreadStart9 kernelbase.dll TerminateProcessOnMemoryExhaustion```  
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: mNextWordIndex=0
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: returning: yuv (skip=0)
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: got word "yuv"
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: removing ranges for some interval.
[Child 20327: Main Thread]: D/InlineSpellChecker RemoveRange
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: mNextWordIndex=1
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: returning: gfx (skip=0)
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: got word "gfx"
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: removing ranges for some interval.
[Child 20327: Main Thread]: D/InlineSpellChecker RemoveRange
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: mNextWordIndex=2
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: returning: wr (skip=0)
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: got word "wr"
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: removing ranges for some interval.
[Child 20327: Main Thread]: D/InlineSpellChecker RemoveRange
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: mNextWordIndex=3
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: returning: swgl (skip=0)
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: got word "swgl"
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: removing ranges for some interval.
[Child 20327: Main Thread]: D/InlineSpellChecker RemoveRange
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: mNextWordIndex=4
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: returning: src (skip=0)
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: got word "src"
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: removing ranges for some interval.
[Child 20327: Main Thread]: D/InlineSpellChecker RemoveRange
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: mNextWordIndex=5
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: returning: composite (skip=0)
[Child 20327: Main Thread]: V/InlineSpellChecker DoSpellCheck: we have run out of time, schedule next round.
[Child 20327: Main Thread]: D/InlineSpellChecker ScheduleSpellCheck
[Child 20327: Main Thread]: D/InlineSpellChecker ResumeCheck
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck
[Child 20327: Main Thread]: D/InlineSpellChecker BuildSoftText: got DOM string: _yuv gfx/wr/swgl/src/composite.h:8531 xul.dll CompositeYUV gfx/wr/swgl/src/composite.h:9152 xul.dll webrender_bindings::swgl_bindings::SwCompositeThread::process_job gfx/webrender_bindings/src/swgl_bindings.rs:7493 xul.dll std::sys_common::backtrace::__rust_begin_short_backtrace<closure-0, tuple<>> ../e1884a8e3c3e813aada8254edfa120e85bf5ffca/library/std/src/sys_common/backtrace.rs:1314 xul.dll core::ops::function::FnOnce::call_once<closure-0, tuple<>> ../e1884a8e3c3e813aada8254edfa120e85bf5ffca/library/core/src/ops/function.rs:2275 xul.dll std::sys::windows::thread::{{impl}}::new::thread_start ../e1884a8e3c3e813aada8254edfa120e85bf5ffca//library/std/src/sys/windows/thread.rs:566 kernel32.dll BaseThreadInitThunk7 mozglue.dll patched_BaseThreadInitThunk mozglue/dllservices/WindowsDllBlocklist.cpp:5918 ntdll.dll RtlUserThreadStart9 kernelbase.dll TerminateProcessOnMemoryExhaustion```  
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: mNextWordIndex=0
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: returning: yuv (skip=0)
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: got word "yuv"
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: removing ranges for some interval.
[Child 20327: Main Thread]: D/InlineSpellChecker RemoveRange
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: mNextWordIndex=1
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: returning: gfx (skip=0)
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: got word "gfx"
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: removing ranges for some interval.
[Child 20327: Main Thread]: D/InlineSpellChecker RemoveRange
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: mNextWordIndex=2
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: returning: wr (skip=0)
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: got word "wr"
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: removing ranges for some interval.
[Child 20327: Main Thread]: D/InlineSpellChecker RemoveRange
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: mNextWordIndex=3
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: returning: swgl (skip=0)
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: got word "swgl"
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: removing ranges for some interval.
[Child 20327: Main Thread]: D/InlineSpellChecker RemoveRange
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: mNextWordIndex=4
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: returning: src (skip=0)
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: got word "src"
[Child 20327: Main Thread]: D/InlineSpellChecker DoSpellCheck: removing ranges for some interval.
[Child 20327: Main Thread]: D/InlineSpellChecker RemoveRange
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: mNextWordIndex=5
[Child 20327: Main Thread]: D/InlineSpellChecker GetNextWord: returning: composite (skip=0)
[Child 20327: Main Thread]: V/InlineSpellChecker DoSpellCheck: we have run out of time, schedule next round.
```

As above log shows, when resuming the check, it starts at the first word again. This seems to lead to the flickering.

I don't know why:
1\. only so few checks are performed during one time-slice.
2\. when resuming the check, not the next word is chosen.

To fix this issue, both questions deserve investigation.

This seems related to bug 1502661.

Back to Bug 1687263 Comment 12