action->max_duration = NO_MAX_DURATION;
action->start = surf_get_clock();
action->finish = -1.0;
- action->model_type = model;
+ action->model_obj = model;
#ifdef HAVE_TRACING
action->category = NULL;
#endif
e_surf_action_state_t surf_action_state_get(surf_action_t action)
{
- surf_action_state_t action_state = &(action->model_type->states);
+ surf_action_state_t action_state = &(action->model_obj->states);
if (action->state_set == action_state->ready_action_set)
return SURF_ACTION_READY;
void surf_action_state_set(surf_action_t action,
e_surf_action_state_t state)
{
- surf_action_state_t action_state = &(action->model_type->states);
+ surf_action_state_t action_state = &(action->model_obj->states);
XBT_IN("(%p,%s)", action, surf_action_state_names[state]);
xbt_swag_remove(action, action->state_set);
void surf_action_cancel(surf_action_t action)
{
- surf_model_t model = action->model_type;
+ surf_model_t model = action->model_obj;
surf_action_state_set(action, SURF_ACTION_FAILED);
if (model->model_private->update_mechanism == UM_LAZY) {
xbt_swag_remove(action, model->model_private->modified_set);
int surf_action_unref(surf_action_t action)
{
- surf_model_t model = action->model_type;
+ surf_model_t model = action->model_obj;
action->refcount--;
if (!action->refcount) {
xbt_swag_remove(action, action->state_set);
void surf_action_suspend(surf_action_t action)
{
- surf_model_t model = action->model_type;
+ surf_model_t model = action->model_obj;
XBT_IN("(%p)", action);
if (((surf_action_lmm_t) action)->suspended != 2) {
lmm_update_variable_weight(model->model_private->maxmin_system,
void surf_action_resume(surf_action_t action)
{
- surf_model_t model = action->model_type;
+ surf_model_t model = action->model_obj;
XBT_IN("(%p)", action);
if (((surf_action_lmm_t) action)->suspended != 2) {
lmm_update_variable_weight(model->model_private->maxmin_system,
void surf_action_set_max_duration(surf_action_t action, double duration)
{
- surf_model_t model = action->model_type;
+ surf_model_t model = action->model_obj;
XBT_IN("(%p,%g)", action, duration);
action->max_duration = duration;
if (model->model_private->update_mechanism == UM_LAZY) // remove action from the heap
void surf_action_set_priority(surf_action_t action, double priority)
{
- surf_model_t model = action->model_type;
+ surf_model_t model = action->model_obj;
XBT_IN("(%p,%g)", action, priority);
action->priority = priority;
lmm_update_variable_weight(model->model_private->maxmin_system,
void generic_update_action_remaining_lazy( surf_action_lmm_t action, double now)
{
double delta = 0.0;
- surf_model_t model = action->generic_action.model_type;
+ surf_model_t model = action->generic_action.model_obj;
if(model == surf_network_model)
{
action->last_value * delta);
#ifdef HAVE_TRACING
- if (model == surf_cpu_model && TRACE_is_enabled()) {
+ if (model->type == SURF_MODEL_TYPE_CPU && TRACE_is_enabled()) {
surf_resource_t cpu =
lmm_constraint_id(lmm_get_cnst_from_var
(model->model_private->maxmin_system,
double surf_action_get_remains(surf_action_t action)
{
XBT_IN("(%p)", action);
- surf_model_t model = action->model_type;
+ surf_model_t model = action->model_obj;
/* update remains before return it */
if (model->model_private->update_mechanism == UM_LAZY) /* update remains before return it */
generic_update_action_remaining_lazy((surf_action_lmm_t)action, surf_get_clock());
while ((xbt_heap_size(model->model_private->action_heap) > 0)
&& (double_equals(xbt_heap_maxkey(model->model_private->action_heap), now))) {
action = xbt_heap_pop(model->model_private->action_heap);
- XBT_DEBUG("Action %p: finish", action);
- action->generic_action.finish = surf_get_clock();
+ XBT_DEBUG("Something happened to action %p", action);
#ifdef HAVE_TRACING
if (TRACE_is_enabled()) {
- if(model == surf_cpu_model){
+ if(model->type == SURF_MODEL_TYPE_CPU){
surf_resource_t cpu =
lmm_constraint_id(lmm_get_cnst_from_var
(model->model_private->maxmin_system,
}
#endif
- if(model == surf_cpu_model){
+ if(model->type == SURF_MODEL_TYPE_CPU){
+ action->generic_action.finish = surf_get_clock();
+ XBT_DEBUG("Action %p finished", action);
+
/* set the remains to 0 due to precision problems when updating the remaining amount */
action->generic_action.remains = 0;
surf_action_state_set((surf_action_t) action, SURF_ACTION_DONE);
else{
// if I am wearing a latency hat
if (action->hat == LATENCY) {
+ XBT_DEBUG("Latency paid for action %p. Activating", action);
lmm_update_variable_weight(model->model_private->maxmin_system, action->variable,
((surf_action_network_CM02_t)(action))->weight);
surf_action_lmm_heap_remove(model->model_private->action_heap,action);
action->hat == NORMAL) {
// no need to communicate anymore
// assume that flows that reached max_duration have remaining of 0
- action->generic_action.remains = 0;
+ action->generic_action.finish = surf_get_clock();
+ XBT_DEBUG("Action %p finished", action);
+ action->generic_action.remains = 0;
((surf_action_t)action)->finish = surf_get_clock();
model->action_state_set((surf_action_t) action,
SURF_ACTION_DONE);
}
}
#ifdef HAVE_TRACING
- if (TRACE_is_enabled() && model == surf_cpu_model) {
+ if (TRACE_is_enabled() && model->type == SURF_MODEL_TYPE_CPU) {
//defining the last timestamp that we can safely dump to trace file
//without losing the event ascending order (considering all CPU's)
double smaller = -1;