- typedef struct surf_model {
- s_surf_model_public_t common_public;
- surf_model_private_t common_private;
- union extension {
- s_surf_timer_model_extension_public_t timer;
- s_surf_cpu_model_extension_public_t cpu;
- s_surf_network_model_extension_public_t network;
- s_surf_workstation_model_extension_public_t workstation;
- } extension;
- } s_surf_model_t;
-
- void surf_model_init(surf_model_t model);
- void *surf_model_resource_by_name(surf_model_t model, const char *name);
-#define surf_model_resource_set(model) (model)->common_public.resource_set
- void surf_model_exit(surf_model_t model);
-
- typedef struct surf_resource {
- surf_model_t model;
- } s_surf_resource_t, *surf_resource_t;
+typedef struct surf_model {
+ const char *name; /**< Name of this model */
+ s_surf_action_state_t states; /**< Any living action on this model */
+
+ e_surf_action_state_t(*action_state_get) (surf_action_t action);
+ /**< Return the state of an action */
+ void (*action_state_set) (surf_action_t action,
+ e_surf_action_state_t state);
+ /**< Change an action state*/
+
+ double (*action_get_start_time) (surf_action_t action); /**< Return the start time of an action */
+ double (*action_get_finish_time) (surf_action_t action); /**< Return the finish time of an action */
+ int (*action_unref) (surf_action_t action); /**< Specify that we don't use that action anymore */
+ void (*action_cancel) (surf_action_t action); /**< Cancel a running action */
+ void (*action_recycle) (surf_action_t action); /**< Recycle an action */
+ void (*action_data_set) (surf_action_t action, void *data); /**< Set the user data of an action */
+ void (*suspend) (surf_action_t action); /**< Suspend an action */
+ void (*resume) (surf_action_t action); /**< Resume a suspended action */
+ int (*is_suspended) (surf_action_t action); /**< Return whether an action is suspended */
+ void (*set_max_duration) (surf_action_t action, double duration); /**< Set the max duration of an action*/
+ void (*set_priority) (surf_action_t action, double priority); /**< Set the priority of an action */
+#ifdef HAVE_TRACING
+ void (*set_category) (surf_action_t action, const char *category); /**< Set the category of an action */
+#endif
+ double (*get_remains) (surf_action_t action); /**< Get the remains of an action */
+#ifdef HAVE_LATENCY_BOUND_TRACKING
+ int (*get_latency_limited) (surf_action_t action); /**< Return 1 if action is limited by latency, 0 otherwise */
+#endif
+
+ surf_model_private_t model_private;
+
+ union extension {
+ s_surf_model_extension_cpu_t cpu;
+ s_surf_model_extension_network_t network;
+ s_surf_model_extension_workstation_t workstation;
+ } extension;
+} s_surf_model_t;
+
+surf_model_t surf_model_init(void);
+void surf_model_exit(surf_model_t model);
+
+static inline void *surf_cpu_resource_by_name(const char *name) {
+ return xbt_lib_get_or_null(host_lib, name, SURF_CPU_LEVEL);
+}
+static inline void *surf_workstation_resource_by_name(const char *name){
+ return xbt_lib_get_or_null(host_lib, name, SURF_WKS_LEVEL);
+}
+static inline void *surf_network_resource_by_name(const char *name){
+ return xbt_lib_get_or_null(link_lib, name, SURF_LINK_LEVEL);
+}
+
+typedef struct surf_resource {
+ surf_model_t model;
+ char *name;
+ xbt_dict_t properties;
+} s_surf_resource_t, *surf_resource_t;
+
+
+
+/**
+ * Resource which have a metric handled by a maxmin system
+ */
+typedef struct {
+ double scale;
+ double peak;
+ tmgr_trace_event_t event;
+} s_surf_metric_t;
+
+typedef struct surf_resource_lmm {
+ s_surf_resource_t generic_resource;
+ lmm_constraint_t constraint;
+ e_surf_resource_state_t state_current;
+ tmgr_trace_event_t state_event;
+ s_surf_metric_t power;
+} s_surf_resource_lmm_t, *surf_resource_lmm_t;