5#include "gtest/gtest.h"
36template <
typename Predicate>
39 gint64 deadline = g_get_monotonic_time() + timeout;
40 while (!predicate() && g_get_monotonic_time() < deadline) {
41 g_main_context_iteration(
nullptr,
TRUE);
49 std::vector<uint64_t> executed;
52 executed.push_back(task->
task);
61 ASSERT_EQ(executed.size(), 1u);
62 EXPECT_EQ(executed[0], 42u);
69 std::vector<uint64_t> executed;
72 executed.push_back(task->
task);
82 ASSERT_EQ(executed.size(), 3u);
83 EXPECT_EQ(executed[0], 1u);
84 EXPECT_EQ(executed[1], 2u);
85 EXPECT_EQ(executed[2], 3u);
92 gboolean executed = FALSE;
100 uint64_t target_time_nanos =
101 (g_get_monotonic_time() + 20 * G_TIME_SPAN_MILLISECOND) * 1000;
106 EXPECT_FALSE(executed);
110 EXPECT_TRUE(executed);
118 std::vector<uint64_t> executed;
121 executed.push_back(task->
task);
130 ASSERT_EQ(executed.size(), 1u);
131 EXPECT_EQ(executed[0], 99u);
144 while (g_atomic_int_get(&data->done) == 0) {
145 g_usleep(10 * G_TIME_SPAN_MILLISECOND);
160 gint64
start = g_get_monotonic_time();
162 gint64 elapsed = g_get_monotonic_time() -
start;
164 g_atomic_int_set(&data.done, 1);
165 g_thread_join(thread);
168 EXPECT_LT(elapsed, 5 * G_USEC_PER_SEC);
177 std::vector<uint64_t> executed;
180 executed.push_back(task->
task);
191 ASSERT_EQ(executed.size(), 1u);
192 EXPECT_EQ(executed[0], 123u);
g_autoptr(FlEngine) engine
fl_task_runner_stop_wait(self->task_runner)
FlutterEngineProcTable * fl_engine_get_embedder_api(FlEngine *self)
FlTaskRunner * fl_task_runner_new(FlEngine *engine)
void fl_task_runner_post_flutter_task(FlTaskRunner *self, FlutterTask task, uint64_t target_time_nanos)
void fl_task_runner_wait(FlTaskRunner *self, gint64 expiry_time)
static void pump_main_loop_until(Predicate predicate, gint64 timeout=kDefaultPumpTimeoutMicros)
TEST_F(FlTaskRunnerTest, PostTaskExecutedOnMainLoop)
static FlutterTask make_task(uint64_t id)
static constexpr gint64 kDefaultPumpTimeoutMicros
static gpointer stop_wait_thread(gpointer user_data)
#define MOCK_ENGINE_PROC(proc, mock_impl)
FlutterEngineRunTaskFnPtr RunTask
FlTaskRunner * task_runner