X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/ea74f5d95928a521a588737e81f1de94eef25d19..5ed37babb2fa9097abe82df299c0aa259ed84d5a:/src/kernel/resource/profile/Profile.hpp diff --git a/src/kernel/resource/profile/Profile.hpp b/src/kernel/resource/profile/Profile.hpp index 8cd27543e5..1876a959d7 100644 --- a/src/kernel/resource/profile/Profile.hpp +++ b/src/kernel/resource/profile/Profile.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2004-2022. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2004-2023. 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. */ @@ -7,50 +7,61 @@ #define SIMGRID_KERNEL_PROFILE_HPP #include "simgrid/forward.h" -#include "src/kernel/resource/profile/DatedValue.hpp" +#include "simgrid/kernel/ProfileBuilder.hpp" #include "src/kernel/resource/profile/FutureEvtSet.hpp" #include "src/kernel/resource/profile/StochasticDatedValue.hpp" #include #include +#include -namespace simgrid { -namespace kernel { -namespace profile { +namespace simgrid::kernel::profile { /** @brief A profile is a set of timed values, encoding the value that a variable takes at what time * * It is useful to model dynamic platforms, where an external load that makes the resource availability change over * time. To model that, you have to set several profiles per resource: one for the on/off state and one for each * numerical value (computational speed, bandwidth and/or latency). + * + * There are two behaviours. Either a callback is used to populate the profile when the set has been exhausted, + * or the callback is called only during construction and the initial set is repeated over and over, after a fixed + * repeating delay. */ class XBT_PUBLIC Profile { public: - /** Creates an empty trace */ - explicit Profile(); - virtual ~Profile(); + /** @brief Create a profile. There are two behaviours. Either the callback is + * + * @param name The name of the profile (checked for uniqueness) + * @param cb A callback object/function that populates the profile. + * @param repeat_delay If strictly negative, it is ignored and the callback is called when an event reached the end of + * the event_list. If zero or positive, the initial set repeats after the provided delay. + */ + explicit Profile(const std::string& name, const std::function& cb, double repeat_delay); + virtual ~Profile()=default; Event* schedule(FutureEvtSet* fes, resource::Resource* resource); DatedValue next(Event* event); const std::vector& get_event_list() const { return event_list; } - const std::vector& get_stochastic_event_list() const { return stochastic_event_list; } - - static Profile* from_file(const std::string& path); - static Profile* from_string(const std::string& name, const std::string& input, double periodicity); + const std::string& get_name() const { return name; } + bool is_repeating() const { return repeat_delay>=0;} + double get_repeat_delay() const { return repeat_delay;} private: + std::string name; + std::function cb; std::vector event_list; - std::vector stochastic_event_list; - FutureEvtSet* fes_ = nullptr; - bool stochastic = false; - bool stochasticloop = false; - DatedValue futureDV; + double repeat_delay; + + bool get_enough_events(size_t index) + { + if (index >= event_list.size() && cb) + cb(event_list); + return index < event_list.size(); + } }; -} // namespace profile -} // namespace kernel -} // namespace simgrid +} // namespace simgrid::kernel::profile /** Module finalizer: frees all profiles */ XBT_PUBLIC void tmgr_finalize();