File indexing completed on 2026-09-23 09:33:04
0001
0002
0003
0004
0005 #pragma once
0006
0007 #include <memory>
0008
0009 #include <JANA/JService.h>
0010 #include <JANA/Services/JParameterManager.h>
0011 #include <JANA/Services/JComponentManager.h>
0012 #include <JANA/Topology/JEventQueue.h>
0013 #include <JANA/Topology/JEventPool.h>
0014 #include <JANA/Utils/JEventLevel.h>
0015 #include <JANA/Utils/JProcessorMapping.h>
0016
0017
0018 class JParameterManager;
0019 class JComponentManager;
0020 class JArrow;
0021 class JFoldArrow;
0022 class JUnfoldArrow;
0023 class JTapArrow;
0024
0025 class JTopologyBuilder : public JService {
0026
0027 Service<JParameterManager> m_params {this};
0028 std::shared_ptr<JComponentManager> m_components;
0029
0030
0031 std::vector<JArrow*> arrows;
0032 std::vector<JEventQueue*> queues;
0033 std::vector<JEventPool*> pools;
0034
0035 std::map<std::string, JArrow*> arrow_lookup;
0036 std::map<JEventLevel, JEventPool*> pool_lookup;
0037
0038
0039 std::map<JEventLevel, size_t> m_max_inflight_events;
0040 size_t m_location_count = 1;
0041
0042 int m_affinity = 0;
0043 int m_locality = 0;
0044
0045 std::function<void(JTopologyBuilder&, JComponentManager&)> m_configure_topology;
0046 JProcessorMapping mapping;
0047
0048 public:
0049
0050 JTopologyBuilder();
0051 ~JTopologyBuilder() override;
0052
0053 void Init() override;
0054
0055 void AddArrow(JArrow* arrow);
0056 JArrow* GetArrow(const std::string& arrow_name);
0057 JEventPool* GetOrCreatePool(JEventLevel level);
0058
0059 void ConnectQueue(std::string upstream_arrow_name, std::string upstream_port_name,
0060 std::string downstream_arrow_name, std::string downstream_port_name);
0061
0062 void ConnectPool(std::string arrow_name, std::string port_name, JEventLevel level);
0063
0064 void ConnectPool(JEventLevel upstream_level, JEventLevel downstream_level);
0065
0066
0067
0068
0069 void SetConfigureFn(std::function<void(JTopologyBuilder&, JComponentManager&)> configure_fn);
0070
0071 void CreateTopology();
0072 void CreateTopologyFromScratch();
0073
0074 std::string PrintTopology();
0075
0076 const std::vector<JArrow*>& GetArrows() { return arrows; };
0077 const std::vector<JEventPool*>& GetPools() { return pools; };
0078 const std::vector<JEventQueue*>& GetQueues() { return queues; };
0079 const JProcessorMapping& GetProcessorMapping() { return mapping; };
0080
0081 private:
0082 void Connect(JArrow* upstream, size_t upstream_port_id, JArrow* downstream, size_t downstream_port_id);
0083 std::pair<JTapArrow*, JTapArrow*> CreateTapChain(std::vector<JEventProcessor*>& procs, std::string name);
0084 };
0085
0086