PythonMonkey   v1.1.2 (dev)
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
JobQueue.hh
Go to the documentation of this file.
1
11#ifndef PythonMonkey_JobQueue_
12#define PythonMonkey_JobQueue_
13
14#include <jsapi.h>
15#include <js/Promise.h>
16
17#include <Python.h>
18
24class JobQueue : public JS::JobQueue {
25
26public:
27explicit JobQueue(JSContext *cx);
28~JobQueue() = default;
29
35bool init(JSContext *cx);
36
52bool getHostDefinedData(JSContext *cx, JS::MutableHandle<JSObject *> data) const override;
53
63bool enqueuePromiseJob(JSContext *cx, JS::HandleObject promise,
64 JS::HandleObject job, JS::HandleObject allocationSite,
65 JS::HandleObject incumbentGlobal) override;
66
82void runJobs(JSContext *cx) override;
83
87bool empty() const override;
88
92bool isDrainingStopped() const override;
93
99void queueFinalizationRegistryCallback(JSFunction *callback);
100
108bool runFinalizationRegistryCallbacks(JSContext *cx);
109
110private:
111
112using FunctionVector = JS::GCVector<JSFunction *, 0, js::SystemAllocPolicy>;
113JS::PersistentRooted<FunctionVector> *finalizationRegistryCallbacks;
114
124js::UniquePtr<JS::JobQueue::SavedJobQueue> saveJobQueue(JSContext *) override;
125
134static bool dispatchToEventLoop(void *closure, JS::Dispatchable *dispatchable);
135
146static void promiseRejectionTracker(JSContext *cx, bool mutedErrors,
147 JS::HandleObject promise, JS::PromiseRejectionHandlingState state,
148 void *privateData);
149
150}; // class
151
158bool sendJobToMainLoop(PyObject *pyFunc);
159
160#endif
bool sendJobToMainLoop(PyObject *pyFunc)
Send job to the Python event-loop on main thread (Thread-Safe)
Definition JobQueue.cc:114
Implement the ECMAScript Job Queue: https://www.ecma-international.org/ecma-262/9....
Definition JobQueue.hh:24
bool empty() const override
Definition JobQueue.cc:61
bool isDrainingStopped() const override
Definition JobQueue.cc:66
bool init(JSContext *cx)
Initialize PythonMonkey's event-loop job queue.
Definition JobQueue.cc:80
~JobQueue()=default
void queueFinalizationRegistryCallback(JSFunction *callback)
Appends a callback to the queue of FinalizationRegistry callbacks.
Definition JobQueue.cc:167
void runJobs(JSContext *cx) override
Run all jobs in the queue. Running one job may enqueue others; continue to run jobs until the queue i...
Definition JobQueue.cc:57
bool runFinalizationRegistryCallbacks(JSContext *cx)
Runs the accumulated queue of FinalizationRegistry callbacks.
Definition JobQueue.cc:171
bool enqueuePromiseJob(JSContext *cx, JS::HandleObject promise, JS::HandleObject job, JS::HandleObject allocationSite, JS::HandleObject incumbentGlobal) override
Enqueue a reaction job job for promise, which was allocated at allocationSite. Provide incumbentGloba...
Definition JobQueue.cc:34
bool getHostDefinedData(JSContext *cx, JS::MutableHandle< JSObject * > data) const override
Ask the embedding for the host defined data.
Definition JobQueue.cc:29