X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/5a5f54e7f74566a2418d243e7885e737c2312a36..HEAD:/src/instr/instr_paje_events.hpp diff --git a/src/instr/instr_paje_events.hpp b/src/instr/instr_paje_events.hpp index 3c2fc02d28..ed12cd6236 100644 --- a/src/instr/instr_paje_events.hpp +++ b/src/instr/instr_paje_events.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2010-2017. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2010-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,67 +7,91 @@ #define INSTR_PAJE_EVENTS_HPP #include "src/instr/instr_private.hpp" +#include "src/internal_config.h" +#include +#include #include -namespace simgrid { -namespace instr { +namespace simgrid::instr { class EntityValue; +class TIData; -enum e_event_type : unsigned int { - PAJE_DefineContainerType, - PAJE_DefineVariableType, - PAJE_DefineStateType, - PAJE_DefineEventType, - PAJE_DefineLinkType, - PAJE_DefineEntityValue, - PAJE_CreateContainer, - PAJE_DestroyContainer, - PAJE_SetVariable, - PAJE_AddVariable, - PAJE_SubVariable, - PAJE_SetState, - PAJE_PushState, - PAJE_PopState, - PAJE_ResetState, - PAJE_StartLink, - PAJE_EndLink, - PAJE_NewEvent +enum class PajeEventType : unsigned int { + DefineContainerType, + DefineVariableType, + DefineStateType, + DefineEventType, + DefineLinkType, + DefineEntityValue, + CreateContainer, + DestroyContainer, + SetVariable, + AddVariable, + SubVariable, + SetState, + PushState, + PopState, + ResetState, + StartLink, + EndLink, + NewEvent }; +inline std::ostream& operator<<(std::ostream& os, PajeEventType event) +{ + return os << static_cast>(event); +} + class PajeEvent { Container* container_; Type* type_; + static xbt::signal on_creation; + static xbt::signal on_destruction; -protected: - Type* getType() { return type_; } - Container* getContainer() { return container_; } public: + static void on_creation_cb(const std::function& cb) { on_creation.connect(cb); } + static void on_destruction_cb(const std::function& cb) { on_destruction.connect(cb); } + double timestamp_; - e_event_type eventType_; - PajeEvent(Container* container, Type* type, double timestamp, e_event_type eventType) - : container_(container), type_(type), timestamp_(timestamp), eventType_(eventType){}; - virtual ~PajeEvent() = default; + PajeEventType eventType_; + std::stringstream stream_; + + PajeEvent(Container* container, Type* type, double timestamp, PajeEventType eventType); + virtual ~PajeEvent(); + + Container* get_container() const { return container_; } + Type* get_type() const { return type_; } + virtual void print() = 0; - void insertIntoBuffer(); + void insert_into_buffer(); }; class VariableEvent : public PajeEvent { - double value; + double value_; public: - VariableEvent(double timestamp, Container* container, Type* type, e_event_type event_type, double value); - void print() override; + VariableEvent(double timestamp, Container* container, Type* type, PajeEventType event_type, double value) + : PajeEvent::PajeEvent(container, type, timestamp, event_type), value_(value) + { + } + void print() override { stream_ << " " << value_; } }; class StateEvent : public PajeEvent { EntityValue* value; - std::string filename; - int linenumber; - void* extra_ = nullptr; +#if HAVE_SMPI + std::string filename = "(null)"; + int linenumber = -1; +#endif + std::unique_ptr extra_; + + static xbt::signal on_destruction; public: - StateEvent(Container* container, Type* type, e_event_type event_type, EntityValue* value); - StateEvent(Container* container, Type* type, e_event_type event_type, EntityValue* value, void* extra); + static void on_destruction_cb(const std::function& cb) { on_destruction.connect(cb); } + StateEvent(Container* container, Type* type, PajeEventType event_type, EntityValue* value, TIData* extra); + ~StateEvent() override { on_destruction(*this); } + bool has_extra() const { return extra_ != nullptr; } void print() override; }; @@ -75,23 +99,30 @@ class LinkEvent : public PajeEvent { Container* endpoint_; std::string value_; std::string key_; - int size_ = -1; + size_t size_; public: - LinkEvent(Container* container, Type* type, e_event_type event_type, Container* sourceContainer, std::string value, - std::string key); - LinkEvent(Container* container, Type* type, e_event_type event_type, Container* sourceContainer, std::string value, - std::string key, int size); + LinkEvent(Container* container, Type* type, PajeEventType event_type, Container* sourceContainer, + const std::string& value, const std::string& key, size_t size = static_cast(-1)) + : PajeEvent(container, type, simgrid_get_clock(), event_type) + , endpoint_(sourceContainer) + , value_(value) + , key_(key) + , size_(size) + { + } void print() override; }; class NewEvent : public PajeEvent { - EntityValue* val; + EntityValue* value; public: - NewEvent(double timestamp, Container* container, Type* type, EntityValue* val); + NewEvent(double timestamp, Container* container, Type* type, EntityValue* value) + : PajeEvent::PajeEvent(container, type, timestamp, PajeEventType::NewEvent), value(value) + { + } void print() override; }; -} -} +} // namespace simgrid::instr #endif