Files
aee/source/core/system/fiber.hpp

37 lines
1.3 KiB
C++

#pragma once
#include <cstddef>
// Fiber minimalista sobre el suport natiu del SO (ucontext_t en POSIX,
// Fibers API en Windows). Serveix per a implementar un yield/resume
// cooperatiu entre el Director i el codi del joc sense un std::thread
// ni mutex/condition_variable. Substituïx el bloqueig de publishFrame/
// consumeFrame amb un mecanisme de control explícit.
//
// Contracte:
// - GameFiber::init(entry) prepara un fiber que executarà `entry`
// en un stack dedicat. No el comença a executar encara.
// - GameFiber::resume() cedeix el control al fiber. Retorna quan el
// fiber crida GameFiber::yield() o quan la funció entry retorna.
// - GameFiber::yield() es crida des de dins del fiber per a tornar
// el control al main (al punt just després de resume()).
// - GameFiber::is_done() indica si la funció entry ha retornat.
// - GameFiber::destroy() allibera el stack i reinicia l'estat.
//
// Per al port a emscripten (Fase 7) caldrà substituir aquesta capa per
// Asyncify, però el contracte públic pot romandre idèntic.
namespace GameFiber {
using EntryFn = void (*)();
void init(EntryFn entry, std::size_t stack_size = 256 * 1024);
void destroy();
void resume();
void yield();
bool is_done();
bool is_initialized();
} // namespace GameFiber