[gnome-shell] Make frame-timestamp logging optional
- From: Owen Taylor <otaylor src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] Make frame-timestamp logging optional
- Date: Wed, 16 Jul 2014 14:36:37 +0000 (UTC)
commit e30925995f249fe94e2e9dac090efaec9d3a540e
Author: Owen W. Taylor <otaylor fishsoup net>
Date: Thu Jun 26 20:34:15 2014 -0400
Make frame-timestamp logging optional
Instead of always logging frame timestamps for every frame - which
was using >26 bytes of memory per frame, or 5MB per hour of continuous
redrawing - make frame timestamps something that defaults off and is
turned turned on using a new ShellGlobal::frame-timestamps property by
the perf scripts.
https://bugzilla.gnome.org/show_bug.cgi?id=732350
js/perf/core.js | 3 +++
src/gnome-shell-plugin.c | 14 +++++++++++---
src/shell-global.c | 33 +++++++++++++++++++++++++++------
3 files changed, 41 insertions(+), 9 deletions(-)
---
diff --git a/js/perf/core.js b/js/perf/core.js
index b9f5494..51bdf43 100644
--- a/js/perf/core.js
+++ b/js/perf/core.js
@@ -72,6 +72,9 @@ function run() {
Scripting.defineScriptEvent("applicationsShowStart", "Starting to switch to applications view");
Scripting.defineScriptEvent("applicationsShowDone", "Done switching to applications view");
+ // Enable recording of timestamps for different points in the frame cycle
+ global.frame_timestamps = true;
+
Main.overview.connect('shown', function() {
Scripting.scriptEvent('overviewShowDone');
});
diff --git a/src/gnome-shell-plugin.c b/src/gnome-shell-plugin.c
index 2432310..8edc7b6 100644
--- a/src/gnome-shell-plugin.c
+++ b/src/gnome-shell-plugin.c
@@ -389,9 +389,17 @@ gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
* can send this with a ust of 0. Simplify life for consumers
* by ignoring such events */
if (swap_complete_event->ust != 0)
- shell_perf_log_event_x (shell_perf_log_get_default (),
- "glx.swapComplete",
- swap_complete_event->ust);
+ {
+ gboolean frame_timestamps;
+ g_object_get (shell_plugin->global,
+ "frame-timestamps", &frame_timestamps,
+ NULL);
+
+ if (frame_timestamps)
+ shell_perf_log_event_x (shell_perf_log_get_default (),
+ "glx.swapComplete",
+ swap_complete_event->ust);
+ }
}
#endif
diff --git a/src/shell-global.c b/src/shell-global.c
index dab8304..571483e 100644
--- a/src/shell-global.c
+++ b/src/shell-global.c
@@ -96,6 +96,7 @@ struct _ShellGlobal {
guint32 xdnd_timestamp;
gboolean has_modal;
+ gboolean frame_timestamps;
};
enum {
@@ -116,6 +117,7 @@ enum {
PROP_IMAGEDIR,
PROP_USERDATADIR,
PROP_FOCUS_MANAGER,
+ PROP_FRAME_TIMESTAMPS,
};
/* Signals */
@@ -146,6 +148,9 @@ shell_global_set_property(GObject *object,
g_clear_pointer (&global->session_mode, g_free);
global->session_mode = g_ascii_strdown (g_value_get_string (value), -1);
break;
+ case PROP_FRAME_TIMESTAMPS:
+ global->frame_timestamps = g_value_get_boolean (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -217,6 +222,9 @@ shell_global_get_property(GObject *object,
case PROP_FOCUS_MANAGER:
g_value_set_object (value, global->focus_manager);
break;
+ case PROP_FRAME_TIMESTAMPS:
+ g_value_set_boolean (value, global->frame_timestamps);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -500,6 +508,13 @@ shell_global_class_init (ShellGlobalClass *klass)
"The shell's StFocusManager",
ST_TYPE_FOCUS_MANAGER,
G_PARAM_READABLE));
+ g_object_class_install_property (gobject_class,
+ PROP_FRAME_TIMESTAMPS,
+ g_param_spec_boolean ("frame-timestamps",
+ "Frame Timestamps",
+ "Whether to log frame timestamps in the performance
log",
+ FALSE,
+ G_PARAM_READWRITE));
}
/*
@@ -756,8 +771,11 @@ global_stage_notify_height (GObject *gobject,
static gboolean
global_stage_before_paint (gpointer data)
{
- shell_perf_log_event (shell_perf_log_get_default (),
- "clutter.stagePaintStart");
+ ShellGlobal *global = SHELL_GLOBAL (data);
+
+ if (global->frame_timestamps)
+ shell_perf_log_event (shell_perf_log_get_default (),
+ "clutter.stagePaintStart");
return TRUE;
}
@@ -765,8 +783,11 @@ global_stage_before_paint (gpointer data)
static gboolean
global_stage_after_paint (gpointer data)
{
- shell_perf_log_event (shell_perf_log_get_default (),
- "clutter.stagePaintDone");
+ ShellGlobal *global = SHELL_GLOBAL (data);
+
+ if (global->frame_timestamps)
+ shell_perf_log_event (shell_perf_log_get_default (),
+ "clutter.stagePaintDone");
return TRUE;
}
@@ -951,11 +972,11 @@ _shell_global_set_plugin (ShellGlobal *global,
clutter_threads_add_repaint_func_full (CLUTTER_REPAINT_FLAGS_PRE_PAINT,
global_stage_before_paint,
- NULL, NULL);
+ global, NULL);
clutter_threads_add_repaint_func_full (CLUTTER_REPAINT_FLAGS_POST_PAINT,
global_stage_after_paint,
- NULL, NULL);
+ global, NULL);
shell_perf_log_define_event (shell_perf_log_get_default(),
"clutter.stagePaintStart",
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]