Open Bug 1582289 Opened 5 years ago Updated 2 years ago

13,100 instances of "Shouldn't call SchedulePaint in a detached pres context" emitted from layout/generic/nsFrame.cpp during linux64 debug testing

Categories

(Core :: Web Painting, defect, P3)

defect

Tracking

()

People

(Reporter: erahm, Unassigned)

References

(Blocks 1 open bug)

Details

Attachments

(1 file)

13115 WARNING: Shouldn't call SchedulePaint in a detached pres context: file layout/generic/nsFrame.cpp, line 7090

This warning [1] shows up in the following test suites:

  1440 - test-linux64/debug-reftest-no-accel-e10s-3 Ru3
  1439 - test-linux64/debug-reftest-no-accel-sw-e10s-3 Ru3
  1434 - test-linux64/debug-reftest-e10s-3 R3
  1404 - test-linux64/debug-reftest-sw-e10s-3 R3
  1231 - test-linux64/debug-reftest-e10s-2 R2
  1192 - test-linux64/debug-reftest-no-accel-sw-e10s-2 Ru2
  1184 - test-linux64/debug-reftest-sw-e10s-2 R2
  1147 - test-linux64/debug-reftest-no-accel-e10s-2 Ru2
   205 - test-linux64/debug-reftest-no-accel-sw-e10s-7 Ru7
   201 - test-linux64/debug-reftest-sw-e10s-7 R7
   199 - test-linux64/debug-reftest-e10s-7 R7
   182 - test-linux64/debug-reftest-no-accel-e10s-7 Ru7
   182 - test-linux64/debug-reftest-no-accel-e10s-5 Ru5
   169 - test-linux64/debug-reftest-sw-e10s-5 R5
   167 - test-linux64/debug-reftest-no-accel-sw-e10s-5 Ru5
   163 - test-linux64/debug-reftest-e10s-5 R5
   146 - test-linux64/debug-reftest-e10s-4 R4
   126 - test-linux64/debug-reftest-no-accel-sw-e10s-4 Ru4
   126 - test-linux64/debug-reftest-no-accel-e10s-4 Ru4
   120 - test-linux64/debug-reftest-sw-e10s-4 R4
   118 - test-linux64/debug-crashtest-sw-e10s C
   107 - test-linux64/debug-crashtest-e10s C
    42 - test-linux64/debug-reftest-e10s-6 R6
    42 - test-linux64/debug-reftest-no-accel-e10s-6 Ru6
    40 - test-linux64/debug-reftest-no-accel-sw-e10s-6 Ru6
    40 - test-linux64/debug-reftest-sw-e10s-6 R6
    33 - test-linux64/debug-reftest-sw-e10s-1 R1
    30 - test-linux64/debug-reftest-e10s-1 R1
    30 - test-linux64/debug-reftest-no-accel-e10s-1 Ru1
    30 - test-linux64/debug-reftest-no-accel-sw-e10s-1 Ru1
    29 - test-linux64/debug-reftest-sw-e10s-8 R8
    28 - test-linux64/debug-reftest-e10s-8 R8
    27 - test-linux64/debug-reftest-no-accel-sw-e10s-8 Ru8
    25 - test-linux64/debug-reftest-no-accel-e10s-8 Ru8
     7 - test-linux64/debug-marionette-e10s Mn
     6 - test-linux64/debug-web-platform-tests-reftests-sw-e10s-4 Wr4
     6 - test-linux64/debug-web-platform-tests-reftests-e10s-4 Wr4
     5 - test-linux64/debug-web-platform-tests-reftests-e10s-3 Wr3
     5 - test-linux64/debug-web-platform-tests-reftests-sw-e10s-3 Wr3
     2 - test-linux64/debug-mochitest-sw-e10s-13 13
     2 - test-linux64/debug-mochitest-e10s-13 13
     1 - test-linux64/debug-web-platform-tests-reftests-sw-e10s-1 Wr1
     1 - test-linux64/debug-web-platform-tests-wdspec-e10s-1 Wd1
     1 - test-linux64/debug-web-platform-tests-wdspec-sw-e10s-2 Wd2
     1 - test-linux64/debug-web-platform-tests-reftests-e10s-1 Wr1

It shows up in 330 tests. A few of the most prevalent:

   274 - [e10s] file:///builds/worker/workspace/build/tests/reftest/tests/layout/reftests/bidi/numeral/bug467672-2.html == file:///builds/worker/workspace/build/tests/reftest/tests/layout/reftests/bidi/numeral/bug467672-2-ref.html
   272 - [e10s] file:///builds/worker/workspace/build/tests/reftest/tests/layout/reftests/bidi/numeral/persian-5.html == file:///builds/worker/workspace/build/tests/reftest/tests/layout/reftests/bidi/numeral/persian-5-ref.html
   270 - [e10s] file:///builds/worker/workspace/build/tests/reftest/tests/layout/reftests/bidi/numeral/persian-3.html == file:///builds/worker/workspace/build/tests/reftest/tests/layout/reftests/bidi/numeral/persian-3-ref.html
   262 - [e10s] file:///builds/worker/workspace/build/tests/reftest/tests/layout/reftests/bidi/numeral/persian-1.html == file:///builds/worker/workspace/build/tests/reftest/tests/layout/reftests/bidi/numeral/persian-1-ref.html
   262 - [e10s] file:///builds/worker/workspace/build/tests/reftest/tests/layout/reftests/bidi/numeral/bug467672-3.html == file:///builds/worker/workspace/build/tests/reftest/tests/layout/reftests/bidi/numeral/bug467672-3-ref.html
   261 - [e10s] file:///builds/worker/workspace/build/tests/reftest/tests/layout/reftests/bidi/numeral/bug467672-5.html == file:///builds/worker/workspace/build/tests/reftest/tests/layout/reftests/bidi/numeral/bug467672-5-ref.html
   259 - [e10s] file:///builds/worker/workspace/build/tests/reftest/tests/layout/reftests/bidi/numeral/persian-4.html == file:///builds/worker/workspace/build/tests/reftest/tests/layout/reftests/bidi/numeral/persian-4-ref.html
   256 - [e10s] file:///builds/worker/workspace/build/tests/reftest/tests/layout/reftests/bidi/numeral/bug467672-4.html == file:///builds/worker/workspace/build/tests/reftest/tests/layout/reftests/bidi/numeral/bug467672-4-ref.html
   247 - [e10s] file:///builds/worker/workspace/build/tests/reftest/tests/layout/reftests/bidi/numeral/bug467672-1.html == file:///builds/worker/workspace/build/tests/reftest/tests/layout/reftests/bidi/numeral/bug467672-1-ref.html
   244 - [e10s] file:///builds/worker/workspace/build/tests/reftest/tests/layout/reftests/bidi/numeral/persian-2.html == file:///builds/worker/workspace/build/tests/reftest/tests/layout/reftests/bidi/numeral/persian-2-ref.html

[1] https://hg.mozilla.org/mozilla-central/annotate/a3a081ae714f1123bdc23c9d9ef53dfaa783a8de/layout/generic/nsFrame.cpp#l7090

Attached file stacks.txt (deleted) —

Turning the warning into an assertion and running reftests locally here is the unique stacks I got before I got impatient and killed the reftest run.

The general pattern is something like "something is still set up from when the document was rendering and not detached".

Specifically

  1. async callback after prefs change
  2. image notification
  3. destroying a frame tree and calling svg rendering observer
  4. svg font rendering observers called from refresh driver tick

The first 3 could be explained by "prescontext gets detached, but doesn't die until slightly later". For these if I were to write a fix for them it would just be checking if the prescontext is detached in a specific location before calling InvalidateFrame. Seems like just checking InvalidateFrame and returning is better (less code).

For the last one we would hope that we aren't running a refresh driver inside a detached prescontext. Perhaps that should be investigated more.

Component: Layout → Web Painting
Priority: -- → P3
Severity: normal → S3
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: