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.
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 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.