[gtksourceview] view: short-circuit when painting background marks



commit 112bf4682ec8192664d4efd2871cbd7a3f43ec6d
Author: Christian Hergert <chergert redhat com>
Date:   Tue Sep 3 20:57:58 2019 -0700

    view: short-circuit when painting background marks
    
    Often times we do not have any source marks. We can use that information
    to avoid walking the buffer during our draw_layer operations.
    
    This is a minor performance improvement in the common case.

 gtksourceview/gtksourcebuffer-private.h |  3 +++
 gtksourceview/gtksourcebuffer.c         | 13 +++++++++++++
 gtksourceview/gtksourceview.c           |  1 +
 3 files changed, 17 insertions(+)
---
diff --git a/gtksourceview/gtksourcebuffer-private.h b/gtksourceview/gtksourcebuffer-private.h
index 51a6a310..87c77970 100644
--- a/gtksourceview/gtksourcebuffer-private.h
+++ b/gtksourceview/gtksourcebuffer-private.h
@@ -80,6 +80,9 @@ void                   _gtk_source_buffer_restore_selection           (GtkSourceBuffer      
  *buffer);
 GTK_SOURCE_INTERNAL
 gboolean                _gtk_source_buffer_is_undo_redo_enabled        (GtkSourceBuffer        *buffer);
 
+GTK_SOURCE_INTERNAL
+gboolean               _gtk_source_buffer_has_source_marks             (GtkSourceBuffer        *buffer);
+
 G_END_DECLS
 
 #endif /* GTK_SOURCE_BUFFER_PRIVATE_H */
diff --git a/gtksourceview/gtksourcebuffer.c b/gtksourceview/gtksourcebuffer.c
index 2341a6b3..98670c5d 100644
--- a/gtksourceview/gtksourcebuffer.c
+++ b/gtksourceview/gtksourcebuffer.c
@@ -2325,6 +2325,19 @@ gtk_source_buffer_remove_source_marks (GtkSourceBuffer   *buffer,
        g_slist_free (list);
 }
 
+gboolean
+_gtk_source_buffer_has_source_marks (GtkSourceBuffer *buffer)
+{
+       g_return_val_if_fail (GTK_SOURCE_IS_BUFFER (buffer), FALSE);
+
+       if (buffer->priv->all_source_marks != NULL)
+       {
+               return !_gtk_source_marks_sequence_is_empty (buffer->priv->all_source_marks);
+       }
+
+       return FALSE;
+}
+
 static GtkTextTag *
 get_context_class_tag (GtkSourceBuffer *buffer,
                       const gchar     *context_class)
diff --git a/gtksourceview/gtksourceview.c b/gtksourceview/gtksourceview.c
index eec9ce57..a146ccfa 100644
--- a/gtksourceview/gtksourceview.c
+++ b/gtksourceview/gtksourceview.c
@@ -2464,6 +2464,7 @@ gtk_source_view_paint_marks_background (GtkSourceView *view,
        gint i;
 
        if (view->priv->source_buffer == NULL ||
+           !_gtk_source_buffer_has_source_marks (view->priv->source_buffer) ||
            !gdk_cairo_get_clip_rectangle (cr, &clip))
        {
                return;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]