* under the terms of the license (GNU LGPL) which comes with this package. */
#include "cpu_ti.hpp"
-#include "trace_mgr_private.h"
#include "xbt/heap.h"
+#include "src/surf/trace_mgr.hpp"
+#include "src/surf/platform.hpp"
#ifndef SURF_MODEL_CPUTI_H_
#define SURF_MODEL_CPUTI_H_
}
}
-/*************
- * CallBacks *
- *************/
-
-static void cpu_ti_define_callbacks()
-{
- sg_platf_postparse_add_cb(simgrid::surf::cpu_add_traces);
-}
-
/*********
* Model *
*********/
xbt_assert(!surf_cpu_model_vm,"CPU model already initialized. This should not happen.");
surf_cpu_model_pm = new simgrid::surf::CpuTiModel();
+ xbt_dynar_push(all_existing_models, &surf_cpu_model_pm);
+
surf_cpu_model_vm = new simgrid::surf::CpuTiModel();
+ xbt_dynar_push(all_existing_models, &surf_cpu_model_vm);
- cpu_ti_define_callbacks();
- simgrid::surf::Model *model_pm = static_cast<simgrid::surf::Model*>(surf_cpu_model_pm);
- simgrid::surf::Model *model_vm = static_cast<simgrid::surf::Model*>(surf_cpu_model_vm);
- xbt_dynar_push(all_existing_models, &model_pm);
- xbt_dynar_push(all_existing_models, &model_vm);
+ simgrid::surf::on_postparse.connect([]() {
+ surf_cpu_model_pm->addTraces();
+ });
}
namespace simgrid {
xbt_heap_free(p_tiActionHeap);
}
-Cpu *CpuTiModel::createCpu(simgrid::Host *host,
+Cpu *CpuTiModel::createCpu(simgrid::s4u::Host *host,
xbt_dynar_t speedPeak,
int pstate,
double speedScale,
called = 1;
/* connect all traces relative to hosts */
- xbt_dict_foreach(trace_connect_list_host_avail, cursor, trace_name, elm) {
+ xbt_dict_foreach(trace_connect_list_host_speed, cursor, trace_name, elm) {
tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name);
- CpuTi *cpu = static_cast<CpuTi*>(sg_host_by_name(elm)->p_cpu);
-
- xbt_assert(cpu, "Host %s undefined", elm);
- xbt_assert(trace, "Trace %s undefined", trace_name);
-
- if (cpu->p_stateEvent) {
- XBT_DEBUG("Trace already configured for this CPU(%s), ignoring it",
- elm);
- continue;
- }
- XBT_DEBUG("Add state trace: %s to CPU(%s)", trace_name, elm);
- cpu->p_stateEvent = tmgr_history_add_trace(history, trace, 0.0, 0, cpu);
- }
-
- xbt_dict_foreach(trace_connect_list_power, cursor, trace_name, elm) {
- tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name);
- CpuTi *cpu = static_cast<CpuTi*>(sg_host_by_name(elm)->p_cpu);
+ CpuTi *cpu = static_cast<CpuTi*>(sg_host_by_name(elm)->pimpl_cpu);
xbt_assert(cpu, "Host %s undefined", elm);
xbt_assert(trace, "Trace %s undefined", trace_name);
xbt_dynar_get_cpy(trace->s_list.event_list,
xbt_dynar_length(trace->s_list.event_list) - 1, &val);
if (val.delta == 0) {
- tmgr_trace_t empty_trace;
- empty_trace = tmgr_empty_trace_new();
- cpu->p_speedEvent =
- tmgr_history_add_trace(history, empty_trace,
- cpu->p_availTrace->m_lastTime, 0, cpu);
+ cpu->set_speed_trace(tmgr_empty_trace_new());
}
}
}
/************
* Resource *
************/
-CpuTi::CpuTi(CpuTiModel *model, simgrid::Host *host, xbt_dynar_t speedPeak,
+CpuTi::CpuTi(CpuTiModel *model, simgrid::s4u::Host *host, xbt_dynar_t speedPeak,
int pstate, double speedScale, tmgr_trace_t speedTrace, int core,
int initiallyOn, tmgr_trace_t stateTrace)
: Cpu(model, host, NULL, pstate, core, 0, speedScale, initiallyOn)
XBT_DEBUG("CPU create: peak=%f", m_speedPeak);
if (stateTrace)
- p_stateEvent = tmgr_history_add_trace(history, stateTrace, 0.0, 0, this);
+ p_stateEvent = future_evt_set->add_trace(stateTrace, 0.0, this);
if (speedTrace && xbt_dynar_length(speedTrace->s_list.event_list) > 1) {
s_tmgr_event_t val;
xbt_dynar_get_cpy(speedTrace->s_list.event_list,
xbt_dynar_length(speedTrace->s_list.event_list) - 1, &val);
if (val.delta == 0) {
- tmgr_trace_t empty_trace = tmgr_empty_trace_new();
- p_speedEvent = tmgr_history_add_trace(history, empty_trace, p_availTrace->m_lastTime, 0, this);
+ p_speedEvent =
+ future_evt_set->add_trace(tmgr_empty_trace_new(), p_availTrace->m_lastTime, this);
}
}
}
delete p_actionSet;
}
-void CpuTi::updateState(tmgr_trace_event_t event_type,
+void CpuTi::updateState(tmgr_trace_iterator_t event_type,
double value, double date)
{
CpuTiAction *action;
p_availTrace = trace;
- if (tmgr_trace_event_free(event_type))
- p_speedEvent = NULL;
+ tmgr_trace_event_unref(&p_speedEvent);
} else if (event_type == p_stateEvent) {
if (value > 0) {
}
}
}
- if (tmgr_trace_event_free(event_type))
- p_stateEvent = NULL;
+ tmgr_trace_event_unref(&p_stateEvent);
} else {
- XBT_CRITICAL("Unknown event ! \n");
- xbt_abort();
+ xbt_die("Unknown event!\n");
}
-
- return;
}
void CpuTi::updateActionsFinishTime(double now)
m_lastUpdate = now;
}
-CpuAction *CpuTi::execute(double size)
+CpuAction *CpuTi::execution_start(double size)
{
XBT_IN("(%s,%g)", getName(), size);
CpuTiAction *action = new CpuTiAction(static_cast<CpuTiModel*>(getModel()), size, isOff(), this);