pkgsrc-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
pkg/47379: x11/xfce4-terminal high cpu usage solved by Dave Tyson's patch on at least DragonFly and NetBSD
>Number: 47379
>Category: pkg
>Synopsis: x11/xfce4-terminal high cpu usage solved by Dave Tyson's patch
>on at least DragonFly and NetBSD
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: pkg-manager
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Sun Dec 30 04:15:00 +0000 2012
>Originator: David Shao
>Release: DragonFly 3.3-DEVELOPMENT x86_64 i386
>Organization:
>Environment:
DragonFly 3.3-DEVELOPMENT x86_64 i386
>Description:
As detailed in PR pkg/46926, updating cairo led to x11/xfce4-terminal high cpu
usage with X11_TYPE=modular in DragonFly 3.3-DEVELOPMENT, both x86_64 and i386,
and in NetBSD 6.99.x amd64. Dave Tyson has a patch described in
http://mail-index.netbsd.org/pkgsrc-users/2012/12/20/msg017513.html
that appears to correct the high cpu usage problem in DragonFly 3.3-DEVELOPMENT
x86_64 and i386 and in NetBSD 6.
This patch restores effective usability of xfce4 in DragonFly and effects a
port that does not effect ports outside of xfce4; therefore, it is important
that it be included for pkgsrc-2012Q4, and if possible even be backported to
pkgsrc-2012Q3.
>How-To-Repeat:
Use current pkgsrc with X11_TYPE=modular in DragonFly 3.3-DEVELOPMENT x86_64 or
i386 or NetBSD 6.
>Fix:
Dave Tyson has a patch described in
http://mail-index.netbsd.org/pkgsrc-users/2012/12/20/msg017513.html
that appears to correct the high cpu usage problem in DragonFly 3.3-DEVELOPMENT
x86_64 and i386 and in NetBSD 6.
This patch on DragonFly has been tested to correct the high cpu usage problem
in machines that have an Radeon 9250 card, Radeon 4xxx cards, and a Lenovo
Ideapad netbook with Intel integrated graphics 945GM.
Relative to pkgsrc current master on DragonFly:
commit d2cf449a4442521a9a9c71d95f7b9e3cc08f4d62
Author: pkgsrc fixup <pkgsrc%dragonflybsd.org@localhost>
Date: Fri Dec 28 19:12:16 2012 -0800
a version of Dave Tyson's patch is as follows:
diff --git a/x11/xfce4-terminal/distinfo b/x11/xfce4-terminal/distinfo
index 7ab39b3..c4eaadf 100644
--- a/x11/xfce4-terminal/distinfo
+++ b/x11/xfce4-terminal/distinfo
@@ -3,3 +3,4 @@ $NetBSD: distinfo,v 1.5 2009/09/16 01:15:36 reed Exp $
SHA1 (Terminal-0.4.2.tar.bz2) = bf4510e331284d7f68ba193fe1d6f2e57b7815bb
RMD160 (Terminal-0.4.2.tar.bz2) = 8e6364673d6b0d8eddfd59f3f82d3944fca45684
Size (Terminal-0.4.2.tar.bz2) = 1981158 bytes
+SHA1 (patch-terminal_terminal-screen.c) =
89f86bb08528925fde2086d8d15904fd37349397
diff --git a/x11/xfce4-terminal/patches/patch-terminal_terminal-screen.c
b/x11/xfce4-terminal/patches/patch-terminal_terminal-screen.c
new file mode 100644
index 0000000..7eca3bf
--- /dev/null
+++ b/x11/xfce4-terminal/patches/patch-terminal_terminal-screen.c
@@ -0,0 +1,74 @@
+$NetBSD$
+
+--- terminal/terminal-screen.c.orig 2012-12-27 18:49:08.000000000 +0000
++++ terminal/terminal-screen.c
+@@ -87,6 +87,7 @@ static gboolean terminal_screen_get_ch
+ GError
**error);
+ static gchar **terminal_screen_get_child_environment
(TerminalScreen *screen);
+ static void terminal_screen_update_background
(TerminalScreen *screen);
++static void terminal_screen_update_background_fast
(TerminalScreen *screen);
+ static void terminal_screen_update_binding_backspace
(TerminalScreen *screen);
+ static void terminal_screen_update_binding_delete
(TerminalScreen *screen);
+ static void terminal_screen_update_colors
(TerminalScreen *screen);
+@@ -132,6 +133,8 @@ struct _TerminalScreen
+ GtkWidget *scrollbar;
+ GtkWidget *tab_label;
+
++ gulong background_signal_id;
++
+ GPid pid;
+ gchar *working_directory;
+
+@@ -231,7 +234,6 @@ terminal_screen_init (TerminalScreen *sc
+ "signal::context-menu", G_CALLBACK
(terminal_screen_vte_get_context_menu), screen,
+ "signal::selection-changed", G_CALLBACK
(terminal_screen_vte_selection_changed), screen,
+ "signal::window-title-changed", G_CALLBACK
(terminal_screen_vte_window_title_changed), screen,
+- "swapped-signal::size-allocate", G_CALLBACK
(terminal_screen_timer_background), screen,
+ "swapped-signal::style-set", G_CALLBACK
(terminal_screen_update_colors), screen,
+ NULL);
+ gtk_box_pack_start (GTK_BOX (screen), screen->terminal, TRUE, TRUE, 0);
+@@ -573,6 +575,18 @@ terminal_screen_get_child_environment (T
+
+
+ static void
++terminal_screen_update_background_fast (TerminalScreen *screen)
++{
++ if (G_UNLIKELY (screen->background_timer_id == 0))
++ {
++ screen->background_timer_id = g_idle_add_full (G_PRIORITY_LOW,
terminal_screen_timer_background,
++ screen,
terminal_screen_timer_background_destroy);
++ }
++}
++
++
++
++static void
+ terminal_screen_update_background (TerminalScreen *screen)
+ {
+ if (G_UNLIKELY (screen->background_timer_id != 0))
+@@ -1015,9 +1029,25 @@ terminal_screen_timer_background (gpoint
+ if (G_LIKELY (image != NULL))
+ g_object_unref (G_OBJECT (image));
+ g_object_unref (G_OBJECT (loader));
++
++ /* refresh background on size changes */
++ if (screen->background_signal_id == 0)
++ {
++ screen->background_signal_id =
++ g_signal_connect_swapped (G_OBJECT (screen->terminal),
"size-allocate",
++ G_CALLBACK
(terminal_screen_update_background_fast), screen);
++ }
+ }
+ else
+ {
++ /* stop updating on size changes */
++ if (screen->background_signal_id != 0)
++ {
++ g_signal_handler_disconnect (G_OBJECT (screen->terminal),
screen->background_signal_id);
++ screen->background_signal_id = 0;
++ }
++
++ /* WARNING: the causes a resize too! */
+ vte_terminal_set_background_image (VTE_TERMINAL (screen->terminal),
NULL);
+ }
+
Home |
Main Index |
Thread Index |
Old Index