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 374623 - Clearlooks hangs ephy
Clearlooks hangs ephy
Status: RESOLVED FIXED
Product: epiphany
Classification: Core
Component: Interface
unspecified
Other Linux
: Normal normal
: ---
Assigned To: Epiphany Maintainers
Marco Pesenti Gritti
Depends on:
Blocks:
 
 
Reported: 2006-11-13 10:29 UTC by Bastien Nocera
Modified: 2006-11-17 18:02 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
patch to ephy-spinner.c that changes the animation priority (508 bytes, patch)
2006-11-14 14:02 UTC, Benjamin Berg
committed Details | Review

Description Bastien Nocera 2006-11-13 10:29:51 UTC
gtk2-engines-2.8.0-1.fc6

After restarting epiphany after a crash, the pages wouldn't load anymore. Clearlooks/cairo shows that it's hanging trying to draw things. Switching to "Bluecurve" as the theme made the pages appear straight away.

A couple of backtraces attached:
  • #0 __kernel_vsyscall
  • #1 writev
    from /lib/libc.so.6
  • #2 _X11TransGetConnectionNumber
    from /usr/lib/libX11.so.6
  • #3 _X11TransWritev
    from /usr/lib/libX11.so.6
  • #4 _XSend
    from /usr/lib/libX11.so.6
  • #5 XRenderCompositeTrapezoids
    from /usr/lib/libXrender.so.1
  • #6 cairo_xlib_surface_get_display
    from /usr/lib/libcairo.so.2
  • #7 cairo_surface_reference
    from /usr/lib/libcairo.so.2
  • #8 cairo_surface_create_similar
    from /usr/lib/libcairo.so.2
  • #9 cairo_surface_create_similar
    from /usr/lib/libcairo.so.2
  • #10 cairo_surface_create_similar
    from /usr/lib/libcairo.so.2
  • #11 cairo_surface_create_similar
    from /usr/lib/libcairo.so.2
  • #12 cairo_surface_reference
    from /usr/lib/libcairo.so.2
  • #13 cairo_font_options_create
    from /usr/lib/libcairo.so.2
  • #14 cairo_stroke_preserve
    from /usr/lib/libcairo.so.2
  • #15 cairo_stroke
    from /usr/lib/libcairo.so.2
  • #16 theme_init
    from /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so
  • #17 theme_init
    from /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so
  • #18 ??
    from /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so
  • #19 IA__gtk_paint_extension
    at gtkstyle.c line 6160
  • #20 gtk_notebook_draw_tab
    at gtknotebook.c line 4531
  • #21 gtk_notebook_expose
    at gtknotebook.c line 4484
  • #22 _gtk_marshal_BOOLEAN__BOXED
    at gtkmarshalers.c line 84
  • #23 g_type_class_meta_marshal
    at gclosure.c line 567
  • #24 IA__g_closure_invoke
    at gclosure.c line 490
  • #25 signal_emit_unlocked_R
    at gsignal.c line 2476
  • #26 IA__g_signal_emit_valist
    at gsignal.c line 2207
  • #27 IA__g_signal_emit
    at gsignal.c line 2241
  • #28 gtk_widget_event_internal
    at gtkwidget.c line 3911
  • #29 IA__gtk_container_propagate_expose
    at gtkcontainer.c line 2461
  • #30 gtk_container_expose_child
    at gtkcontainer.c line 2349
  • #31 gtk_box_forall
    at gtkbox.c line 670
  • #32 IA__gtk_container_forall
    at gtkcontainer.c line 1261
  • #33 gtk_container_expose
    at gtkcontainer.c line 2372
  • #34 _gtk_marshal_BOOLEAN__BOXED
    at gtkmarshalers.c line 84
  • #35 g_type_class_meta_marshal
    at gclosure.c line 567
  • #36 IA__g_closure_invoke
    at gclosure.c line 490
  • #37 signal_emit_unlocked_R
    at gsignal.c line 2476
  • #38 IA__g_signal_emit_valist
    at gsignal.c line 2207
  • #39 IA__g_signal_emit
    at gsignal.c line 2241
  • #40 gtk_widget_event_internal
    at gtkwidget.c line 3911
  • #41 IA__gtk_container_propagate_expose
    at gtkcontainer.c line 2461
  • #42 gtk_container_expose_child
    at gtkcontainer.c line 2349
  • #43 gtk_bin_forall
    at gtkbin.c line 133
  • #44 IA__gtk_container_forall
    at gtkcontainer.c line 1261
  • #45 gtk_container_expose
    at gtkcontainer.c line 2372
  • #46 gtk_window_expose
    at gtkwindow.c line 6070
  • #47 _gtk_marshal_BOOLEAN__BOXED
    at gtkmarshalers.c line 84
  • #48 g_type_class_meta_marshal
    at gclosure.c line 567
  • #49 IA__g_closure_invoke
    at gclosure.c line 490
  • #50 signal_emit_unlocked_R
    at gsignal.c line 2476
  • #51 IA__g_signal_emit_valist
    at gsignal.c line 2207
  • #52 IA__g_signal_emit
    at gsignal.c line 2241
  • #53 gtk_widget_event_internal
    at gtkwidget.c line 3911
  • #54 IA__gtk_main_do_event
    at gtkmain.c line 1380
  • #55 gdk_window_process_updates_internal
    at gdkwindow.c line 2324
  • #56 IA__gdk_window_process_all_updates
    at gdkwindow.c line 2387
  • #57 gdk_window_update_idle
    at gdkwindow.c line 2245
  • #58 g_idle_dispatch
    at gmain.c line 3926
  • #59 IA__g_main_context_dispatch
    at gmain.c line 2045
  • #60 g_main_context_iterate
    at gmain.c line 2677
  • #61 IA__g_main_loop_run
    at gmain.c line 2881
  • #62 IA__gtk_main
    at gtkmain.c line 1001
  • #63 main
  • #0 cos
    from /lib/libm.so.6
  • #1 cairo_create
    from /usr/lib/libcairo.so.2
  • #2 cairo_arc
    from /usr/lib/libcairo.so.2
  • #3 theme_init
    from /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so
  • #4 theme_init
    from /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so
  • #5 ??
    from /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so
  • #6 IA__gtk_paint_extension
    at gtkstyle.c line 6160
  • #7 gtk_notebook_draw_tab
    at gtknotebook.c line 4531
  • #8 gtk_notebook_expose
    at gtknotebook.c line 4484
  • #9 _gtk_marshal_BOOLEAN__BOXED
    at gtkmarshalers.c line 84
  • #10 g_type_class_meta_marshal
    at gclosure.c line 567
  • #11 IA__g_closure_invoke
    at gclosure.c line 490
  • #12 signal_emit_unlocked_R
    at gsignal.c line 2476
  • #13 IA__g_signal_emit_valist
    at gsignal.c line 2207
  • #14 IA__g_signal_emit
    at gsignal.c line 2241
  • #15 gtk_widget_event_internal
    at gtkwidget.c line 3911
  • #16 IA__gtk_container_propagate_expose
    at gtkcontainer.c line 2461
  • #17 gtk_container_expose_child
    at gtkcontainer.c line 2349
  • #18 gtk_box_forall
    at gtkbox.c line 670
  • #19 IA__gtk_container_forall
    at gtkcontainer.c line 1261
  • #20 gtk_container_expose
    at gtkcontainer.c line 2372
  • #21 _gtk_marshal_BOOLEAN__BOXED
    at gtkmarshalers.c line 84
  • #22 g_type_class_meta_marshal
    at gclosure.c line 567
  • #23 IA__g_closure_invoke
    at gclosure.c line 490
  • #24 signal_emit_unlocked_R
    at gsignal.c line 2476
  • #25 IA__g_signal_emit_valist
    at gsignal.c line 2207
  • #26 IA__g_signal_emit
    at gsignal.c line 2241
  • #27 gtk_widget_event_internal
    at gtkwidget.c line 3911
  • #28 IA__gtk_container_propagate_expose
    at gtkcontainer.c line 2461
  • #29 gtk_container_expose_child
    at gtkcontainer.c line 2349
  • #30 gtk_bin_forall
    at gtkbin.c line 133
  • #31 IA__gtk_container_forall
    at gtkcontainer.c line 1261
  • #32 gtk_container_expose
    at gtkcontainer.c line 2372
  • #33 gtk_window_expose
    at gtkwindow.c line 6070
  • #34 _gtk_marshal_BOOLEAN__BOXED
    at gtkmarshalers.c line 84
  • #35 g_type_class_meta_marshal
    at gclosure.c line 567
  • #36 IA__g_closure_invoke
    at gclosure.c line 490
  • #37 signal_emit_unlocked_R
    at gsignal.c line 2476
  • #38 IA__g_signal_emit_valist
    at gsignal.c line 2207
  • #39 IA__g_signal_emit
    at gsignal.c line 2241
  • #40 gtk_widget_event_internal
    at gtkwidget.c line 3911
  • #41 IA__gtk_main_do_event
    at gtkmain.c line 1380
  • #42 gdk_window_process_updates_internal
    at gdkwindow.c line 2324
  • #43 IA__gdk_window_process_all_updates
    at gdkwindow.c line 2387
  • #44 gdk_window_update_idle
    at gdkwindow.c line 2245
  • #45 g_idle_dispatch
    at gmain.c line 3926
  • #46 IA__g_main_context_dispatch
    at gmain.c line 2045
  • #47 g_main_context_iterate
    at gmain.c line 2677
  • #48 IA__g_main_loop_run
    at gmain.c line 2881
  • #49 IA__gtk_main
    at gtkmain.c line 1001
  • #50 main

Comment 1 Benjamin Berg 2006-11-13 19:34:43 UTC
I don't see anything wrong in these stack traces. Looks like Clearlooks is redrawing the notebook tabs for the throbber animation.

As I understand it, everything is working as expected. Clearlooks redraws the tabs for the throbber animation and the ui is still responding. Is that right?
Comment 2 Bastien Nocera 2006-11-13 19:44:58 UTC
(In reply to comment #1)
> I don't see anything wrong in these stack traces. Looks like Clearlooks is
> redrawing the notebook tabs for the throbber animation.

Yep.

> As I understand it, everything is working as expected. Clearlooks redraws the
> tabs for the throbber animation and the ui is still responding. Is that right?

Certainly not working as expected. It might only be a performance problem, but there's no page data. Switching gtk+ themes made all the pages show up.

Comment 3 Benjamin Berg 2006-11-13 22:05:32 UTC
So this is a performance issue. What seems to happen is that the timeout for the animation has a higher priority than doing any work to load the pages. So as soon as drawing the animation uses up all the available cpu power no page load can happen.

While clearlooks could use some optimizations, I think this should be solved in epiphany. Optimizing clearlooks will only increase the number of open tabs needed to get into this situation.
Comment 4 Christian Persch 2006-11-13 23:42:42 UTC
I see no evidence of the spinner being responsible here, how do you came to that conclusion?
(The timeout is installed in lib/widgets/ephy-spinner.c:ephy_spinner_start.)

In my opinion, this is https://bugzilla.mozilla.org/show_bug.cgi?id=352096 coupled with the fact that showing the 1st ephy window causes a style reset somehow.
Comment 5 Benjamin Berg 2006-11-14 00:13:11 UTC
Well, I have no problem reproducing this by just opening a lot of windows with tabs fast (hit ctrl+t a lot and ctrl+n every once in a while).
After a short time so many tabs are open that the cpu load goes to 100%. At that point, nothing loads. Then if I close some tabs the pages load.
Comment 6 Bastien Nocera 2006-11-14 08:23:05 UTC
(In reply to comment #5)
> Well, I have no problem reproducing this by just opening a lot of windows with
> tabs fast (hit ctrl+t a lot and ctrl+n every once in a while).
> After a short time so many tabs are open that the cpu load goes to 100%. At
> that point, nothing loads. Then if I close some tabs the pages load.

And does it load again if you change themes?
Comment 7 Benjamin Berg 2006-11-14 14:01:27 UTC
(In reply to comment #6)
> And does it load again if you change themes?

Only if I change to a less intensive theme. Change to Raleigh, it works, to some pixmap theme, nothing changes ...

I just tried changing the priority of the animation timeout (which defaults to G_PRIORITY_DEFAULT) to G_PRIORITY_LOW. This fixed the issue for me.
Comment 8 Benjamin Berg 2006-11-14 14:02:19 UTC
Created attachment 76565 [details] [review]
patch to ephy-spinner.c that changes the animation priority
Comment 9 Christian Persch 2006-11-14 17:44:07 UTC
Thanks for the patch, please commit to HEAD and gnome-2-16.
Comment 10 Benjamin Berg 2006-11-17 18:02:18 UTC
Commited to both HEAD and gnome-2-16.