Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Delay constructing transition wrappers #28459

Merged
merged 1 commit into from Nov 24, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
12 changes: 10 additions & 2 deletions FWCore/Framework/interface/Event.h
Expand Up @@ -33,6 +33,7 @@ For its usage, see "FWCore/Framework/interface/PrincipalGetAdapter.h"
#include "FWCore/Common/interface/EventBase.h"
#include "FWCore/Framework/interface/Frameworkfwd.h"
#include "FWCore/Framework/interface/PrincipalGetAdapter.h"
#include "FWCore/Framework/interface/LuminosityBlock.h"
#include "FWCore/Utilities/interface/TypeID.h"
#include "FWCore/Utilities/interface/EDGetToken.h"
#include "FWCore/Utilities/interface/EDPutToken.h"
Expand Down Expand Up @@ -94,7 +95,12 @@ namespace edm {
///\return The id for the particular Stream processing the Event
StreamID streamID() const { return streamID_; }

LuminosityBlock const& getLuminosityBlock() const { return *luminosityBlock_; }
LuminosityBlock const& getLuminosityBlock() const {
if (not luminosityBlock_) {
fillLuminosityBlock();
}
return *luminosityBlock_;
}

Run const& getRun() const;

Expand Down Expand Up @@ -255,6 +261,8 @@ namespace edm {

EventPrincipal const& eventPrincipal() const;

void fillLuminosityBlock() const;

ProductID makeProductID(BranchDescription const& desc) const;

//override used by EventBase class
Expand Down Expand Up @@ -298,7 +306,7 @@ namespace edm {
ProductPtrVec putProducts_;

EventAuxiliary const& aux_;
std::shared_ptr<LuminosityBlock const> const luminosityBlock_;
mutable std::optional<LuminosityBlock> luminosityBlock_;

// gotBranchIDs_ must be mutable because it records all 'gets',
// which do not logically modify the PrincipalGetAdapter. gotBranchIDs_ is
Expand Down
13 changes: 11 additions & 2 deletions FWCore/Framework/interface/LuminosityBlock.h
Expand Up @@ -22,6 +22,7 @@ For its usage, see "FWCore/Framework/interface/PrincipalGetAdapter.h"
#include "FWCore/Common/interface/LuminosityBlockBase.h"
#include "FWCore/Framework/interface/Frameworkfwd.h"
#include "FWCore/Framework/interface/PrincipalGetAdapter.h"
#include "FWCore/Framework/interface/Run.h"
#include "FWCore/Utilities/interface/EDGetToken.h"
#include "FWCore/Utilities/interface/EDPutToken.h"
#include "FWCore/Utilities/interface/ProductKindOfType.h"
Expand All @@ -33,6 +34,7 @@ For its usage, see "FWCore/Framework/interface/PrincipalGetAdapter.h"
#include <string>
#include <typeinfo>
#include <vector>
#include <optional>

namespace edm {
class ModuleCallingContext;
Expand Down Expand Up @@ -100,7 +102,12 @@ namespace edm {
template <typename PROD>
void getManyByType(std::vector<Handle<PROD>>& results) const;

Run const& getRun() const { return *run_; }
Run const& getRun() const {
if (not run_) {
fillRun();
}
return run_.value();
}

///Put a new product.
template <typename PROD>
Expand Down Expand Up @@ -157,6 +164,8 @@ namespace edm {
ProductPtrVec& putProducts() { return putProducts_; }
ProductPtrVec const& putProducts() const { return putProducts_; }

void fillRun() const;

// commit_() is called to complete the transaction represented by
// this PrincipalGetAdapter. The friendships required seems gross, but any
// alternative is not great either. Putting it into the
Expand All @@ -171,7 +180,7 @@ namespace edm {
PrincipalGetAdapter provRecorder_;
ProductPtrVec putProducts_;
LuminosityBlockAuxiliary const& aux_;
std::shared_ptr<Run const> const run_;
mutable std::optional<Run> run_;
ModuleCallingContext const* moduleCallingContext_;

static const std::string emptyString_;
Expand Down
3 changes: 3 additions & 0 deletions FWCore/Framework/interface/PrincipalGetAdapter.h
Expand Up @@ -141,8 +141,10 @@ namespace edm {
//size_t size() const;

void setConsumer(EDConsumerBase const* iConsumer) { consumer_ = iConsumer; }
EDConsumerBase const* getConsumer() const { return consumer_; }

void setSharedResourcesAcquirer(SharedResourcesAcquirer* iSra) { resourcesAcquirer_ = iSra; }
SharedResourcesAcquirer* getSharedResourcesAcquirer() const { return resourcesAcquirer_; }

void setProducer(ProducerBase const* iProd) { prodBase_ = iProd; }

Expand Down Expand Up @@ -172,6 +174,7 @@ namespace edm {

BranchDescription const& getBranchDescription(unsigned int iPutTokenIndex) const;
ProductID const& getProductID(unsigned int iPutTokenIndex) const;
ModuleDescription const& moduleDescription() const { return md_; }

std::vector<edm::ProductResolverIndex> const& putTokenIndexToProductResolverIndex() const;

Expand Down
19 changes: 14 additions & 5 deletions FWCore/Framework/src/Event.cc
Expand Up @@ -22,9 +22,7 @@ namespace edm {
Event::Event(EventPrincipal const& ep, ModuleDescription const& md, ModuleCallingContext const* moduleCallingContext)
: provRecorder_(ep, md, true /*always at end*/),
aux_(ep.aux()),
luminosityBlock_(ep.luminosityBlockPrincipalPtrValid()
? new LuminosityBlock(ep.luminosityBlockPrincipal(), md, moduleCallingContext, false)
: nullptr),
luminosityBlock_(),
gotBranchIDs_(),
gotViews_(),
streamID_(ep.streamID()),
Expand All @@ -37,12 +35,23 @@ namespace edm {
void Event::setConsumer(EDConsumerBase const* iConsumer) {
provRecorder_.setConsumer(iConsumer);
gotBranchIDs_.reserve(provRecorder_.numberOfProductsConsumed());
const_cast<LuminosityBlock*>(luminosityBlock_.get())->setConsumer(iConsumer);
if (luminosityBlock_) {
luminosityBlock_->setConsumer(iConsumer);
}
}

void Event::setSharedResourcesAcquirer(SharedResourcesAcquirer* iResourceAcquirer) {
provRecorder_.setSharedResourcesAcquirer(iResourceAcquirer);
const_cast<LuminosityBlock*>(luminosityBlock_.get())->setSharedResourcesAcquirer(iResourceAcquirer);
if (luminosityBlock_) {
luminosityBlock_->setSharedResourcesAcquirer(iResourceAcquirer);
}
}

void Event::fillLuminosityBlock() const {
luminosityBlock_.emplace(
eventPrincipal().luminosityBlockPrincipal(), provRecorder_.moduleDescription(), moduleCallingContext_, false);
luminosityBlock_->setConsumer(provRecorder_.getConsumer());
luminosityBlock_->setSharedResourcesAcquirer(provRecorder_.getSharedResourcesAcquirer());
}

void Event::setProducerCommon(ProducerBase const* iProd, std::vector<BranchID>* previousParentage) {
Expand Down
18 changes: 12 additions & 6 deletions FWCore/Framework/src/LuminosityBlock.cc
Expand Up @@ -13,10 +13,7 @@ namespace edm {
ModuleDescription const& md,
ModuleCallingContext const* moduleCallingContext,
bool isAtEnd)
: provRecorder_(lbp, md, isAtEnd),
aux_(lbp.aux()),
run_(new Run(lbp.runPrincipal(), md, moduleCallingContext, false)),
moduleCallingContext_(moduleCallingContext) {}
: provRecorder_(lbp, md, isAtEnd), aux_(lbp.aux()), run_(), moduleCallingContext_(moduleCallingContext) {}

LuminosityBlock::~LuminosityBlock() {}

Expand All @@ -29,13 +26,22 @@ namespace edm {
void LuminosityBlock::setConsumer(EDConsumerBase const* iConsumer) {
provRecorder_.setConsumer(iConsumer);
if (run_) {
const_cast<Run*>(run_.get())->setConsumer(iConsumer);
run_->setConsumer(iConsumer);
}
}

void LuminosityBlock::setSharedResourcesAcquirer(SharedResourcesAcquirer* iResourceAcquirer) {
provRecorder_.setSharedResourcesAcquirer(iResourceAcquirer);
const_cast<Run*>(run_.get())->setSharedResourcesAcquirer(iResourceAcquirer);
if (run_) {
run_->setSharedResourcesAcquirer(iResourceAcquirer);
}
}

void LuminosityBlock::fillRun() const {
run_.emplace(
luminosityBlockPrincipal().runPrincipal(), provRecorder_.moduleDescription(), moduleCallingContext_, false);
run_->setSharedResourcesAcquirer(provRecorder_.getSharedResourcesAcquirer());
run_->setConsumer(provRecorder_.getConsumer());
}

void LuminosityBlock::setProducer(ProducerBase const* iProducer) {
Expand Down