Branch data Line data Source code
1 : : // SPDX-License-Identifier: MIT OR LGPL-2.0-or-later
2 : : // SPDX-FileCopyrightText: 2021 Evan Welsh <contact@evanwelsh.com>
3 : :
4 : : #pragma once
5 : :
6 : : #include <config.h>
7 : :
8 : : #include <memory>
9 : :
10 : : #include <glib.h>
11 : :
12 : : #include <js/TypeDecls.h>
13 : :
14 : : #include "gjs/jsapi-util.h"
15 : :
16 : : class GjsContextPrivate;
17 : :
18 : : using GjsAutoMainContext =
19 : : GjsAutoPointer<GMainContext, GMainContext, g_main_context_unref,
20 : 466 : g_main_context_ref>;
21 : :
22 : : namespace Gjs {
23 : :
24 : : /**
25 : : * @brief A class which wraps a custom GSource and handles associating it with a
26 : : * GMainContext. While it is running, it will attach the source to the main
27 : : * context so that promise jobs are run at the appropriate time.
28 : : */
29 : : class PromiseJobDispatcher {
30 : : class Source;
31 : : // The thread-default GMainContext
32 : : GjsAutoMainContext m_main_context;
33 : : // The custom source.
34 : : std::unique_ptr<Source> m_source;
35 : :
36 : : public:
37 : : explicit PromiseJobDispatcher(GjsContextPrivate*);
38 : : ~PromiseJobDispatcher();
39 : :
40 : : /**
41 : : * @brief Start (or resume) dispatching jobs from the promise job queue
42 : : */
43 : : void start();
44 : :
45 : : /**
46 : : * @brief Stop dispatching
47 : : */
48 : : void stop();
49 : :
50 : : /**
51 : : * @brief Whether the dispatcher is currently running
52 : : */
53 : : bool is_running();
54 : : };
55 : :
56 : : }; // namespace Gjs
57 : :
58 : : bool gjs_define_native_promise_stuff(JSContext* cx,
59 : : JS::MutableHandleObject module);
|