Skip to content

Commit d4797d5

Browse files
committed
DPL: handle time-pipelining when enumerating
Timers are still most likely broken.
1 parent 898736e commit d4797d5

File tree

3 files changed

+8
-8
lines changed

3 files changed

+8
-8
lines changed

Framework/Core/include/Framework/LifetimeHelpers.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ struct LifetimeHelpers {
3232
static ExpirationHandler::Creator dataDrivenCreation();
3333
/// Callback which creates a new timeslice as soon as one is available and
3434
/// uses an incremental number as timestamp.
35-
static ExpirationHandler::Creator enumDrivenCreation(size_t first, size_t last, size_t step);
35+
static ExpirationHandler::Creator enumDrivenCreation(size_t first, size_t last, size_t step, size_t inputTimeslice, size_t maxTimeSliceId);
3636
/// Callback which creates a new timeslice when timer
3737
/// expires and there is not a compatible datadriven callback
3838
/// available.

Framework/Core/src/DeviceSpecHelpers.cxx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,16 +56,16 @@ struct ExpirationHandlerHelpers {
5656
};
5757
}
5858

59-
static RouteConfigurator::CreationConfigurator enumDrivenConfigurator(InputSpec const& matcher)
59+
static RouteConfigurator::CreationConfigurator enumDrivenConfigurator(InputSpec const& matcher, size_t inputTimeslice, size_t maxInputTimeslices)
6060
{
61-
return [matcher](ConfigParamRegistry const& options) {
61+
return [matcher, inputTimeslice, maxInputTimeslices](ConfigParamRegistry const& options) {
6262
std::string startName = std::string{"start-value-"} + matcher.binding;
6363
std::string endName = std::string{"end-value-"} + matcher.binding;
6464
std::string stepName = std::string{"step-value-"} + matcher.binding;
6565
auto start = options.get<int64_t>(startName.c_str());
6666
auto stop = options.get<int64_t>(endName.c_str());
6767
auto step = options.get<int64_t>(stepName.c_str());
68-
return LifetimeHelpers::enumDrivenCreation(start, stop, step);
68+
return LifetimeHelpers::enumDrivenCreation(start, stop, step, inputTimeslice, maxInputTimeslices);
6969
};
7070
}
7171

@@ -557,7 +557,7 @@ void DeviceSpecHelpers::processInEdgeActions(std::vector<DeviceSpec>& devices,
557557
break;
558558
case Lifetime::Enumeration:
559559
route.configurator = {
560-
ExpirationHandlerHelpers::enumDrivenConfigurator(inputSpec),
560+
ExpirationHandlerHelpers::enumDrivenConfigurator(inputSpec, consumerDevice.inputTimesliceId, consumerDevice.maxInputTimeslices),
561561
ExpirationHandlerHelpers::danglingEnumerationConfigurator(inputSpec),
562562
ExpirationHandlerHelpers::expiringEnumerationConfigurator(inputSpec, sourceChannel)};
563563
break;

Framework/Core/src/LifetimeHelpers.cxx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,18 +50,18 @@ ExpirationHandler::Creator LifetimeHelpers::dataDrivenCreation()
5050
};
5151
}
5252

53-
ExpirationHandler::Creator LifetimeHelpers::enumDrivenCreation(size_t start, size_t end, size_t step)
53+
ExpirationHandler::Creator LifetimeHelpers::enumDrivenCreation(size_t start, size_t end, size_t step, size_t inputTimeslice, size_t maxInputTimeslices)
5454
{
5555
auto last = std::make_shared<size_t>(start);
56-
return [start, end, step, last](TimesliceIndex& index) -> TimesliceSlot {
56+
return [start, end, step, last, inputTimeslice, maxInputTimeslices](TimesliceIndex& index) -> TimesliceSlot {
5757
for (size_t si = 0; si < index.size(); si++) {
5858
if (*last > end) {
5959
return TimesliceSlot{TimesliceSlot::INVALID};
6060
}
6161
auto slot = TimesliceSlot{si};
6262
if (index.isValid(slot) == false) {
6363
TimesliceId timestamp{*last};
64-
*last += step;
64+
*last += step * (maxInputTimeslices + inputTimeslice);
6565
index.associate(timestamp, slot);
6666
return slot;
6767
}

0 commit comments

Comments
 (0)