Skip to content

Commit ce1b1f9

Browse files
committed
smoke tests: showcase new way of invoking callbacks
Signed-off-by: Patryk Wrobel <183546751+pwrobeldev@users.noreply.github.com>
1 parent 4ccc3ac commit ce1b1f9

22 files changed

Lines changed: 315 additions & 105 deletions

gluecodium/src/test/resources/smoke/async/output/dart/ffi/ffi_smoke_AsyncClass.cpp

Lines changed: 63 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,15 @@ class smoke_AsyncClass_AsyncvoidResultlambda_Proxy {
6363

6464
inline void dispatch(std::function<void()>&& callback) const
6565
{
66-
gluecodium::ffi::IsolateContext::is_current(isolate_id)
67-
? callback()
68-
: gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
66+
if (isolate_thread_id != std::this_thread::get_id()) {
67+
gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
68+
} else if (gluecodium::ffi::IsolateContext::is_current(isolate_id)) {
69+
callback();
70+
} else {
71+
Dart_EnterIsolate_DL(isolate_handle);
72+
callback();
73+
Dart_ExitIsolate_DL();
74+
}
6975
}
7076
};
7177

@@ -116,9 +122,15 @@ class smoke_AsyncClass_AsyncvoidthrowsResultlambda_Proxy {
116122

117123
inline void dispatch(std::function<void()>&& callback) const
118124
{
119-
gluecodium::ffi::IsolateContext::is_current(isolate_id)
120-
? callback()
121-
: gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
125+
if (isolate_thread_id != std::this_thread::get_id()) {
126+
gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
127+
} else if (gluecodium::ffi::IsolateContext::is_current(isolate_id)) {
128+
callback();
129+
} else {
130+
Dart_EnterIsolate_DL(isolate_handle);
131+
callback();
132+
Dart_ExitIsolate_DL();
133+
}
122134
}
123135
};
124136

@@ -170,9 +182,15 @@ class smoke_AsyncClass_AsyncvoidthrowsErrorlambda_Proxy {
170182

171183
inline void dispatch(std::function<void()>&& callback) const
172184
{
173-
gluecodium::ffi::IsolateContext::is_current(isolate_id)
174-
? callback()
175-
: gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
185+
if (isolate_thread_id != std::this_thread::get_id()) {
186+
gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
187+
} else if (gluecodium::ffi::IsolateContext::is_current(isolate_id)) {
188+
callback();
189+
} else {
190+
Dart_EnterIsolate_DL(isolate_handle);
191+
callback();
192+
Dart_ExitIsolate_DL();
193+
}
176194
}
177195
};
178196

@@ -224,9 +242,15 @@ class smoke_AsyncClass_AsyncintResultlambda_Proxy {
224242

225243
inline void dispatch(std::function<void()>&& callback) const
226244
{
227-
gluecodium::ffi::IsolateContext::is_current(isolate_id)
228-
? callback()
229-
: gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
245+
if (isolate_thread_id != std::this_thread::get_id()) {
246+
gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
247+
} else if (gluecodium::ffi::IsolateContext::is_current(isolate_id)) {
248+
callback();
249+
} else {
250+
Dart_EnterIsolate_DL(isolate_handle);
251+
callback();
252+
Dart_ExitIsolate_DL();
253+
}
230254
}
231255
};
232256

@@ -278,9 +302,15 @@ class smoke_AsyncClass_AsyncintthrowsResultlambda_Proxy {
278302

279303
inline void dispatch(std::function<void()>&& callback) const
280304
{
281-
gluecodium::ffi::IsolateContext::is_current(isolate_id)
282-
? callback()
283-
: gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
305+
if (isolate_thread_id != std::this_thread::get_id()) {
306+
gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
307+
} else if (gluecodium::ffi::IsolateContext::is_current(isolate_id)) {
308+
callback();
309+
} else {
310+
Dart_EnterIsolate_DL(isolate_handle);
311+
callback();
312+
Dart_ExitIsolate_DL();
313+
}
284314
}
285315
};
286316

@@ -332,9 +362,15 @@ class smoke_AsyncClass_AsyncintthrowsErrorlambda_Proxy {
332362

333363
inline void dispatch(std::function<void()>&& callback) const
334364
{
335-
gluecodium::ffi::IsolateContext::is_current(isolate_id)
336-
? callback()
337-
: gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
365+
if (isolate_thread_id != std::this_thread::get_id()) {
366+
gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
367+
} else if (gluecodium::ffi::IsolateContext::is_current(isolate_id)) {
368+
callback();
369+
} else {
370+
Dart_EnterIsolate_DL(isolate_handle);
371+
callback();
372+
Dart_ExitIsolate_DL();
373+
}
338374
}
339375
};
340376

@@ -385,9 +421,15 @@ class smoke_AsyncClass_AsyncstaticResultlambda_Proxy {
385421

386422
inline void dispatch(std::function<void()>&& callback) const
387423
{
388-
gluecodium::ffi::IsolateContext::is_current(isolate_id)
389-
? callback()
390-
: gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
424+
if (isolate_thread_id != std::this_thread::get_id()) {
425+
gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
426+
} else if (gluecodium::ffi::IsolateContext::is_current(isolate_id)) {
427+
callback();
428+
} else {
429+
Dart_EnterIsolate_DL(isolate_handle);
430+
callback();
431+
Dart_ExitIsolate_DL();
432+
}
391433
}
392434
};
393435

gluecodium/src/test/resources/smoke/async/output/dart/ffi/ffi_smoke_AsyncRenamed.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,15 @@ class smoke_AsyncRenamed_DisposeResultlambda_Proxy {
6060

6161
inline void dispatch(std::function<void()>&& callback) const
6262
{
63-
gluecodium::ffi::IsolateContext::is_current(isolate_id)
64-
? callback()
65-
: gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
63+
if (isolate_thread_id != std::this_thread::get_id()) {
64+
gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
65+
} else if (gluecodium::ffi::IsolateContext::is_current(isolate_id)) {
66+
callback();
67+
} else {
68+
Dart_EnterIsolate_DL(isolate_handle);
69+
callback();
70+
Dart_ExitIsolate_DL();
71+
}
6672
}
6773
};
6874

gluecodium/src/test/resources/smoke/async/output/dart/ffi/ffi_smoke_AsyncWithSkips.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,15 @@ class smoke_AsyncWithSkips_MakeSharedInstanceResultlambda_Proxy {
6060

6161
inline void dispatch(std::function<void()>&& callback) const
6262
{
63-
gluecodium::ffi::IsolateContext::is_current(isolate_id)
64-
? callback()
65-
: gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
63+
if (isolate_thread_id != std::this_thread::get_id()) {
64+
gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
65+
} else if (gluecodium::ffi::IsolateContext::is_current(isolate_id)) {
66+
callback();
67+
} else {
68+
Dart_EnterIsolate_DL(isolate_handle);
69+
callback();
70+
Dart_ExitIsolate_DL();
71+
}
6672
}
6773
};
6874

gluecodium/src/test/resources/smoke/durations/output/dart/ffi/ffi_smoke_DurationInterface.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,15 @@ class smoke_DurationInterface_Proxy : public smoke::DurationInterface {
7373

7474
inline void dispatch(std::function<void()>&& callback) const
7575
{
76-
gluecodium::ffi::IsolateContext::is_current(isolate_id)
77-
? callback()
78-
: gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
76+
if (isolate_thread_id != std::this_thread::get_id()) {
77+
gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
78+
} else if (gluecodium::ffi::IsolateContext::is_current(isolate_id)) {
79+
callback();
80+
} else {
81+
Dart_EnterIsolate_DL(isolate_handle);
82+
callback();
83+
Dart_ExitIsolate_DL();
84+
}
7985
}
8086
};
8187

gluecodium/src/test/resources/smoke/errors/output/dart/ffi/ffi_smoke_ErrorsInterface.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,15 @@ class smoke_ErrorsInterface_Proxy : public smoke::ErrorsInterface {
105105

106106
inline void dispatch(std::function<void()>&& callback) const
107107
{
108-
gluecodium::ffi::IsolateContext::is_current(isolate_id)
109-
? callback()
110-
: gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
108+
if (isolate_thread_id != std::this_thread::get_id()) {
109+
gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
110+
} else if (gluecodium::ffi::IsolateContext::is_current(isolate_id)) {
111+
callback();
112+
} else {
113+
Dart_EnterIsolate_DL(isolate_handle);
114+
callback();
115+
Dart_ExitIsolate_DL();
116+
}
111117
}
112118
};
113119

gluecodium/src/test/resources/smoke/external_types/output/dart/ffi/ffi_smoke_ExternalInterface.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,15 @@ class smoke_ExternalInterface_Proxy : public smoke::ExternalInterface {
7777
const FfiOpaqueHandle p0g;
7878
inline void dispatch(std::function<void()>&& callback) const
7979
{
80-
gluecodium::ffi::IsolateContext::is_current(isolate_id)
81-
? callback()
82-
: gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
80+
if (isolate_thread_id != std::this_thread::get_id()) {
81+
gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
82+
} else if (gluecodium::ffi::IsolateContext::is_current(isolate_id)) {
83+
callback();
84+
} else {
85+
Dart_EnterIsolate_DL(isolate_handle);
86+
callback();
87+
Dart_ExitIsolate_DL();
88+
}
8389
}
8490
};
8591

gluecodium/src/test/resources/smoke/instances/output/dart/ffi/ffi_smoke_SimpleInterface.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,15 @@ class smoke_SimpleInterface_Proxy : public smoke::SimpleInterface {
8484

8585
inline void dispatch(std::function<void()>&& callback) const
8686
{
87-
gluecodium::ffi::IsolateContext::is_current(isolate_id)
88-
? callback()
89-
: gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
87+
if (isolate_thread_id != std::this_thread::get_id()) {
88+
gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
89+
} else if (gluecodium::ffi::IsolateContext::is_current(isolate_id)) {
90+
callback();
91+
} else {
92+
Dart_EnterIsolate_DL(isolate_handle);
93+
callback();
94+
Dart_ExitIsolate_DL();
95+
}
9096
}
9197
};
9298

gluecodium/src/test/resources/smoke/lambdas/output/dart/ffi/ffi_smoke_Lambdas.cpp

Lines changed: 45 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,15 @@ class smoke_Lambdas_Producer_Proxy {
7272

7373
inline void dispatch(std::function<void()>&& callback) const
7474
{
75-
gluecodium::ffi::IsolateContext::is_current(isolate_id)
76-
? callback()
77-
: gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
75+
if (isolate_thread_id != std::this_thread::get_id()) {
76+
gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
77+
} else if (gluecodium::ffi::IsolateContext::is_current(isolate_id)) {
78+
callback();
79+
} else {
80+
Dart_EnterIsolate_DL(isolate_handle);
81+
callback();
82+
Dart_ExitIsolate_DL();
83+
}
7884
}
7985
};
8086

@@ -130,9 +136,15 @@ class smoke_Lambdas_Confuser_Proxy {
130136

131137
inline void dispatch(std::function<void()>&& callback) const
132138
{
133-
gluecodium::ffi::IsolateContext::is_current(isolate_id)
134-
? callback()
135-
: gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
139+
if (isolate_thread_id != std::this_thread::get_id()) {
140+
gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
141+
} else if (gluecodium::ffi::IsolateContext::is_current(isolate_id)) {
142+
callback();
143+
} else {
144+
Dart_EnterIsolate_DL(isolate_handle);
145+
callback();
146+
Dart_ExitIsolate_DL();
147+
}
136148
}
137149
};
138150

@@ -184,9 +196,15 @@ class smoke_Lambdas_Consumer_Proxy {
184196

185197
inline void dispatch(std::function<void()>&& callback) const
186198
{
187-
gluecodium::ffi::IsolateContext::is_current(isolate_id)
188-
? callback()
189-
: gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
199+
if (isolate_thread_id != std::this_thread::get_id()) {
200+
gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
201+
} else if (gluecodium::ffi::IsolateContext::is_current(isolate_id)) {
202+
callback();
203+
} else {
204+
Dart_EnterIsolate_DL(isolate_handle);
205+
callback();
206+
Dart_ExitIsolate_DL();
207+
}
190208
}
191209
};
192210

@@ -244,9 +262,15 @@ class smoke_Lambdas_Indexer_Proxy {
244262

245263
inline void dispatch(std::function<void()>&& callback) const
246264
{
247-
gluecodium::ffi::IsolateContext::is_current(isolate_id)
248-
? callback()
249-
: gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
265+
if (isolate_thread_id != std::this_thread::get_id()) {
266+
gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
267+
} else if (gluecodium::ffi::IsolateContext::is_current(isolate_id)) {
268+
callback();
269+
} else {
270+
Dart_EnterIsolate_DL(isolate_handle);
271+
callback();
272+
Dart_ExitIsolate_DL();
273+
}
250274
}
251275
};
252276

@@ -302,9 +326,15 @@ class smoke_Lambdas_NullableConfuser_Proxy {
302326

303327
inline void dispatch(std::function<void()>&& callback) const
304328
{
305-
gluecodium::ffi::IsolateContext::is_current(isolate_id)
306-
? callback()
307-
: gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
329+
if (isolate_thread_id != std::this_thread::get_id()) {
330+
gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
331+
} else if (gluecodium::ffi::IsolateContext::is_current(isolate_id)) {
332+
callback();
333+
} else {
334+
Dart_EnterIsolate_DL(isolate_handle);
335+
callback();
336+
Dart_ExitIsolate_DL();
337+
}
308338
}
309339
};
310340

gluecodium/src/test/resources/smoke/lambdas/output/dart/ffi/ffi_smoke_StandaloneProducer.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,15 @@ class smoke_StandaloneProducer_Proxy {
6464

6565
inline void dispatch(std::function<void()>&& callback) const
6666
{
67-
gluecodium::ffi::IsolateContext::is_current(isolate_id)
68-
? callback()
69-
: gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
67+
if (isolate_thread_id != std::this_thread::get_id()) {
68+
gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
69+
} else if (gluecodium::ffi::IsolateContext::is_current(isolate_id)) {
70+
callback();
71+
} else {
72+
Dart_EnterIsolate_DL(isolate_handle);
73+
callback();
74+
Dart_ExitIsolate_DL();
75+
}
7076
}
7177
};
7278

gluecodium/src/test/resources/smoke/listeners/output/dart/ffi/ffi_smoke_CalculatorListener.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,9 +122,15 @@ class smoke_CalculatorListener_Proxy : public smoke::CalculatorListener {
122122

123123
inline void dispatch(std::function<void()>&& callback) const
124124
{
125-
gluecodium::ffi::IsolateContext::is_current(isolate_id)
126-
? callback()
127-
: gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
125+
if (isolate_thread_id != std::this_thread::get_id()) {
126+
gluecodium::ffi::cbqm.enqueueCallback(isolate_id, std::move(callback)).wait();
127+
} else if (gluecodium::ffi::IsolateContext::is_current(isolate_id)) {
128+
callback();
129+
} else {
130+
Dart_EnterIsolate_DL(isolate_handle);
131+
callback();
132+
Dart_ExitIsolate_DL();
133+
}
128134
}
129135
};
130136

0 commit comments

Comments
 (0)