From c6dc611d1b036742b18b7a24e3a8f1616f3cc479 Mon Sep 17 00:00:00 2001 From: Rui Matos Date: Aug 15 2016 14:53:19 +0000 Subject: Add upstream patch to fix a 100% cpu usage bug Resolves: #1353321 --- diff --git a/0001-screenshot-dialog-Avoid-resizing-the-preview-too-muc.patch b/0001-screenshot-dialog-Avoid-resizing-the-preview-too-muc.patch new file mode 100644 index 0000000..cefaefa --- /dev/null +++ b/0001-screenshot-dialog-Avoid-resizing-the-preview-too-muc.patch @@ -0,0 +1,78 @@ +From c21823be42c12f2d17be23364137af0a5a10f6b3 Mon Sep 17 00:00:00 2001 +From: Rui Matos +Date: Sun, 10 Jul 2016 16:35:41 +0200 +Subject: [PATCH] screenshot-dialog: Avoid resizing the preview too much + +Relying on configure events to resize the preview makes us do more +work than necessary and, in particular, gtk+ sometimes sends us phony +configure events sized 1x1 which make us hit a pretty CPU intensive +resize operation in gdk-pixbuf. + +Instead, we can avoid all that by creating the preview pixbuf lazily +on the draw handler using the actual allocated widget size. + +https://bugzilla.gnome.org/show_bug.cgi?id=768087 +--- + src/screenshot-dialog.c | 32 +++++++++++++++----------------- + 1 file changed, 15 insertions(+), 17 deletions(-) + +diff --git a/src/screenshot-dialog.c b/src/screenshot-dialog.c +index fd0cbdc..b436df0 100644 +--- a/src/screenshot-dialog.c ++++ b/src/screenshot-dialog.c +@@ -43,6 +43,21 @@ on_preview_draw (GtkWidget *drawing_area, + { + ScreenshotDialog *dialog = data; + GtkStyleContext *context; ++ int width, height; ++ ++ width = gtk_widget_get_allocated_width (drawing_area); ++ height = gtk_widget_get_allocated_height (drawing_area); ++ ++ if (!dialog->preview_image || ++ gdk_pixbuf_get_width (dialog->preview_image) != width || ++ gdk_pixbuf_get_height (dialog->preview_image) != height) ++ { ++ g_clear_object (&dialog->preview_image); ++ dialog->preview_image = gdk_pixbuf_scale_simple (dialog->screenshot, ++ width, ++ height, ++ GDK_INTERP_BILINEAR); ++ } + + context = gtk_widget_get_style_context (drawing_area); + gtk_style_context_save (context); +@@ -80,22 +95,6 @@ on_preview_button_release_event (GtkWidget *drawing_area, + } + + static void +-on_preview_configure_event (GtkWidget *drawing_area, +- GdkEventConfigure *event, +- gpointer data) +-{ +- ScreenshotDialog *dialog = data; +- +- if (dialog->preview_image) +- g_object_unref (G_OBJECT (dialog->preview_image)); +- +- dialog->preview_image = gdk_pixbuf_scale_simple (dialog->screenshot, +- event->width, +- event->height, +- GDK_INTERP_BILINEAR); +-} +- +-static void + drag_data_get (GtkWidget *widget, + GdkDragContext *context, + GtkSelectionData *selection_data, +@@ -179,7 +178,6 @@ setup_drawing_area (ScreenshotDialog *dialog, GtkBuilder *ui) + g_signal_connect (preview_darea, "draw", G_CALLBACK (on_preview_draw), dialog); + g_signal_connect (preview_darea, "button_press_event", G_CALLBACK (on_preview_button_press_event), dialog); + g_signal_connect (preview_darea, "button_release_event", G_CALLBACK (on_preview_button_release_event), dialog); +- g_signal_connect (preview_darea, "configure_event", G_CALLBACK (on_preview_configure_event), dialog); + + /* setup dnd */ + gtk_drag_source_set (preview_darea, +-- +2.7.4 + diff --git a/gnome-screenshot.spec b/gnome-screenshot.spec index 989aed2..cfb8e3a 100644 --- a/gnome-screenshot.spec +++ b/gnome-screenshot.spec @@ -1,6 +1,6 @@ Name: gnome-screenshot Version: 3.20.1 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A screenshot utility for GNOME Group: Applications/System @@ -8,6 +8,8 @@ License: GPLv2+ URL: http://www.gnome.org Source0: http://download.gnome.org/sources/gnome-screenshot/3.20/gnome-screenshot-%{version}.tar.xz +Patch0: 0001-screenshot-dialog-Avoid-resizing-the-preview-too-muc.patch + BuildRequires: gtk3-devel BuildRequires: libcanberra-devel BuildRequires: intltool @@ -24,7 +26,7 @@ gnome-screenshot lets you take pictures of your screen. %prep %setup -q - +%patch0 -p1 %build %configure @@ -61,6 +63,10 @@ glib-compile-schemas %{_datadir}/glib-2.0/schemas &>/dev/null || : %doc %{_mandir}/man1/gnome-screenshot.1.gz %changelog +* Mon Aug 15 2016 Rui Matos - 3.20.1-2 +- Add upstream patch to fix a 100% cpu usage bug + Resolves: #1353321 + * Wed Jun 22 2016 Richard Hughes - 3.20.1-1 - Update to 3.20.1