Skip to content

Commit 7c4a1cb

Browse files
committed
Refactor how ED modules are constructed
- simplified calling sequence to make a Worker - consolidated how modules are finalized - renamed classes to better match their usage
1 parent 13d093d commit 7c4a1cb

23 files changed

+129
-178
lines changed
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
#ifndef Framework_MakerMacros_h
22
#define Framework_MakerMacros_h
33

4-
#include "FWCore/Framework/interface/maker/MakerPluginFactory.h"
5-
#include "FWCore/Framework/interface/maker/WorkerMaker.h"
4+
#include "FWCore/Framework/interface/maker/ModuleMakerPluginFactory.h"
5+
#include "FWCore/Framework/interface/maker/ModuleMaker.h"
66
#include "FWCore/ParameterSet/interface/ParameterSetDescriptionFillerPluginFactory.h"
77
// The following includes are temporary until a better
88
// solution can be found. Placing these includes here
@@ -13,7 +13,7 @@
1313
// implementation file only.
1414
#include "FWCore/Framework/interface/maker/WorkerT.h"
1515

16-
#define DEFINE_FWK_MODULE(type) \
17-
DEFINE_EDM_PLUGIN(edm::MakerPluginFactory, edm::WorkerMaker<type>, #type); \
16+
#define DEFINE_FWK_MODULE(type) \
17+
DEFINE_EDM_PLUGIN(edm::ModuleMakerPluginFactory, edm::ModuleMaker<type>, #type); \
1818
DEFINE_FWK_PSET_DESC_FILLER(type)
1919
#endif

FWCore/Framework/interface/maker/MakerPluginFactory.h

Lines changed: 0 additions & 12 deletions
This file was deleted.

FWCore/Framework/interface/maker/ModuleHolder.h

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
#include "FWCore/Framework/interface/SignallingProductRegistryFiller.h"
2828
// forward declarations
2929
namespace edm {
30-
class Maker;
3130
class ModuleDescription;
3231
class SignallingProductRegistryFiller;
3332
class ExceptionToActionTable;
@@ -36,41 +35,51 @@ namespace edm {
3635
namespace maker {
3736
class ModuleHolder {
3837
public:
39-
ModuleHolder(Maker const* iMaker) : m_maker(iMaker) {}
38+
ModuleHolder() = default;
4039
virtual ~ModuleHolder() {}
41-
std::unique_ptr<Worker> makeWorker(ExceptionToActionTable const* actions) const;
40+
virtual std::unique_ptr<Worker> makeWorker(ExceptionToActionTable const* actions) const = 0;
4241

4342
virtual ModuleDescription const& moduleDescription() const = 0;
44-
virtual void setModuleDescription(ModuleDescription const& iDesc) = 0;
45-
virtual void preallocate(PreallocationConfiguration const&) = 0;
46-
virtual void registerProductsAndCallbacks(SignallingProductRegistryFiller*) = 0;
43+
virtual void finishModuleInitialization(ModuleDescription const& iDesc,
44+
PreallocationConfiguration const& iPrealloc,
45+
SignallingProductRegistryFiller* iReg) = 0;
4746
virtual void replaceModuleFor(Worker*) const = 0;
4847

4948
virtual std::unique_ptr<OutputModuleCommunicator> createOutputModuleCommunicator() = 0;
50-
51-
protected:
52-
Maker const* m_maker;
5349
};
5450

5551
template <typename T>
5652
class ModuleHolderT : public ModuleHolder {
5753
public:
58-
ModuleHolderT(std::shared_ptr<T> iModule, Maker const* iMaker) : ModuleHolder(iMaker), m_mod(iModule) {}
54+
ModuleHolderT(std::shared_ptr<T> iModule) : m_mod(iModule) {}
5955
~ModuleHolderT() override {}
6056
std::shared_ptr<T> module() const { return m_mod; }
6157
void replaceModuleFor(Worker* iWorker) const override {
6258
auto w = dynamic_cast<WorkerT<T>*>(iWorker);
6359
assert(nullptr != w);
6460
w->setModule(m_mod);
6561
}
62+
std::unique_ptr<Worker> makeWorker(ExceptionToActionTable const* actions) const override {
63+
return std::make_unique<edm::WorkerT<T>>(module(), moduleDescription(), actions);
64+
}
65+
66+
static void finishModuleInitialization(T& iModule,
67+
ModuleDescription const& iDesc,
68+
PreallocationConfiguration const& iPrealloc,
69+
SignallingProductRegistryFiller* iReg) {
70+
iModule.setModuleDescription(iDesc);
71+
iModule.doPreallocate(iPrealloc);
72+
if (iReg) {
73+
iModule.registerProductsAndCallbacks(&iModule, iReg);
74+
}
75+
};
6676
ModuleDescription const& moduleDescription() const override { return m_mod->moduleDescription(); }
67-
void setModuleDescription(ModuleDescription const& iDesc) override { m_mod->setModuleDescription(iDesc); }
68-
void preallocate(PreallocationConfiguration const& iPrealloc) override { m_mod->doPreallocate(iPrealloc); }
6977

70-
void registerProductsAndCallbacks(SignallingProductRegistryFiller* iReg) override {
71-
m_mod->registerProductsAndCallbacks(module().get(), iReg);
78+
void finishModuleInitialization(ModuleDescription const& iDesc,
79+
PreallocationConfiguration const& iPrealloc,
80+
SignallingProductRegistryFiller* iReg) override {
81+
finishModuleInitialization(*m_mod, iDesc, iPrealloc, iReg);
7282
}
73-
7483
std::unique_ptr<OutputModuleCommunicator> createOutputModuleCommunicator() override {
7584
return OutputModuleCommunicatorT<T>::createIfNeeded(m_mod.get());
7685
}

FWCore/Framework/interface/maker/WorkerMaker.h renamed to FWCore/Framework/interface/maker/ModuleMaker.h

Lines changed: 11 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
#ifndef FWCore_Framework_WorkerMaker_h
2-
#define FWCore_Framework_WorkerMaker_h
1+
#ifndef FWCore_Framework_ModuleMaker_h
2+
#define FWCore_Framework_ModuleMaker_h
33

44
#include <cassert>
55
#include <memory>
@@ -18,13 +18,12 @@ namespace edm {
1818
class ParameterSet;
1919
class ExceptionToActionTable;
2020

21-
class Maker {
21+
class ModuleMakerBase {
2222
public:
23-
virtual ~Maker();
23+
virtual ~ModuleMakerBase();
2424
std::shared_ptr<maker::ModuleHolder> makeModule(MakeModuleParams const&,
2525
signalslot::Signal<void(ModuleDescription const&)>& iPre,
2626
signalslot::Signal<void(ModuleDescription const&)>& iPost) const;
27-
std::unique_ptr<Worker> makeWorker(ExceptionToActionTable const*, maker::ModuleHolder const*) const;
2827

2928
std::shared_ptr<maker::ModuleHolder> makeReplacementModule(edm::ParameterSet const& p) const {
3029
return makeModule(p);
@@ -42,60 +41,42 @@ namespace edm {
4241
private:
4342
virtual void fillDescriptions(ConfigurationDescriptions& iDesc) const = 0;
4443
virtual std::shared_ptr<maker::ModuleHolder> makeModule(edm::ParameterSet const& p) const = 0;
45-
virtual std::unique_ptr<Worker> makeWorker(ExceptionToActionTable const* actions,
46-
ModuleDescription const& md,
47-
maker::ModuleHolder const* mod) const = 0;
4844
virtual const std::string& baseType() const = 0;
4945
};
5046

5147
template <class T>
52-
class WorkerMaker : public Maker {
48+
class ModuleMaker : public ModuleMakerBase {
5349
public:
5450
//typedef T worker_type;
55-
explicit WorkerMaker();
51+
explicit ModuleMaker();
5652

5753
private:
5854
void fillDescriptions(ConfigurationDescriptions& iDesc) const override;
59-
std::unique_ptr<Worker> makeWorker(ExceptionToActionTable const* actions,
60-
ModuleDescription const& md,
61-
maker::ModuleHolder const* mod) const override;
6255
std::shared_ptr<maker::ModuleHolder> makeModule(edm::ParameterSet const& p) const override;
6356
const std::string& baseType() const override;
6457
};
6558

6659
template <class T>
67-
WorkerMaker<T>::WorkerMaker() {}
60+
ModuleMaker<T>::ModuleMaker() {}
6861

6962
template <class T>
70-
void WorkerMaker<T>::fillDescriptions(ConfigurationDescriptions& iDesc) const {
63+
void ModuleMaker<T>::fillDescriptions(ConfigurationDescriptions& iDesc) const {
7164
T::fillDescriptions(iDesc);
7265
T::prevalidate(iDesc);
7366
}
7467

7568
template <class T>
76-
std::shared_ptr<maker::ModuleHolder> WorkerMaker<T>::makeModule(edm::ParameterSet const& p) const {
69+
std::shared_ptr<maker::ModuleHolder> ModuleMaker<T>::makeModule(edm::ParameterSet const& p) const {
7770
typedef T UserType;
7871
typedef typename UserType::ModuleType ModuleType;
7972
typedef MakeModuleHelper<ModuleType> MakerHelperType;
8073

8174
return std::shared_ptr<maker::ModuleHolder>(
82-
std::make_shared<maker::ModuleHolderT<ModuleType> >(MakerHelperType::template makeModule<UserType>(p), this));
75+
std::make_shared<maker::ModuleHolderT<ModuleType> >(MakerHelperType::template makeModule<UserType>(p)));
8376
}
8477

8578
template <class T>
86-
std::unique_ptr<Worker> WorkerMaker<T>::makeWorker(ExceptionToActionTable const* actions,
87-
ModuleDescription const& md,
88-
maker::ModuleHolder const* mod) const {
89-
typedef T UserType;
90-
typedef typename UserType::ModuleType ModuleType;
91-
typedef edm::WorkerT<ModuleType> WorkerType;
92-
93-
maker::ModuleHolderT<ModuleType> const* h = dynamic_cast<maker::ModuleHolderT<ModuleType> const*>(mod);
94-
return std::make_unique<WorkerType>(h->module(), md, actions);
95-
}
96-
97-
template <class T>
98-
const std::string& WorkerMaker<T>::baseType() const {
79+
const std::string& ModuleMaker<T>::baseType() const {
9980
return T::baseType();
10081
}
10182

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#ifndef FWCore_Framework_ModuleMakerPluginFactory_h
2+
#define FWCore_Framework_ModuleMakerPluginFactory_h
3+
4+
#include "FWCore/PluginManager/interface/PluginFactory.h"
5+
6+
namespace edm {
7+
class ModuleMakerBase;
8+
9+
using ModuleMakerPluginFactory = edmplugin::PluginFactory<ModuleMakerBase*()>;
10+
} // namespace edm
11+
12+
#endif

FWCore/Framework/src/GlobalSchedule.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#include "FWCore/Framework/interface/GlobalSchedule.h"
2-
#include "FWCore/Framework/interface/maker/WorkerMaker.h"
2+
#include "FWCore/Framework/interface/maker/ModuleMaker.h"
33
#include "FWCore/Framework/src/TriggerResultInserter.h"
44
#include "FWCore/Framework/src/PathStatusInserter.h"
55
#include "FWCore/Framework/src/EndPathStatusInserter.h"

FWCore/Framework/src/ModuleHolder.cc

Lines changed: 0 additions & 25 deletions
This file was deleted.

FWCore/Framework/src/Factory.cc renamed to FWCore/Framework/src/ModuleHolderFactory.cc

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,35 @@
11

2-
#include "FWCore/Framework/src/Factory.h"
3-
#include "FWCore/Framework/interface/maker/MakerPluginFactory.h"
2+
#include "FWCore/Framework/src/ModuleHolderFactory.h"
3+
#include "FWCore/Framework/interface/maker/ModuleMakerPluginFactory.h"
44
#include "FWCore/Framework/interface/ModuleTypeResolverMaker.h"
55
#include "FWCore/Framework/interface/resolveMaker.h"
6-
#include "FWCore/Utilities/interface/DebugMacros.h"
76
#include "FWCore/Utilities/interface/EDMException.h"
87
#include "FWCore/Utilities/interface/Algorithms.h"
98

109
#include <iostream>
1110

12-
EDM_REGISTER_PLUGINFACTORY(edm::MakerPluginFactory, "CMS EDM Framework Module");
11+
EDM_REGISTER_PLUGINFACTORY(edm::ModuleMakerPluginFactory, "CMS EDM Framework Module");
1312
namespace edm {
1413

15-
Factory const Factory::singleInstance_;
14+
ModuleHolderFactory const ModuleHolderFactory::singleInstance_;
1615

17-
Factory::~Factory() = default;
16+
ModuleHolderFactory::~ModuleHolderFactory() = default;
1817

19-
Factory::Factory() = default;
18+
ModuleHolderFactory::ModuleHolderFactory() = default;
2019

21-
Factory const* Factory::get() { return &singleInstance_; }
20+
ModuleHolderFactory const* ModuleHolderFactory::get() { return &singleInstance_; }
2221

23-
Maker const* Factory::findMaker(const MakeModuleParams& p, ModuleTypeResolverMaker const* resolverMaker) const {
22+
ModuleMakerBase const* ModuleHolderFactory::findMaker(const MakeModuleParams& p,
23+
ModuleTypeResolverMaker const* resolverMaker) const {
2424
std::string modtype = p.pset_->getParameter<std::string>("@module_type");
25-
FDEBUG(1) << "Factory: module_type = " << modtype << std::endl;
2625
MakerMap::iterator it = makers_.find(modtype);
2726
if (it != makers_.end()) {
2827
return it->second.get();
2928
}
30-
return detail::resolveMaker<MakerPluginFactory>(modtype, resolverMaker, *p.pset_, makers_);
29+
return detail::resolveMaker<ModuleMakerPluginFactory>(modtype, resolverMaker, *p.pset_, makers_);
3130
}
3231

33-
std::shared_ptr<maker::ModuleHolder> Factory::makeModule(
32+
std::shared_ptr<maker::ModuleHolder> ModuleHolderFactory::makeModule(
3433
const MakeModuleParams& p,
3534
const ModuleTypeResolverMaker* resolverMaker,
3635
signalslot::Signal<void(const ModuleDescription&)>& pre,
@@ -40,7 +39,7 @@ namespace edm {
4039
return mod;
4140
}
4241

43-
std::shared_ptr<maker::ModuleHolder> Factory::makeReplacementModule(const edm::ParameterSet& p) const {
42+
std::shared_ptr<maker::ModuleHolder> ModuleHolderFactory::makeReplacementModule(const edm::ParameterSet& p) const {
4443
std::string modtype = p.getParameter<std::string>("@module_type");
4544
MakerMap::iterator it = makers_.find(modtype);
4645
if (it != makers_.end()) {

FWCore/Framework/src/Factory.h renamed to FWCore/Framework/src/ModuleHolderFactory.h

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
#ifndef FWCore_Framework_Factory_h
2-
#define FWCore_Framework_Factory_h
1+
#ifndef FWCore_Framework_ModuleHolderFactory_h
2+
#define FWCore_Framework_ModuleHolderFactory_h
33

44
#include "FWCore/Framework/interface/maker/Worker.h"
5-
#include "FWCore/Framework/interface/maker/WorkerMaker.h"
5+
#include "FWCore/Framework/interface/maker/ModuleMaker.h"
66
#include "FWCore/Framework/interface/maker/MakeModuleParams.h"
77

88
#include <map>
@@ -15,13 +15,13 @@
1515
namespace edm {
1616
class ModuleTypeResolverMaker;
1717

18-
class Factory {
18+
class ModuleHolderFactory {
1919
public:
20-
typedef std::map<std::string, std::unique_ptr<Maker const>> MakerMap;
20+
typedef std::map<std::string, std::unique_ptr<ModuleMakerBase const>> MakerMap;
2121

22-
~Factory();
22+
~ModuleHolderFactory();
2323

24-
static Factory const* get();
24+
static ModuleHolderFactory const* get();
2525

2626
//This function is not const-thread safe
2727
std::shared_ptr<maker::ModuleHolder> makeModule(const MakeModuleParams&,
@@ -32,9 +32,9 @@ namespace edm {
3232
std::shared_ptr<maker::ModuleHolder> makeReplacementModule(const edm::ParameterSet&) const;
3333

3434
private:
35-
Factory();
36-
Maker const* findMaker(const MakeModuleParams& p, const ModuleTypeResolverMaker*) const;
37-
static Factory const singleInstance_;
35+
ModuleHolderFactory();
36+
ModuleMakerBase const* findMaker(const MakeModuleParams& p, const ModuleTypeResolverMaker*) const;
37+
static ModuleHolderFactory const singleInstance_;
3838
//It is not safe to create modules across threads
3939
CMS_SA_ALLOW mutable MakerMap makers_;
4040
};

0 commit comments

Comments
 (0)