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.
20
[CCode (cheader_filename = "gjs/gjs.h",
22
lower_case_cprefix = "gjs_")]
7
[CCode (cheader_filename = "gjs/gjs.h", cprefix = "Gjs", lower_case_cprefix = "gjs_")]
26
[CCode (cname = "GjsError",
27
cprefix = "GJS_ERROR_",
28
lower_case_cprefix = "gjs_error_")]
29
public errordomain Error {
11
[CCode (cname = "GjsError", cprefix = "GJS_ERROR_", lower_case_cprefix = "gjs_error_")]
12
public errordomain GjsError {
34
[CCode (cname = "GjsJSError",
35
cprefix = "GJS_JS_ERROR_",
36
lower_case_cprefix = "gjs_js_error_")]
37
public errordomain JSError {
17
[CCode (cname = "GjsJSError", cprefix = "GJS_JS_ERROR_", lower_case_cprefix = "gjs_js_error_")]
18
public errordomain GjsJSError {
31
* Gjs.Context is an opaque datastructure with no outward visible
49
34
[CCode (cname = "GjsContext",
50
35
type_id = "GJS_TYPE_CONTEXT")]
51
36
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;}
110
38
[CCode (cname = "gjs_context_new")]
111
39
public Context ();
113
41
[CCode (cname = "gjs_context_new_with_search_path")]
114
public Context.with_search_path ([CCode (array_length = false)]
115
string[] search_path);
42
public Context.with_search_path ([CCode (array_length = false)] string[] search_path);
117
44
[CCode (cname = "gjs_context_eval_file")]
118
45
public bool eval_file (string filename,
168
87
[CCode (cname = "gjs_context_make_current")]
169
88
public void make_current ();
172
* Returns a pointer to the underlying native context. For SpiderMonkey,
173
* this is a JSContext *
175
90
[CCode (cname = "gjs_context_get_native_context")]
176
91
public GLib.pointer get_native_context ();
178
93
[CCode (cname = "gjs_context_print_stack_stderr")]
179
94
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.
199
96
[CCode (cname = "gjs_context_maybe_gc")]
200
97
public void maybe_gc ();
203
* Initiate a full GC; may or may not block until complete. This
204
* function just calls Spidermonkey JS_GC().
206
99
[CCode (cname = "gjs_context_gc")]
207
100
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}
216
102
[CCode (cname = "gjs_context_get_profiler")]
217
103
public Profiler get_profiler ();
105
[CCode (cname = "gjs_profiler_chain_sgnal")]
106
public bool profiler_chain_signal (Posix.siginfo_t info);
219
108
[CCode (cname = "gjs_context_setup_debugger_console")]
220
109
public void setup_debugger_console ();
223
[CCode (cheader_filename = "gjs/context.h",
224
cname = "gjs_dumpstack")]
112
[CCode (cheader_filename = "gjs/context.h", cname = "gjs_dump_stack")]
225
113
public void dump_stack ();
228
* Returns the underlying version of the JS engine.
232
[CCode (cheader_filename = "gjs/context.h",
233
cname = "gjs_get_js_version")]
115
[CCode (cheader_filename = "gjs/context.h", cname = "gjs_get_js_version")]
234
116
public string get_js_version ();
237
119
* This class has no visible _new function, can only be created from
240
[CCode (cheader_filename = "gjs/profiler.h",
241
cname = "GjsProfiler",
242
type_id = "GJS_TYPE_PROFILER")]
122
[CCode (cheader_filename = "gjs/profiler.h", cname = "GjsProfiler", type_id = "GJS_TYPE_PROFILER")]
243
123
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}
250
125
[CCode (cname = "gjs_profiler_set_capture_writer")]
251
public void set_capture_writer (GLib.pointer capture);
126
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.
257
128
[CCode (cname = "gjs_profiler_set_filename")]
258
public void set_filename (string filename);
129
void set_filename (string filename);
261
131
[CCode (cname = "gjs_profiler_set_fd")]
262
public void set_fd (int fd);
132
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
278
134
[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.
292
137
[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);
310
[CCode (cheader_filename = "gjs/mem.h",
311
cname = "gjs_memory_report")]
312
public void memory_report (string where,
141
[CCode (cheader_filename = "gjs/mem.h", cname = "gjs_memory_report")]
142
void memory_report (string where,
313
143
bool die_if_fail);
315
[CCode (cheader_filename = "gjs/coverage.h",
316
cname = "GjsProfiler",
317
type_id = "GJS_TYPE_COVERAGE")]
145
[CCode (cheader_filename = "gjs/coverage.h", cname = "GjsProfiler", type_id = "GJS_TYPE_COVERAGE")]
318
146
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
351
148
[CCode (cname = "gjs_coverage_new")]
352
149
public Coverage (string coverage_prefixes,
353
150
Context coverage_context,
354
151
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.
367
153
[CCode (cname = "gjs_coverage_write_statistics")]
368
154
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.
374
156
[CCode (cname = "gjs_coverage_enable")]
375
157
public static void enable ();