-/* Copyright (c) 2004-2019. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2004-2021. 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. */
namespace kernel {
namespace resource {
-typedef std::pair<double, simgrid::kernel::resource::Action*> heap_element_type;
-typedef boost::heap::pairing_heap<heap_element_type, boost::heap::constant_time_size<false>, boost::heap::stable<true>,
- boost::heap::compare<simgrid::xbt::HeapComparator<heap_element_type>>>
- heap_type;
+using heap_element_type = std::pair<double, Action*>;
+using heap_type =
+ boost::heap::pairing_heap<heap_element_type, boost::heap::constant_time_size<false>, boost::heap::stable<true>,
+ boost::heap::compare<simgrid::xbt::HeapComparator<heap_element_type>>>;
-typedef std::pair<double, simgrid::kernel::resource::Action*> heap_element_type;
class XBT_PUBLIC ActionHeap : public heap_type {
friend Action;
public:
enum class Type {
- latency = 100, /* this is a heap entry to warn us when the latency is payed */
+ latency = 100, /* this is a heap entry to warn us when the latency is paid */
max_duration, /* this is a heap entry to warn us when the max_duration limit (timeout) is reached */
normal, /* this is a normal heap entry stating the date to finish transmitting */
unset
class XBT_PUBLIC Action {
friend ActionHeap;
+ int refcount_ = 1;
+ double sharing_penalty_ = 1.0; /**< priority (1.0 by default) */
+ double max_duration_ = NO_MAX_DURATION; /*< max_duration (may fluctuate until the task is completed) */
+ double remains_; /**< How much of that cost remains to be done in the currently running task */
+ double start_time_; /**< start time */
+ double finish_time_ = -1; /**< finish time (may fluctuate until the task is completed) */
+ std::string category_; /**< tracing category for categorized resource utilization monitoring */
+
+ double cost_;
+ Model* model_;
+ void* data_ = nullptr; /**< for your convenience */
+ activity::ActivityImpl* activity_ = nullptr;
+
+ /* LMM */
+ double last_update_ = 0;
+ double last_value_ = 0;
+ lmm::Variable* variable_ = nullptr;
+ double user_bound_ = -1;
+
+ ActionHeap::Type type_ = ActionHeap::Type::unset;
+ boost::optional<ActionHeap::handle_type> heap_hook_ = boost::none;
+ boost::intrusive::list_member_hook<> modified_set_hook_;
+ boost::intrusive::list_member_hook<> state_set_hook_;
+
public:
/* Lazy update needs this Set hook to maintain a list of the tracked actions */
- boost::intrusive::list_member_hook<> modified_set_hook_;
bool is_within_modified_set() const { return modified_set_hook_.is_linked(); }
- typedef boost::intrusive::list<
- Action, boost::intrusive::member_hook<Action, boost::intrusive::list_member_hook<>, &Action::modified_set_hook_>>
- ModifiedSet;
+ using ModifiedSet = boost::intrusive::list<
+ Action, boost::intrusive::member_hook<Action, boost::intrusive::list_member_hook<>, &Action::modified_set_hook_>>;
- boost::intrusive::list_member_hook<> state_set_hook_;
- typedef boost::intrusive::list<
- Action, boost::intrusive::member_hook<Action, boost::intrusive::list_member_hook<>, &Action::state_set_hook_>>
- StateSet;
+ using StateSet = boost::intrusive::list<
+ Action, boost::intrusive::member_hook<Action, boost::intrusive::list_member_hook<>, &Action::state_set_hook_>>;
enum class State {
INITED, /**< Created, but not started yet */
SLEEPING
};
+private:
+ StateSet* state_set_;
+ Action::SuspendStates suspended_ = Action::SuspendStates::RUNNING;
+
+public:
/**
* @brief Action constructor
*
/** @brief Get the state set in which the action is */
StateSet* get_state_set() const { return state_set_; };
- simgrid::kernel::resource::Model* get_model() const { return model_; }
+ Model* get_model() const { return model_; }
-private:
- StateSet* state_set_;
- Action::SuspendStates suspended_ = Action::SuspendStates::RUNNING;
- int refcount_ = 1;
- double sharing_penalty_ = 1.0; /**< priority (1.0 by default) */
- double max_duration_ = NO_MAX_DURATION; /*< max_duration (may fluctuate until the task is completed) */
- double remains_; /**< How much of that cost remains to be done in the currently running task */
- double start_time_; /**< start time */
- double finish_time_ = -1; /**< finish time (may fluctuate until the task is completed) */
- std::string category_; /**< tracing category for categorized resource utilization monitoring */
-
- double cost_;
- simgrid::kernel::resource::Model* model_;
- void* data_ = nullptr; /**< for your convenience */
- activity::ActivityImpl* activity_ = nullptr;
-
- /* LMM */
- double last_update_ = 0;
- double last_value_ = 0;
- kernel::lmm::Variable* variable_ = nullptr;
-
- ActionHeap::Type type_ = ActionHeap::Type::unset;
- boost::optional<ActionHeap::handle_type> heap_hook_ = boost::none;
-
-public:
ActionHeap::Type get_type() const { return type_; }
lmm::Variable* get_variable() const { return variable_; }
void set_variable(lmm::Variable* var) { variable_ = var; }
+ double get_user_bound() const { return user_bound_; }
+ void set_user_bound(double bound) { user_bound_ = bound; }
+
double get_last_update() const { return last_update_; }
void set_last_update();