environment: reduce calls to g_time_zone_new_local()
Creating a new GTimeZone for the local timezone can be quite expensive if done repeatedly. It requires an open(), mmap(), and parsing of /etc/localtime. This patch was provided by Florian, and I've tested it as far back as 3.28.4 to ensure that we are really reducing the number of open() calls on the compositor thread. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/1051 Signed-off-by: Christian Hergert <chergert@redhat.com> # Conflicts: # js/ui/environment.js
This commit is contained in:
parent
f3082a3683
commit
92cfb9ab1b
@ -17,6 +17,9 @@ const Gtk = imports.gi.Gtk;
|
|||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
const Shell = imports.gi.Shell;
|
const Shell = imports.gi.Shell;
|
||||||
const St = imports.gi.St;
|
const St = imports.gi.St;
|
||||||
|
const System = imports.system;
|
||||||
|
|
||||||
|
let _localTimeZone = null;
|
||||||
|
|
||||||
// We can't import shell JS modules yet, because they may have
|
// We can't import shell JS modules yet, because they may have
|
||||||
// variable initializations, etc, that depend on init() already having
|
// variable initializations, etc, that depend on init() already having
|
||||||
@ -116,9 +119,26 @@ function init() {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Override to clear our own timezone cache as well
|
||||||
|
const origClearDateCaches = System.clearDateCaches;
|
||||||
|
System.clearDateCaches = function () {
|
||||||
|
_localTimeZone = null;
|
||||||
|
origClearDateCaches();
|
||||||
|
};
|
||||||
|
|
||||||
// Work around https://bugzilla.mozilla.org/show_bug.cgi?id=508783
|
// Work around https://bugzilla.mozilla.org/show_bug.cgi?id=508783
|
||||||
Date.prototype.toLocaleFormat = function(format) {
|
Date.prototype.toLocaleFormat = function(format) {
|
||||||
return Shell.util_format_date(format, this.getTime());
|
if (_localTimeZone === null)
|
||||||
|
_localTimeZone = GLib.TimeZone.new_local();
|
||||||
|
|
||||||
|
let dt = GLib.DateTime.new(_localTimeZone,
|
||||||
|
this.getYear(),
|
||||||
|
this.getMonth() + 1,
|
||||||
|
this.getDate(),
|
||||||
|
this.getHours(),
|
||||||
|
this.getMinutes(),
|
||||||
|
this.getSeconds());
|
||||||
|
return dt ? dt.format(format) : '';
|
||||||
};
|
};
|
||||||
|
|
||||||
let slowdownEnv = GLib.getenv('GNOME_SHELL_SLOWDOWN_FACTOR');
|
let slowdownEnv = GLib.getenv('GNOME_SHELL_SLOWDOWN_FACTOR');
|
||||||
|
Loading…
Reference in New Issue
Block a user