X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/ea74f5d95928a521a588737e81f1de94eef25d19..2e7129924068cc550bffddb396bc236f66360735:/src/s4u/s4u_Engine.cpp diff --git a/src/s4u/s4u_Engine.cpp b/src/s4u/s4u_Engine.cpp index afe739ef2f..80989545e8 100644 --- a/src/s4u/s4u_Engine.cpp +++ b/src/s4u/s4u_Engine.cpp @@ -9,10 +9,14 @@ #include #include +#define SIMIX_H_NO_DEPRECATED_WARNING // avoid deprecation warning on include (remove with XBT_ATTRIB_DEPRECATED_v333) +#include + #include "mc/mc.h" #include "src/instr/instr_private.hpp" #include "src/kernel/EngineImpl.hpp" #include "src/mc/mc_replay.hpp" +#include "xbt/config.hpp" #include #include @@ -26,6 +30,7 @@ namespace simgrid { namespace s4u { xbt::signal Engine::on_platform_creation; xbt::signal Engine::on_platform_created; +xbt::signal Engine::on_simulation_start; xbt::signal Engine::on_simulation_end; xbt::signal Engine::on_time_advance; xbt::signal Engine::on_deadlock; @@ -64,7 +69,9 @@ Engine::~Engine() /** @brief Retrieve the engine singleton */ Engine* Engine::get_instance() { - return get_instance(nullptr, nullptr); + int argc = 0; + char* argv = nullptr; + return get_instance(&argc, &argv); } Engine* Engine::get_instance(int* argc, char** argv) { @@ -75,7 +82,7 @@ Engine* Engine::get_instance(int* argc, char** argv) return Engine::instance_; } -void Engine::shutdown() +void Engine::shutdown() // XBT_ATTRIB_DEPRECATED_v335 { delete Engine::instance_; } @@ -92,7 +99,7 @@ double Engine::get_clock() void Engine::add_model(std::shared_ptr model, const std::vector& dependencies) { - kernel::actor::simcall([this, &model, &dependencies] { pimpl->add_model(std::move(model), dependencies); }); + kernel::actor::simcall_answered([this, &model, &dependencies] { pimpl->add_model(std::move(model), dependencies); }); } const std::vector& Engine::get_all_models() const @@ -150,12 +157,12 @@ void Engine::register_default(const std::function& code) } void Engine::register_default(const kernel::actor::ActorCodeFactory& code) { - simgrid::kernel::actor::simcall([this, &code]() { pimpl->register_default(code); }); + simgrid::kernel::actor::simcall_answered([this, &code]() { pimpl->register_default(code); }); } void Engine::register_function(const std::string& name, const kernel::actor::ActorCodeFactory& code) { - simgrid::kernel::actor::simcall([this, name, &code]() { pimpl->register_function(name, code); }); + simgrid::kernel::actor::simcall_answered([this, name, &code]() { pimpl->register_function(name, code); }); } /** Load a deployment file and launch the actors that it contains @@ -254,7 +261,7 @@ Link* Engine::link_by_name_or_null(const std::string& name) const Mailbox* Engine::mailbox_by_name_or_create(const std::string& name) const { /* two actors may have pushed the same mbox_create simcall at the same time */ - kernel::activity::MailboxImpl* mbox = kernel::actor::simcall([&name, this] { + kernel::activity::MailboxImpl* mbox = kernel::actor::simcall_answered([&name, this] { auto m = pimpl->mailboxes_.emplace(name, nullptr); if (m.second) { m.first->second = new kernel::activity::MailboxImpl(name); @@ -331,15 +338,16 @@ void Engine::run() const } void Engine::run_until(double max_date) const { + static bool callback_called = false; + if (not callback_called) { + on_simulation_start(); + callback_called = true; + } /* Clean IO before the run */ fflush(stdout); fflush(stderr); - if (MC_is_active()) { - MC_run(); - } else { - pimpl->run(max_date); - } + pimpl->run(max_date); } void Engine::track_vetoed_activities(std::set* vetoed_activities) const @@ -408,13 +416,13 @@ std::vector Engine::get_all_netpoints() const /** @brief Register a new netpoint to the system */ void Engine::netpoint_register(kernel::routing::NetPoint* point) { - simgrid::kernel::actor::simcall([this, point] { pimpl->netpoints_[point->get_name()] = point; }); + simgrid::kernel::actor::simcall_answered([this, point] { pimpl->netpoints_[point->get_name()] = point; }); } /** @brief Unregister a given netpoint */ void Engine::netpoint_unregister(kernel::routing::NetPoint* point) { - kernel::actor::simcall([this, point] { + kernel::actor::simcall_answered([this, point] { pimpl->netpoints_.erase(point->get_name()); delete point; }); @@ -445,7 +453,8 @@ void Engine::set_config(const std::string& name, const std::string& value) config::set_value(name.c_str(), value); } -Engine* Engine::set_default_comm_data_copy_callback(void (*callback)(kernel::activity::CommImpl*, void*, size_t)) +Engine* Engine::set_default_comm_data_copy_callback( + const std::function& callback) { kernel::activity::CommImpl::set_copy_data_callback(callback); return this; @@ -454,11 +463,6 @@ Engine* Engine::set_default_comm_data_copy_callback(void (*callback)(kernel::act } // namespace s4u } // namespace simgrid -double SIMIX_get_clock() // XBT_ATTRIB_DEPRECATED_v332 -{ - return simgrid::s4u::Engine::get_clock(); -} - /* **************************** Public C interface *************************** */ void simgrid_init(int* argc, char** argv) {