X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/da69c68025f13175dc03c6356cb8d097f00b57a7..48296e83ce3ba1fa3658a3a74d10a536e33b3849:/src/kernel/actor/SimcallObserver.cpp diff --git a/src/kernel/actor/SimcallObserver.cpp b/src/kernel/actor/SimcallObserver.cpp index bb763ef0f8..87991ccefa 100644 --- a/src/kernel/actor/SimcallObserver.cpp +++ b/src/kernel/actor/SimcallObserver.cpp @@ -1,40 +1,29 @@ -/* Copyright (c) 2019-2021. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2019-2022. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #include "src/kernel/actor/SimcallObserver.hpp" #include "simgrid/s4u/Host.hpp" -#include "src/kernel/activity/MutexImpl.hpp" +#include "src/kernel/activity/CommImpl.hpp" +#include "src/kernel/activity/MailboxImpl.hpp" #include "src/kernel/actor/ActorImpl.hpp" +#include "src/mc/mc_config.hpp" -XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_observer, mc, "Logging specific to MC simcall observation"); - -namespace simgrid { -namespace kernel { -namespace actor { +#include -std::string SimcallObserver::to_string(int /*times_considered*/) const -{ - return simgrid::xbt::string_printf("[(%ld)%s (%s)] ", issuer_->get_pid(), issuer_->get_host()->get_cname(), - issuer_->get_cname()); -} +XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_observer, mc, "Logging specific to MC simcall observation"); -std::string SimcallObserver::dot_label() const -{ - if (issuer_->get_host()) - return xbt::string_printf("[(%ld)%s] ", issuer_->get_pid(), issuer_->get_cname()); - return xbt::string_printf("[(%ld)] ", issuer_->get_pid()); -} +namespace simgrid::kernel::actor { -std::string RandomSimcall::to_string(int times_considered) const +void SimcallObserver::serialize(std::stringstream& stream) const { - return SimcallObserver::to_string(times_considered) + "MC_RANDOM(" + std::to_string(times_considered) + ")"; + stream << (short)mc::Transition::Type::UNKNOWN; } - -std::string RandomSimcall::dot_label() const +void RandomSimcall::serialize(std::stringstream& stream) const { - return SimcallObserver::dot_label() + "MC_RANDOM(" + std::to_string(next_value_) + ")"; + stream << (short)mc::Transition::Type::RANDOM << ' '; + stream << min_ << ' ' << max_; } void RandomSimcall::prepare(int times_considered) @@ -48,90 +37,12 @@ int RandomSimcall::get_max_consider() const return max_ - min_ + 1; } -std::string MutexUnlockSimcall::to_string(int times_considered) const -{ - return SimcallObserver::to_string(times_considered) + "Mutex UNLOCK"; -} - -std::string MutexUnlockSimcall::dot_label() const -{ - return SimcallObserver::dot_label() + "Mutex UNLOCK"; -} - -std::string MutexLockSimcall::to_string(int times_considered) const -{ - std::string res = SimcallObserver::to_string(times_considered) + (blocking_ ? "Mutex LOCK" : "Mutex TRYLOCK"); - res += "(locked = " + std::to_string(mutex_->is_locked()); - res += ", owner = " + std::to_string(mutex_->get_owner() ? mutex_->get_owner()->get_pid() : -1); - res += ", sleeping = n/a)"; - return res; -} - -std::string MutexLockSimcall::dot_label() const -{ - return SimcallObserver::dot_label() + (blocking_ ? "Mutex LOCK" : "Mutex TRYLOCK"); -} - -bool MutexLockSimcall::is_enabled() const -{ - return not blocking_ || mutex_->get_owner() == nullptr || mutex_->get_owner() == get_issuer(); -} - -std::string ConditionWaitSimcall::to_string(int times_considered) const +bool ConditionWaitSimcall::is_enabled() { - std::string res = SimcallObserver::to_string(times_considered) + "Condition WAIT"; - res += "(" + (timeout_ == -1.0 ? "" : std::to_string(timeout_)) + ")"; - return res; -} - -std::string ConditionWaitSimcall::dot_label() const -{ - return SimcallObserver::dot_label() + "Condition WAIT"; -} - -bool ConditionWaitSimcall::is_enabled() const -{ - static bool warned = false; - if (not warned) { + if (static bool warned = false; not warned) { XBT_INFO("Using condition variables in model-checked code is still experimental. Use at your own risk"); warned = true; } return true; } - -std::string SemAcquireSimcall::to_string(int times_considered) const -{ - std::string res = SimcallObserver::to_string(times_considered) + "Sem ACQUIRE"; - res += "(" + (timeout_ == -1.0 ? "" : std::to_string(timeout_)) + ")"; - return res; -} - -std::string SemAcquireSimcall::dot_label() const -{ - return SimcallObserver::dot_label() + "Sem ACQUIRE"; -} - -bool SemAcquireSimcall::is_enabled() const -{ - static bool warned = false; - if (not warned) { - XBT_INFO("Using semaphore in model-checked code is still experimental. Use at your own risk"); - warned = true; - } - return true; -} - -std::string ExecutionWaitanySimcall::to_string(int times_considered) const -{ - std::string res = SimcallObserver::to_string(times_considered) + "Execution WAITANY"; - res += "(" + (timeout_ == -1.0 ? "" : std::to_string(timeout_)) + ")"; - return res; -} - -std::string ExecutionWaitanySimcall::dot_label() const -{ - return SimcallObserver::dot_label() + "Execution WAITANY"; -} -} // namespace actor -} // namespace kernel -} // namespace simgrid +} // namespace simgrid::kernel::actor