File indexing completed on 2023-03-17 11:02:02
0001 #ifndef FWCore_Framework_EventSetupRecordIOVQueue_h
0002 #define FWCore_Framework_EventSetupRecordIOVQueue_h
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031 #include "FWCore/Concurrency/interface/LimitedTaskQueue.h"
0032 #include "FWCore/Concurrency/interface/WaitingTaskHolder.h"
0033 #include "FWCore/Concurrency/interface/WaitingTaskList.h"
0034 #include "FWCore/Utilities/interface/propagate_const.h"
0035
0036 #include <atomic>
0037 #include <memory>
0038 #include <vector>
0039
0040 namespace edm {
0041 namespace eventsetup {
0042
0043 class EventSetupRecordProvider;
0044
0045 class EventSetupRecordIOVQueue {
0046 public:
0047 EventSetupRecordIOVQueue(unsigned int nConcurrentIOVs);
0048 ~EventSetupRecordIOVQueue();
0049
0050 void endIOVAsync(WaitingTaskHolder endTask);
0051
0052 void setNewIntervalForAnySubProcess();
0053
0054 void checkForNewIOVs(WaitingTaskHolder const& taskToStartAfterIOVInit,
0055 WaitingTaskList& endIOVWaitingTasks,
0056 bool newEventSetupImpl);
0057
0058 void startNewIOVAsync(WaitingTaskHolder const& taskToStartAfterIOVInit, WaitingTaskList& endIOVWaitingTasks);
0059
0060 void addRecProvider(EventSetupRecordProvider* recProvider);
0061
0062 private:
0063
0064 edm::LimitedTaskQueue iovQueue_;
0065 edm::WaitingTaskList endIOVTasks_;
0066
0067
0068
0069 std::vector<std::atomic<bool>> isAvailable_;
0070
0071
0072 std::vector<edm::propagate_const<EventSetupRecordProvider*>> recordProviders_;
0073
0074
0075 unsigned long long cacheIdentifier_;
0076 WaitingTaskHolder endIOVTaskHolder_;
0077 bool endIOVCalled_ = false;
0078 };
0079
0080 }
0081 }
0082 #endif