4
4
* SPDX-FileContributor: Authored By: Gustav Hartvigsson
8
* All comments are copid from the GJS source code, but changed to work with
13
* JavaScript bindings for GNOME
15
* Use the GNOME platform libraries in your JavaScript programs.
16
* GJS powers GNOME Shell, Polari, GNOME Documents, and many other apps.
17
* Under the hood it uses SpiderMonkey, Mozilla's JavaScript engine
18
* originally developed for Firefox.
7
20
[CCode (cheader_filename = "gjs/gjs.h",
9
22
lower_case_cprefix = "gjs_")]
37
* Gjs.Context is an opaque datastructure with no outward visible
40
49
[CCode (cname = "GjsContext",
41
50
type_id = "GJS_TYPE_CONTEXT")]
42
51
public class Context : GLib.Object {
54
* The properties here are based on what I can read from the C++ source
59
* Path where modules to import should reside.
62
public string[] search_path {construct;}
65
* The filename of the launched JS program
67
public string program_name {get {
68
unowned string ret_val = null;
69
this.@get ("program-name", ref ret_val);
74
* The full path of the launched file or NULL if GJS was launched from
75
* the C API or interactive console.
77
public string program_path {get {
78
unowned string ret_val = null;
79
this.@get ("program-path", ref ret_val);
83
* Set this property to profile any JS code run by this context. By
84
* default, the profiler is started and stopped when you call
85
* {@link Gjs.Context.eval}.
87
* The value of this property is superseded by the GJS_ENABLE_PROFILER
88
* environment variable.
90
* You may only have one context with the profiler enabled at a time.
93
public bool profiler_enabled {construct;}
96
* Set this property to install a SIGUSR2 signal handler that starts and
97
* stops the profiler. This property also implies that
98
* {@link Gjs.Context.profiler_enabled} is set.
101
public bool profiler_sigusr2 {construct;}
104
* Whether to execute the file as a module
107
public bool exec_as_module {construct;}
44
110
[CCode (cname = "gjs_context_new")]
45
111
public Context ();
82
148
throws GLib.Error;
84
150
[CCode (cname = "gjs_context_set_argv")]
85
public void set_argv ([CCode (array_length_pos = 0.1)]
151
public void set_argv ([CCode (array_length_pos = 0.1,
152
type = "const char**")]
86
153
string[] array_values);
156
* Returns a newly-allocated list containing all known instances of
157
* {@link Gjs.Context}. This is useful for operating on the contexts from a
158
* process-global situation such as a debugger.
160
* @return Known {@link Gjs.Context} instances
88
162
[CCode (cname = "gjs_context_get_all")]
89
public GLib.List get_all ();
163
public GLib.List<Context> get_all ();
91
165
[CCode (cname = "gjs_context_get_current")]
92
166
public static Context get_current ();
94
168
[CCode (cname = "gjs_context_make_current")]
95
169
public void make_current ();
172
* Returns a pointer to the underlying native context. For SpiderMonkey,
173
* this is a JSContext *
97
175
[CCode (cname = "gjs_context_get_native_context")]
98
176
public GLib.pointer get_native_context ();
100
178
[CCode (cname = "gjs_context_print_stack_stderr")]
101
179
public void print_stack_stderr ();
182
* Similar to the Spidermonkey JS_MaybeGC() call which
183
* heuristically looks at JS runtime memory usage and
184
* may initiate a garbage collection.
186
* This function always unconditionally invokes JS_MaybeGC(), but
187
* additionally looks at memory usage from the system malloc()
188
* when available, and if the delta has grown since the last run
189
* significantly, also initiates a full JavaScript garbage
190
* collection. The idea is that since GJS is a bridge between
191
* JavaScript and system libraries, and JS objects act as proxies
192
* for these system memory objects, GJS consumers need a way to
193
* hint to the runtime that it may be a good idea to try a
196
* A good time to call this function is when your application
197
* transitions to an idle state.
103
199
[CCode (cname = "gjs_context_maybe_gc")]
104
200
public void maybe_gc ();
203
* Initiate a full GC; may or may not block until complete. This
204
* function just calls Spidermonkey JS_GC().
106
206
[CCode (cname = "gjs_context_gc")]
107
207
public void gc ();
210
* Returns the profiler's internal instance of {@link Gjs.Profiler}
211
* for you to customize, or %NULL if profiling is not enabled on this
212
* {@link Gjs.Context}.
214
* @returns {@link Gjs.Profiler}
109
216
[CCode (cname = "gjs_context_get_profiler")]
110
217
public Profiler get_profiler ();
112
[CCode (cname = "gjs_profiler_chain_sgnal")]
113
public bool profiler_chain_signal (Posix.siginfo_t info);
115
219
[CCode (cname = "gjs_context_setup_debugger_console")]
116
220
public void setup_debugger_console ();
119
223
[CCode (cheader_filename = "gjs/context.h",
120
cname = "gjs_dump_stack")]
224
cname = "gjs_dumpstack")]
121
225
public void dump_stack ();
228
* Returns the underlying version of the JS engine.
123
232
[CCode (cheader_filename = "gjs/context.h",
124
233
cname = "gjs_get_js_version")]
125
234
public string get_js_version ();
132
241
cname = "GjsProfiler",
133
242
type_id = "GJS_TYPE_PROFILER")]
134
243
public class Profiler : GLib.Object {
245
* Set the capture writer to which profiling data is written when the
246
* ''this'' is stopped.
248
* @param capture A {SysprofCaptureWriter}
136
250
[CCode (cname = "gjs_profiler_set_capture_writer")]
137
void set_capture_writer (GLib.pointer capture);
251
public void set_capture_writer (GLib.pointer capture);
254
* Set the file to which profiling data is written when the ''this'' is
255
* stopped. By default, this is `gjs-$PID.syscap` in the current directory.
139
257
[CCode (cname = "gjs_profiler_set_filename")]
140
void set_filename (string filename);
258
public void set_filename (string filename);
142
261
[CCode (cname = "gjs_profiler_set_fd")]
143
void set_fd (int fd);
262
public void set_fd (int fd);
265
* As expected, this starts the {@link Gjs.Profiler}.
267
* This will enable the underlying JS profiler and register a POSIX timer to
268
* deliver SIGPROF on the configured sampling frequency.
270
* To reduce sampling overhead, Gjs.Profiler stashes information
271
* about the profile to be calculated once the profiler has been disabled.
272
* Calling Gjs.Profiler.stop() will result in that delayed work to be
275
* You should call Gjs.Profiler.stop() when the profiler is no longer
145
278
[CCode (cname = "gjs_profiler_start")]
279
public void start ();
282
* Stops a currently running {@link Gjs.Profiler}. If the profiler is not
283
* running, this function will do nothing.
285
* Some work may be delayed until the end of the capture. Such delayed work
286
* includes flushing the resulting samples and file location information to
289
* This may block while writing to disk. Generally, the writes are delivered
290
* to a tmpfs device, and are therefore negligible.
148
292
[CCode (cname = "gjs_profiler_stop")]
296
* Use this to pass a signal info caught by another signal handler to a
297
* {@link Gjs.Profiler}. This might be needed if you have your own complex
298
* signal handling system for which Gjs.Profiler cannot simply add a SIGUSR2
301
* This function should only be called from the JS thread.
303
* @return true if the signal was handled.
305
[CCode (cname = "gjs_profiler_chain_signal")]
306
public static bool chain_signal (Context ctx,
307
Posix.siginfo_t info);
152
310
[CCode (cheader_filename = "gjs/mem.h",
153
311
cname = "gjs_memory_report")]
154
void memory_report (string where,
312
public void memory_report (string where,
155
313
bool die_if_fail);
157
315
[CCode (cheader_filename = "gjs/coverage.h",
159
317
type_id = "GJS_TYPE_COVERAGE")]
160
318
public class Coverage : GLib.Object {
321
* Prefixes of files on which to perform coverage analysis
323
public string prefixes {construct;}
326
* A context to gather coverage stats for
328
public Context context {construct;}
331
* Directory handle at which to output coverage statistics
333
public GLib.File output_directory {construct;}
336
* Creates a new {@link Gjs.Coverage} object that collects coverage
337
* information for any scripts run in context.
339
* Scripts which were provided as part of {@link prefixes} will be written
340
* out to {@link output_dir}, in the same directory structure relative to
341
* the source dir where the tests were run.
343
* @param coverage_prefixes A null-terminated strv of prefixes of files on
344
* which to record code coverage
346
* @param coverage_context A {@link Gjs.Context} object
348
* @param output_dir A {@link GLib.File} handle to a directory in which to
349
* write coverage information
162
351
[CCode (cname = "gjs_coverage_new")]
163
352
public Coverage (string coverage_prefixes,
164
353
Context coverage_context,
165
354
GLib.File output_dir);
357
* Scripts which were provided as part of the {@link Gjs.Coverage.prefixes}
358
* construction property will be written out to {output_directory}, in the
359
* same directory structure relative to the source dir where the tests were
362
* This function takes all available statistics and writes them out to
363
* either the file provided or to files of the pattern (filename).info in
364
* the same directory as the scanned files. It will provide coverage data
365
* for all files ending with ".js" in the coverage directories.
167
367
[CCode (cname = "gjs_coverage_write_statistics")]
168
368
public void write_statistics ();
371
* This function must be called before creating any {@link Gjs.Context},
372
* if you intend to use any {@link Gjs.Coverage} APIs.
170
374
[CCode (cname = "gjs_coverage_enable")]
171
375
public static void enable ();