After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 647310 - GtkHTML spins CPU?
GtkHTML spins CPU?
Status: RESOLVED DUPLICATE of bug 655248
Product: evolution
Classification: Applications
Component: Mailer
3.0.x (obsolete)
Other Linux
: Normal normal
: ---
Assigned To: evolution-mail-maintainers
Evolution QA team
Depends on:
Blocks:
 
 
Reported: 2011-04-09 20:04 UTC by Bastien Nocera
Modified: 2013-09-13 01:11 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
example spinner (6.45 KB, text/plain)
2011-05-18 15:12 UTC, Bastien Nocera
Details

Description Bastien Nocera 2011-04-09 20:04:06 UTC
When switching messages on IMAP before they're fully loaded, Evolution spins my CPU, and makes X.org spin as well. Trying to switch messages doesn't work and Evolution can't be exited cleanly.

Using:
gtk3-3.0.8-2.fc15.x86_64
evolution-3.0.0-1.fc15.x86_64
gtkhtml3-4.0.0-1.fc15.x86_64

  • #0 html_text_pi_forward
    at htmltext.c line 1481
  • #1 hts_fit_line
    at htmltextslave.c line 426
  • #2 layout_line
    at htmlclueflow.c line 958
  • #3 html_clue_flow_layout
    at htmlclueflow.c line 1022
  • #4 html_clue_flow_real_calc_size
    at htmlclueflow.c line 1051
  • #5 html_object_calc_size
    at htmlobject.c line 1081
  • #6 html_cluev_do_layout
    at htmlcluev.c line 209
  • #7 html_table_cell_real_calc_size
    at htmltablecell.c line 211
  • #8 html_object_calc_size
    at htmlobject.c line 1081
  • #9 calc_cells_size
    at htmltable.c line 1033
  • #10 html_table_real_calc_size
    at htmltable.c line 1101
  • #11 html_object_calc_size
    at htmlobject.c line 1081
  • #12 layout_line
    at htmlclueflow.c line 918
  • #13 html_clue_flow_layout
    at htmlclueflow.c line 1022
  • #14 html_clue_flow_real_calc_size
    at htmlclueflow.c line 1051
  • #15 html_object_calc_size
    at htmlobject.c line 1081
  • #16 html_cluev_do_layout
    at htmlcluev.c line 209
  • #17 html_table_cell_real_calc_size
    at htmltablecell.c line 211
  • #18 html_object_calc_size
    at htmlobject.c line 1081
  • #19 calc_cells_size
    at htmltable.c line 1033
  • #20 html_table_real_calc_size
    at htmltable.c line 1101
  • #21 html_object_calc_size
    at htmlobject.c line 1081
  • #22 layout_line
    at htmlclueflow.c line 918
  • #23 html_clue_flow_layout
    at htmlclueflow.c line 1022
  • #24 html_clue_flow_real_calc_size
    at htmlclueflow.c line 1051
  • #25 html_object_calc_size
    at htmlobject.c line 1081
  • #26 html_cluev_do_layout
    at htmlcluev.c line 209
  • #27 html_object_calc_size
    at htmlobject.c line 1081
  • #28 html_engine_calc_size
    at htmlengine.c line 5288
  • #29 compute_size_for_orientation
    at gtksizerequest.c line 270
  • #30 gtk_scrolled_window_size_allocate
    at gtkscrolledwindow.c line 1583
  • #31 g_closure_invoke
    at gclosure.c line 767
  • #32 signal_emit_unlocked_R
    at gsignal.c line 3182
  • #33 g_signal_emit_valist
    at gsignal.c line 2983
  • #34 g_signal_emit
    at gsignal.c line 3040
  • #35 gtk_widget_size_allocate
    at gtkwidget.c line 4870
  • #36 gtk_box_size_allocate
    at gtkbox.c line 656
  • #37 g_closure_invoke
    at gclosure.c line 767
  • #38 signal_emit_unlocked_R
    at gsignal.c line 3182
  • #39 g_signal_emit_valist
    at gsignal.c line 2983
  • #40 g_signal_emit
    at gsignal.c line 3040
  • #41 gtk_widget_size_allocate
    at gtkwidget.c line 4870
  • #42 gtk_paned_size_allocate
    at gtkpaned.c line 1067
  • #43 paned_size_allocate
    at e-paned.c line 253
  • #44 g_closure_invoke
    at gclosure.c line 767
  • #45 signal_emit_unlocked_R
    at gsignal.c line 3182
  • #46 g_signal_emit_valist
    at gsignal.c line 2983
  • #47 g_signal_emit
    at gsignal.c line 3040
  • #48 gtk_widget_size_allocate
    at gtkwidget.c line 4870
  • #49 gtk_box_size_allocate
    at gtkbox.c line 656
  • #50 g_closure_invoke
    at gclosure.c line 767
  • #51 signal_emit_unlocked_R
    at gsignal.c line 3182
  • #52 g_signal_emit_valist
    at gsignal.c line 2983
  • #53 g_signal_emit
    at gsignal.c line 3040
  • #54 gtk_widget_size_allocate
    at gtkwidget.c line 4870
  • #55 shell_content_size_allocate
    at e-shell-content.c line 321
  • #56 g_closure_invoke
    at gclosure.c line 767
  • #57 signal_emit_unlocked_R
    at gsignal.c line 3182
  • #58 g_signal_emit_valist
    at gsignal.c line 2983
  • #59 g_signal_emit
    at gsignal.c line 3040
  • #60 gtk_widget_size_allocate
    at gtkwidget.c line 4870
  • #61 gtk_notebook_size_allocate
    at gtknotebook.c line 2404
  • #62 g_closure_invoke
    at gclosure.c line 767
  • #63 signal_emit_unlocked_R
    at gsignal.c line 3182
  • #64 g_signal_emit_valist
    at gsignal.c line 2983
  • #65 g_signal_emit
    at gsignal.c line 3040
  • #66 gtk_widget_size_allocate
    at gtkwidget.c line 4870
  • #67 gtk_box_size_allocate
    at gtkbox.c line 656
  • #68 g_closure_invoke
    at gclosure.c line 767
  • #69 signal_emit_unlocked_R
    at gsignal.c line 3182
  • #70 g_signal_emit_valist
    at gsignal.c line 2983
  • #71 g_signal_emit
    at gsignal.c line 3040
  • #72 gtk_widget_size_allocate
    at gtkwidget.c line 4870
  • #73 gtk_paned_size_allocate
    at gtkpaned.c line 1067
  • #74 g_closure_invoke
    at gclosure.c line 767
  • #75 signal_emit_unlocked_R
    at gsignal.c line 3182
  • #76 g_signal_emit_valist
    at gsignal.c line 2983
  • #77 g_signal_emit
    at gsignal.c line 3040
  • #78 gtk_widget_size_allocate
    at gtkwidget.c line 4870
  • #79 gtk_box_size_allocate
    at gtkbox.c line 656
  • #80 g_closure_invoke
    at gclosure.c line 767
  • #81 signal_emit_unlocked_R
    at gsignal.c line 3182
  • #82 g_signal_emit_valist
    at gsignal.c line 2983
  • #83 g_signal_emit
    at gsignal.c line 3040
  • #84 gtk_widget_size_allocate
    at gtkwidget.c line 4870
  • #85 gtk_window_size_allocate
    at gtkwindow.c line 5253
  • #86 g_closure_invoke
    at gclosure.c line 767
  • #87 signal_emit_unlocked_R
    at gsignal.c line 3182
  • #88 g_signal_emit_valist
    at gsignal.c line 2983
  • #89 g_signal_emit
    at gsignal.c line 3040
  • #90 gtk_widget_size_allocate
    at gtkwidget.c line 4870
  • #91 gtk_container_resize_children
    at gtkcontainer.c line 1767
  • #92 gtk_window_move_resize
    at gtkwindow.c line 7001
  • #93 gtk_window_check_resize
    at gtkwindow.c line 5903
  • #94 g_closure_invoke
    at gclosure.c line 767
  • #95 signal_emit_unlocked_R
    at gsignal.c line 3290
  • #96 g_signal_emit_valist
    at gsignal.c line 2983
  • #97 g_signal_emit
    at gsignal.c line 3040
  • #98 gtk_container_idle_sizer
    at gtkcontainer.c line 1603
  • #99 gdk_threads_dispatch
    at gdk.c line 741
  • #100 g_main_dispatch
    at gmain.c line 2440
  • #101 g_main_context_dispatch
    at gmain.c line 3013
  • #102 g_main_context_iterate
    at gmain.c line 3091
  • #103 g_main_loop_run
    at gmain.c line 3299
  • #104 gtk_main
    at gtkmain.c line 1358
  • #105 main
    at main.c line 734

Comment 1 Bastien Nocera 2011-04-09 20:05:50 UTC


  • #0 g_type_check_instance_is_a
    at gtype.c line 3952
  • #1 gdk_window_get_position
    at gdkwindow.c line 2232
  • #2 gtk_widget_invalidate_widget_windows
    at gtkwidget.c line 4704
  • #3 gtk_widget_size_allocate
    at gtkwidget.c line 4899
  • #4 gtk_scrolled_window_allocate_child
    at gtkscrolledwindow.c line 1504
  • #5 gtk_scrolled_window_size_allocate
    at gtkscrolledwindow.c line 1702
  • #6 g_closure_invoke
    at gclosure.c line 767
  • #7 signal_emit_unlocked_R
    at gsignal.c line 3182
  • #8 g_signal_emit_valist
    at gsignal.c line 2983
  • #9 g_signal_emit
    at gsignal.c line 3040
  • #10 gtk_widget_size_allocate
    at gtkwidget.c line 4870
  • #11 gtk_box_size_allocate
    at gtkbox.c line 656
  • #12 g_closure_invoke
    at gclosure.c line 767
  • #13 signal_emit_unlocked_R
    at gsignal.c line 3182
  • #14 g_signal_emit_valist
    at gsignal.c line 2983
  • #15 g_signal_emit
    at gsignal.c line 3040
  • #16 gtk_widget_size_allocate
    at gtkwidget.c line 4870
  • #17 gtk_paned_size_allocate
    at gtkpaned.c line 1067
  • #18 paned_size_allocate
    at e-paned.c line 253
  • #19 g_closure_invoke
    at gclosure.c line 767
  • #20 signal_emit_unlocked_R
    at gsignal.c line 3182
  • #21 g_signal_emit_valist
    at gsignal.c line 2983
  • #22 g_signal_emit
    at gsignal.c line 3040
  • #23 gtk_widget_size_allocate
    at gtkwidget.c line 4870
  • #24 gtk_box_size_allocate
    at gtkbox.c line 656
  • #25 g_closure_invoke
    at gclosure.c line 767
  • #26 signal_emit_unlocked_R
    at gsignal.c line 3182
  • #27 g_signal_emit_valist
    at gsignal.c line 2983
  • #28 g_signal_emit
    at gsignal.c line 3040
  • #29 gtk_widget_size_allocate
    at gtkwidget.c line 4870
  • #30 shell_content_size_allocate
    at e-shell-content.c line 321
  • #31 g_closure_invoke
    at gclosure.c line 767
  • #32 signal_emit_unlocked_R
    at gsignal.c line 3182
  • #33 g_signal_emit_valist
    at gsignal.c line 2983
  • #34 g_signal_emit
    at gsignal.c line 3040
  • #35 gtk_widget_size_allocate
    at gtkwidget.c line 4870
  • #36 gtk_notebook_size_allocate
    at gtknotebook.c line 2404
  • #37 g_closure_invoke
    at gclosure.c line 767
  • #38 signal_emit_unlocked_R
    at gsignal.c line 3182
  • #39 g_signal_emit_valist
    at gsignal.c line 2983
  • #40 g_signal_emit
    at gsignal.c line 3040
  • #41 gtk_widget_size_allocate
    at gtkwidget.c line 4870
  • #42 gtk_box_size_allocate
    at gtkbox.c line 656
  • #43 g_closure_invoke
    at gclosure.c line 767
  • #44 signal_emit_unlocked_R
    at gsignal.c line 3182
  • #45 g_signal_emit_valist
    at gsignal.c line 2983
  • #46 g_signal_emit
    at gsignal.c line 3040
  • #47 gtk_widget_size_allocate
    at gtkwidget.c line 4870
  • #48 gtk_paned_size_allocate
    at gtkpaned.c line 1067
  • #49 g_closure_invoke
    at gclosure.c line 767
  • #50 signal_emit_unlocked_R
    at gsignal.c line 3182
  • #51 g_signal_emit_valist
    at gsignal.c line 2983
  • #52 g_signal_emit
    at gsignal.c line 3040
  • #53 gtk_widget_size_allocate
    at gtkwidget.c line 4870
  • #54 gtk_box_size_allocate
    at gtkbox.c line 656
  • #55 g_closure_invoke
    at gclosure.c line 767
  • #56 signal_emit_unlocked_R
    at gsignal.c line 3182
  • #57 g_signal_emit_valist
    at gsignal.c line 2983
  • #58 g_signal_emit
    at gsignal.c line 3040
  • #59 gtk_widget_size_allocate
    at gtkwidget.c line 4870
  • #60 gtk_window_size_allocate
    at gtkwindow.c line 5253
  • #61 g_closure_invoke
    at gclosure.c line 767
  • #62 signal_emit_unlocked_R
    at gsignal.c line 3182
  • #63 g_signal_emit_valist
    at gsignal.c line 2983
  • #64 g_signal_emit
    at gsignal.c line 3040
  • #65 gtk_widget_size_allocate
    at gtkwidget.c line 4870
  • #66 gtk_container_resize_children
    at gtkcontainer.c line 1767
  • #67 gtk_window_move_resize
    at gtkwindow.c line 7001
  • #68 gtk_window_check_resize
    at gtkwindow.c line 5903
  • #69 g_closure_invoke
    at gclosure.c line 767
  • #70 signal_emit_unlocked_R
    at gsignal.c line 3290
  • #71 g_signal_emit_valist
    at gsignal.c line 2983
  • #72 g_signal_emit
    at gsignal.c line 3040
  • #73 gtk_container_idle_sizer
    at gtkcontainer.c line 1603
  • #74 gdk_threads_dispatch
    at gdk.c line 741
  • #75 g_main_dispatch
    at gmain.c line 2440
  • #76 g_main_context_dispatch
    at gmain.c line 3013
  • #77 g_main_context_iterate
    at gmain.c line 3091
  • #78 g_main_loop_run
    at gmain.c line 3299
  • #79 gtk_main
    at gtkmain.c line 1358
  • #80 main
    at main.c line 734

Comment 2 Milan Crha 2011-05-17 12:24:50 UTC
Thanks for a bug report. Do you have a test message which exhibits this issue, please?  Also, this might be fixed when Evolution will start using WebKit instead of pretty much dead GtkHTML for message showing.
Comment 3 Bastien Nocera 2011-05-17 14:55:18 UTC
Seems to happen with HTML mail from gmail. I'll copy a message as .eml when I get a chance. And I'm eagerly waiting for the WebKit powered preview as well :)
Comment 4 Bastien Nocera 2011-05-18 15:12:07 UTC
Created attachment 188041 [details]
example spinner
Comment 5 Bastien Nocera 2011-05-18 15:12:57 UTC
I can now work-around the problem by disabling the message preview (Ctrl+M), switching messages, and using Ctrl+M again.
Comment 6 Milan Crha 2011-06-03 13:42:42 UTC
(In reply to comment #3)
> Seems to happen with HTML mail from gmail. I'll copy a message as .eml when I
> get a chance. And I'm eagerly waiting for the WebKit powered preview as well :)

Thanks for the update. I do not see any significant slowdown with your mail, only a short high CPU usage, but nothing even noticeable, it can be less than half a second. If I make the message text longer, about 1.5MB, then the slowdown is noticeable very nicely. All that when gtkhtml tries to wrap one long line into smaller parts based on the screen size. The actual code seems to be slightly inefficient.

The message itself isn't any how complicated HTML code, it's only few DIV-s.

Due to the WebKit migration for evo's HTML renderer, as you mentioned above, I prefer to have this opened as a tester for the move, to see whether it'll really work better or not (I hope and believe it will).
Comment 7 Michael Meeks 2011-07-25 10:27:40 UTC
marking a dup of mine which has some more digging :-)

*** This bug has been marked as a duplicate of bug 655248 ***