Accepting request 634813 from GNOME:Next

OBS-URL: https://build.opensuse.org/request/show/634813
OBS-URL: https://build.opensuse.org/package/show/GNOME:Factory/gjs?expand=0&rev=155
This commit is contained in:
Luciano Santos 2018-09-21 23:30:04 +00:00 committed by Git OBS Bridge
parent 87f20a2a90
commit 168582a143
7 changed files with 128 additions and 265 deletions

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:ce21d8a83f6077b011b8834c4936281be65b2b62387f0745c3eb9adf780996fc
size 626512

3
gjs-1.54.0.tar.xz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e22c63f4dbf243d7a5a6660f6443ca3e5768695a48fc9fdf078bce7cf7aa657d
size 647552

View File

@ -1,91 +0,0 @@
From 090298512b12e76929bf8bd14dccbfd355f78dce Mon Sep 17 00:00:00 2001
From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
Date: Fri, 30 Mar 2018 21:37:37 -0300
Subject: [PATCH] context: Add API to force GC schedule
There are situations where we cannot run the
GC right away, but we also cannot ignore the
need of running it.
For those cases, add a new private function
that forces GC to happen on idle.
---
gjs/context-private.h | 2 ++
gjs/context.cpp | 29 +++++++++++++++++++++++++----
2 files changed, 27 insertions(+), 4 deletions(-)
diff --git a/gjs/context-private.h b/gjs/context-private.h
index 6dbe669..c45c8d0 100644
--- a/gjs/context-private.h
+++ b/gjs/context-private.h
@@ -36,6 +36,8 @@ bool _gjs_context_destroying (GjsContext *js_context);
void _gjs_context_schedule_gc_if_needed (GjsContext *js_context);
+void _gjs_context_schedule_gc (GjsContext *js_context);
+
void _gjs_context_exit(GjsContext *js_context,
uint8_t exit_code);
diff --git a/gjs/context.cpp b/gjs/context.cpp
index c509943..77d7eaa 100644
--- a/gjs/context.cpp
+++ b/gjs/context.cpp
@@ -90,6 +90,7 @@ struct _GjsContext {
uint8_t exit_code;
guint auto_gc_id;
+ bool force_gc;
std::array<JS::PersistentRootedId*, GJS_STRING_LAST> const_strings;
@@ -592,22 +593,42 @@ trigger_gc_if_needed (gpointer user_data)
{
GjsContext *js_context = GJS_CONTEXT(user_data);
js_context->auto_gc_id = 0;
- gjs_gc_if_needed(js_context->context);
+
+ if (js_context->force_gc)
+ JS_GC(js_context->context);
+ else
+ gjs_gc_if_needed(js_context->context);
+
return G_SOURCE_REMOVE;
}
-void
-_gjs_context_schedule_gc_if_needed (GjsContext *js_context)
+
+static void
+_gjs_context_schedule_gc_internal (GjsContext *js_context,
+ bool force_gc)
{
if (js_context->auto_gc_id > 0)
- return;
+ g_source_remove(js_context->auto_gc_id);
+ js_context->force_gc = force_gc;
js_context->auto_gc_id = g_idle_add_full(G_PRIORITY_LOW,
trigger_gc_if_needed,
js_context, NULL);
}
void
+_gjs_context_schedule_gc (GjsContext *js_context)
+{
+ _gjs_context_schedule_gc_internal(js_context, true);
+}
+
+void
+_gjs_context_schedule_gc_if_needed (GjsContext *js_context)
+{
+ _gjs_context_schedule_gc_internal(js_context, false);
+}
+
+void
_gjs_context_exit(GjsContext *js_context,
uint8_t exit_code)
{
--
libgit2 0.27.0

View File

@ -1,123 +0,0 @@
From e9e969553866b0dd29e78b41c0e372569405f46c Mon Sep 17 00:00:00 2001
From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
Date: Wed, 28 Mar 2018 19:21:52 -0300
Subject: [PATCH] object: Queue a forced GC when toggling down
During a GC, the collector asks each object which other
objects that it wants to hold on to so if there's an entire
section of the heap graph that's not connected to anything
else, and not reachable from the root set, then it can be
trashed all at once.
GObjects, however, don't work like that, there's only a
reference count but no notion of who owns the reference so,
a JS object that's proxying a GObject is unconditionally held
alive as long as the GObject has >1 references.
Since we cannot know how many more wrapped GObjects are going
be marked for garbage collection after the owner is destroyed,
always queue a garbage collection when a toggle reference goes
down.
Issue: #140
---
gi/object.cpp | 22 ++++++++++++++++++++++
gjs/context-private.h | 2 +-
gjs/context.cpp | 14 ++++++++------
3 files changed, 31 insertions(+), 7 deletions(-)
diff --git a/gi/object.cpp b/gi/object.cpp
index 3fdfced..606a918 100644
--- a/gi/object.cpp
+++ b/gi/object.cpp
@@ -1001,8 +1001,30 @@ handle_toggle_down(GObject *gobj)
* collected by the GC
*/
if (priv->keep_alive.rooted()) {
+ GjsContext *context;
+
gjs_debug_lifecycle(GJS_DEBUG_GOBJECT, "Unrooting object");
priv->keep_alive.switch_to_unrooted();
+
+ /* During a GC, the collector asks each object which other
+ * objects that it wants to hold on to so if there's an entire
+ * section of the heap graph that's not connected to anything
+ * else, and not reachable from the root set, then it can be
+ * trashed all at once.
+ *
+ * GObjects, however, don't work like that, there's only a
+ * reference count but no notion of who owns the reference so,
+ * a JS object that's proxying a GObject is unconditionally held
+ * alive as long as the GObject has >1 references.
+ *
+ * Since we cannot know how many more wrapped GObjects are going
+ * be marked for garbage collection after the owner is destroyed,
+ * always queue a garbage collection when a toggle reference goes
+ * down.
+ */
+ context = gjs_context_get_current();
+ if (!_gjs_context_destroying(context))
+ _gjs_context_schedule_gc(context);
}
}
diff --git a/gjs/context-private.h b/gjs/context-private.h
index c45c8d0..49c0cf9 100644
--- a/gjs/context-private.h
+++ b/gjs/context-private.h
@@ -36,7 +36,7 @@ bool _gjs_context_destroying (GjsContext *js_context);
void _gjs_context_schedule_gc_if_needed (GjsContext *js_context);
-void _gjs_context_schedule_gc (GjsContext *js_context);
+void _gjs_context_schedule_gc(GjsContext *js_context);
void _gjs_context_exit(GjsContext *js_context,
uint8_t exit_code);
diff --git a/gjs/context.cpp b/gjs/context.cpp
index 77d7eaa..a2ce34a 100644
--- a/gjs/context.cpp
+++ b/gjs/context.cpp
@@ -599,31 +599,33 @@ trigger_gc_if_needed (gpointer user_data)
else
gjs_gc_if_needed(js_context->context);
+ js_context->force_gc = false;
+
return G_SOURCE_REMOVE;
}
static void
-_gjs_context_schedule_gc_internal (GjsContext *js_context,
- bool force_gc)
+_gjs_context_schedule_gc_internal(GjsContext *js_context,
+ bool force_gc)
{
if (js_context->auto_gc_id > 0)
- g_source_remove(js_context->auto_gc_id);
+ return;
- js_context->force_gc = force_gc;
+ js_context->force_gc |= force_gc;
js_context->auto_gc_id = g_idle_add_full(G_PRIORITY_LOW,
trigger_gc_if_needed,
js_context, NULL);
}
void
-_gjs_context_schedule_gc (GjsContext *js_context)
+_gjs_context_schedule_gc(GjsContext *js_context)
{
_gjs_context_schedule_gc_internal(js_context, true);
}
void
-_gjs_context_schedule_gc_if_needed (GjsContext *js_context)
+_gjs_context_schedule_gc_if_needed(GjsContext *js_context)
{
_gjs_context_schedule_gc_internal(js_context, false);
}
--
libgit2 0.27.0

View File

@ -1,35 +0,0 @@
From c0420db97ea574afe80664d3835995fba0c1e47b Mon Sep 17 00:00:00 2001
From: Carlos Garnacho <carlosg@gnome.org>
Date: Wed, 25 Apr 2018 13:39:12 +0200
Subject: [PATCH] context: Ensure force_gc flag is not lost if the idle is scheduled
If the first caller that triggers the idle happens to be non-forcing,
all later forcing calls would be ignored.
https://gitlab.gnome.org/GNOME/gjs/issues/150
Closes: #150
---
gjs/context.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/gjs/context.cpp b/gjs/context.cpp
index a2ce34a..e66a9f8 100644
--- a/gjs/context.cpp
+++ b/gjs/context.cpp
@@ -609,10 +609,11 @@ static void
_gjs_context_schedule_gc_internal(GjsContext *js_context,
bool force_gc)
{
+ js_context->force_gc |= force_gc;
+
if (js_context->auto_gc_id > 0)
return;
- js_context->force_gc |= force_gc;
js_context->auto_gc_id = g_idle_add_full(G_PRIORITY_LOW,
trigger_gc_if_needed,
js_context, NULL);
--
libgit2 0.27.0

View File

@ -1,3 +1,113 @@
-------------------------------------------------------------------
Sun Sep 9 07:16:38 UTC 2018 - antoine.belvire@opensuse.org
- Update to version 1.54.0:
+ Compatibility fix for byte arrays: the legacy toString()
behaviour of byte arrays returned from GObject-introspected
functions is now restored. If you use the functionality, a
warning will be logged asking you to upgrade your code
(glgo#GNOME/gjs#227).
-------------------------------------------------------------------
Fri Aug 31 03:31:25 UTC 2018 - luc14n0@linuxmail.org
- Update to version 1.53.92:
+ Technology preview of a GNOME 3.32 feature: native Promises for
GIO-style asynchronous operations. Since this is a technology
preview, we do not guarantee API stability with the version
coming in GNOME 3.32. These APIs are marked with underscores to
emphasize that they are not stable yet. Use them at your own
risk.
+ Closed bugs and merge requests:
- Added promisify to GJS GIO overrides (glgo#GNOME/gjs!225).
- Temporary fix for Gio.File.prototype (glgo#GNOME/gjs!226).
- Changes from version 1.53.91:
+ Closed bugs and merge requests:
- Fix example eslint errors;
- Fix more "lost" GInterface properties.
- Changes from version 1.53.90:
+ GJS includes a simple debugger now.
+ New API for programs that embed GJS:
gjs_context_setup_debugger_console().
+ New JavaScript features! This version of GJS is based on
SpiderMonkey 60, an upgrade from the previous ESR (Extended
Support Release) of SpiderMonkey 52.
+ Fixed bugs: glgo#GNOME/gjs#178, glgo#GNOME/gjs#179,
glgo#GNOME/gjs#185, glgo#GNOME/gjs#110, CWE-126
(glgo#GNOME/gjs#174), glgo#GNOME/gjs#149, glgo#GNOME/gjs#132,
glgo#GNOME/gjs#161, glgo#GNOME/gjs#5, glgo#GNOME/gjs#186.
- Changes from version 1.53.4:
+ Refactored the way GObject properties are accessed. This should
be a bit more efficient, as property info (GParamSpec) is now
cached for every object type. There may still be some
regressions from this; please be on the lookout so we can fix
them in the next release.
+ The memory usage for each object instance has been reduced,
resulting in several dozens of megabytes less memory usage in
GNOME Shell.
+ Fixed bugs: glgo#GNOME/gjs#160, glgo#GNOME/gjs#24,
glgo#GNOME/gjs#173, glgo#GNOME/gjs#165, glgo#GNOME/gjs#171,
glgo#GNOME/gjs#177, glgo#GNOME/gjs#172, glgo#GNOME/gjs#182.
- Changes from version 1.53.3:
+ Closed bugs and merge requests:
- Adding multiple ESLint rules for spacing.
- Various maintenance.
- Add pkgconfig(mozjs-60) BuildRequires while dropping its
predecessor pkgconfig(mozjs-52) and mozjs52-devel to reflect
upstream changes.
- Conditionalize the use of systemtap/dtrace: they are currently
failing.
-------------------------------------------------------------------
Sun Jul 8 01:53:03 UTC 2018 - luc14n0@linuxmail.org
- Update to version 1.53.3:
+ Adding multiple ESLint rules for spacing.
+ Various small fixes.
-------------------------------------------------------------------
Sun Jul 8 01:53:02 UTC 2018 - luc14n0@linuxmail.org
- Update to version 1.53.2:
+ The `Template` parameter passed to `GObject.registerClass()`
now accepts file:/// URIs as well as resource:/// URIs and byte
arrays.
+ New API: `gjs_get_js_version()` returns a string identifying
the version of the underlying SpiderMonkey JS engine. The
interpreter executable has also gained a `--jsversion` argument
which will print this string.
+ Several fixes for memory efficiency and performance.
+ Fixed bugs:
- Reduce memory overhead of g_object_weak_ref()
(glgo#GNOME/gjs#144).
- Use compacting GC on RSS size growth (glgo#GNOME/gjs#151).
- Segfault on enumeration of GjSFileImporter properties when a
searchpath entry contains a symlink.
-------------------------------------------------------------------
Sun Jul 8 01:53:01 UTC 2018 - luc14n0@linuxmail.org
- Update to version 1.53.1:
+ Improvements to garbage collection performance.
+ Now, when building a class from a UI template file signals
defined in the UI template file will be automatically
connected.
+ Fixed bugs:
- Tweener: Add min/max properties;
- `ARGV` encoding issues (glgo#GNOME/gjs#22);
- Make GC much more aggressive (glgo#GNOME/gjs#62);
- Queue GC when a GObject reference is toggled down
(glgo#GNOME/gjs#140);
- overrides: support Gtk template callbacks;
- Ensure not to miss the force_gc flag (glgo#GNOME/gjs#150).
- Append LGPL-2.0-or-later to the License tag to conform to due
source code licenses. And set LPGL-2.0-or-later License tag for
libgjs library subpackage.
- Drop fixed upstream patches:
+ gjs-Add-API-to-force-GC-schedule.patch and
+ gjs-Queue-forced-GC.patch.
+ gjs-ensure-force_gc-flag-use.patch.
-------------------------------------------------------------------
Thu Jul 5 20:00:00 UTC 2018 - bjorn.lie@gmail.com
@ -198,7 +308,7 @@ Tue Oct 31 22:54:17 UTC 2017 - luc14n0@linuxmail.org
+ Minor bugfixes.
- Update Url to https://wiki.gnome.org/Projects/Gjs: current Gjs'
project web page.
- Alignment BuildRequires with configure:
- Align BuildRequires with configure:
+ Add pkgconfig(*): cairo-gobject, gio-2.0, gobject-2.0 and
gthread-2.0.
+ Drop pkgconfig(libmozjs-52) and libxml2-tools.

View File

@ -16,22 +16,19 @@
#
# TODO: systemtap/dtrace is currently (1.53.91) failing, when
# https://gitlab.gnome.org/GNOME/gjs/issues/196 gets fixed and released,
# remove all conditional macros and enable systemtap.
%bcond_with systemtap
Name: gjs
Version: 1.52.3
Version: 1.54.0
Release: 0
Summary: JavaScript bindings based on gobject-introspection and Mozilla
License: MIT
License: MIT AND LGPL-2.0-or-later
Group: Development/Libraries/GNOME
URL: https://wiki.gnome.org/Projects/Gjs
Source0: http://download.gnome.org/sources/gjs/1.52/%{name}-%{version}.tar.xz
# PATCH-FIX-UPSTREAM gjs-Add-API-to-force-GC-schedule.patch -- context: Add API to force GC schedule
Patch0: gjs-Add-API-to-force-GC-schedule.patch
# PATCH-FIX-UPSTREAM gjs-Queue-forced-GC.patch -- object: Queue a forced GC when toggling down
Patch1: gjs-Queue-forced-GC.patch
# PATCH-FIX-UPSTREAM gjs-ensure-force_gc-flag-use.patch -- context: Ensure force_gc flag is not lost if the idle is scheduled
Patch2: gjs-ensure-force_gc-flag-use.patch
Source0: http://download.gnome.org/sources/gjs/1.54/%{name}-%{version}.tar.xz
BuildRequires: gcc-c++
BuildRequires: mozjs52-devel
BuildRequires: pkgconfig
BuildRequires: python
BuildRequires: readline-devel
@ -47,7 +44,7 @@ BuildRequires: pkgconfig(gobject-introspection-1.0) >= 1.53.4
BuildRequires: pkgconfig(gthread-2.0) >= 2.50.0
BuildRequires: pkgconfig(gtk+-3.0) >= 3.20
BuildRequires: pkgconfig(libffi)
#BuildRequires: pkgconfig(mozjs-52)
BuildRequires: pkgconfig(mozjs-60)
Requires: libgjs0 = %{version}
ExcludeArch: s390
@ -57,6 +54,7 @@ Mozilla SpiderMonkey JavaScript engine.
%package -n libgjs0
Summary: JavaScript bindings based on gobject-introspection and Mozilla
License: LGPL-2.0-or-later
Group: System/Libraries
Provides: libgjs-0 = %{version}
Obsoletes: libgjs-0 < %{version}
@ -68,6 +66,7 @@ Mozilla SpiderMonkey JavaScript engine.
%package -n typelib-1_0-GjsPrivate-1_0
Summary: Introspection bindings for the GJS library
# The tyeplib was renamed in gnome 3.6, to reflect it is a private lib.
License: MIT AND LGPL-2.0-or-later
Group: System/Libraries
Obsoletes: typelib-1_0-GjsDBus-1_0 < %{version}
@ -77,6 +76,7 @@ Mozilla SpiderMonkey JavaScript engine.
%package -n libgjs-devel
Summary: Development files for the GJS library
License: MIT AND LGPL-2.0-or-later
Group: Development/Libraries/GNOME
Requires: %{name} = %{version}
Requires: libgjs0 = %{version}
@ -94,7 +94,7 @@ Mozilla SpiderMonkey JavaScript engine.
%build
%configure \
--disable-static \
--enable-systemtap
--%{?with_systemtap:enable}%{!?with_systemtap:disable}-systemtap
make %{?_smp_mflags}
%install
@ -124,6 +124,8 @@ find %{buildroot} -type f -name "*.la" -delete -print
%{_libdir}/*.so
%{_libdir}/pkgconfig/*.pc
%{_datadir}/%{name}-1.0/
%if %{with systemtap}
%{_datadir}/systemtap/tapset/*.stp
%endif
%changelog