Skip to content

Commit a5ead5b

Browse files
committed
Closes #739
1 parent 289f504 commit a5ead5b

File tree

11 files changed

+40
-11
lines changed

11 files changed

+40
-11
lines changed

src/Dataflow/Engine/Scheduler/BasicMultithreadedNetworkExecutor.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ namespace
4747

4848
void operator()() const
4949
{
50-
waitForStartupInit();
50+
waitForStartupInit(*lookup_);
5151
/// @todo ESSENTIAL: scoped start/finish signaling
5252
bounds_.executeStarts_();
5353
for (int group = order_.minGroup(); group <= order_.maxGroup(); ++group)

src/Dataflow/Engine/Scheduler/DynamicMultithreadedNetworkExecutor.cc

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,13 @@ namespace SCIRun {
5555
work_(new DynamicExecutor::ModuleWorkQueue(numModules)),
5656
producer_(new DynamicExecutor::ModuleProducer(context.addAdditionalFilter(ModuleWaitingFilter::Instance()),
5757
&context.lookup, context.bounds(), network, lock, work_, numModules)),
58-
consumer_(new DynamicExecutor::ModuleConsumer(work_, &context.lookup, producer_))
58+
consumer_(new DynamicExecutor::ModuleConsumer(work_, &context.lookup, producer_)),
59+
network_(network)
5960
{
6061
}
6162
void operator()() const
6263
{
63-
waitForStartupInit();
64+
waitForStartupInit(*network_);
6465
boost::thread consume(boost::ref(*consumer_));
6566
boost::thread produce(boost::ref(*producer_));
6667
consume.join();
@@ -70,6 +71,7 @@ namespace SCIRun {
7071
DynamicExecutor::ModuleWorkQueuePtr work_;
7172
DynamicExecutor::ModuleProducerPtr producer_;
7273
DynamicExecutor::ModuleConsumerPtr consumer_;
74+
const NetworkInterface* network_;
7375
};
7476
}}}
7577

src/Dataflow/Engine/Scheduler/LinearSerialNetworkExecutor.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ namespace
4545
}
4646
void operator()() const
4747
{
48-
waitForStartupInit();
48+
waitForStartupInit(lookup_);
4949
bounds_.executeStarts_();
5050
BOOST_FOREACH(const ModuleId& id, order_)
5151
{

src/Dataflow/Engine/Scheduler/SchedulerInterfaces.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,15 +56,15 @@ const ExecutionBounds& ExecutionContext::bounds() const
5656
return executionBounds_;
5757
}
5858

59-
bool WaitsForStartupInitialization::shouldWait_(true);
59+
bool WaitsForStartupInitialization::waitedAlready_(false);
6060

61-
void WaitsForStartupInitialization::waitForStartupInit() const
61+
void WaitsForStartupInitialization::waitForStartupInit(const ExecutableLookup& lookup) const
6262
{
63-
if (shouldWait_)
63+
if (!waitedAlready_ && lookup.containsViewScene())
6464
{
6565
std::cout << "Waiting for rendering system initialization...." << std::endl;
6666
boost::this_thread::sleep(boost::posix_time::milliseconds(600));
6767
std::cout << "Done waiting." << std::endl;
68-
shouldWait_ = false;
68+
waitedAlready_ = true;
6969
}
7070
}

src/Dataflow/Engine/Scheduler/SchedulerInterfaces.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,9 +144,9 @@ namespace Engine {
144144
class SCISHARE WaitsForStartupInitialization
145145
{
146146
public:
147-
void waitForStartupInit() const;
147+
void waitForStartupInit(const Networks::ExecutableLookup& lookup) const;
148148
private:
149-
static bool shouldWait_;
149+
static bool waitedAlready_;
150150
};
151151

152152
}}}

src/Dataflow/Network/Network.cc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,11 @@ void Network::clear()
244244
modules_.clear();
245245
}
246246

247+
bool Network::containsViewScene() const
248+
{
249+
return std::find_if(modules_.begin(), modules_.end(), [](ModuleHandle m) { return m->get_module_name() == "ViewScene"; }) != modules_.end();
250+
}
251+
247252
ConnectionOutputPort::ConnectionOutputPort(ModuleHandle m, size_t index) : ModulePortIdPair(m, m->outputPorts().at(index)->id())
248253
{
249254
}

src/Dataflow/Network/Network.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ namespace Networks {
6464
virtual ConnectionDescriptionList connections() const;
6565
virtual int errorCode() const;
6666
virtual void incrementErrorCode(const ModuleId& moduleId);
67+
virtual bool containsViewScene() const;
6768
virtual NetworkGlobalSettings& settings();
6869
virtual std::string toString() const;
6970
virtual void setModuleExecutionState(ModuleInterface::ExecutionState state, ModuleFilter filter);

src/Dataflow/Network/NetworkInterface.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ namespace Networks {
4949
{
5050
public:
5151
virtual ~ExecutableLookup() {}
52-
virtual ExecutableObject* lookupExecutable(const ModuleId& id) const = 0;
52+
virtual ExecutableObject* lookupExecutable(const ModuleId& id) const = 0;
53+
virtual bool containsViewScene() const = 0;
5354
virtual int errorCode() const = 0;
5455
};
5556

src/Dataflow/Network/Tests/MockNetwork.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ namespace SCIRun {
6060
MOCK_METHOD0(settings, NetworkGlobalSettings&());
6161
MOCK_METHOD2(setModuleExecutionState, void(ModuleInterface::ExecutionState, ModuleFilter));
6262
MOCK_METHOD0(clear, void());
63+
MOCK_CONST_METHOD0(containsViewScene, bool());
6364
};
6465

6566
typedef boost::shared_ptr<MockNetwork> MockNetworkPtr;

src/Interface/Application/NetworkEditor.cc

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,19 @@ namespace
177177
}
178178
return 0;
179179
}
180+
181+
ModuleProxyWidget* findFirstByName(const QList<QGraphicsItem*>& list, const std::string& name)
182+
{
183+
Q_FOREACH(QGraphicsItem* item, list)
184+
{
185+
if (auto w = dynamic_cast<ModuleProxyWidget*>(item))
186+
{
187+
if (w->getModuleWidget()->getModuleId().find(name) != std::string::npos)
188+
return w;
189+
}
190+
}
191+
return 0;
192+
}
180193
}
181194

182195
void NetworkEditor::duplicateModule(const SCIRun::Dataflow::Networks::ModuleHandle& module)
@@ -964,6 +977,11 @@ int NetworkEditor::currentZoomPercentage() const
964977
return static_cast<int>(currentScale_ * 100);
965978
}
966979

980+
bool NetworkEditor::containsViewScene() const
981+
{
982+
return findFirstByName(scene_->items(), "ViewScene") != nullptr;
983+
}
984+
967985
NetworkEditor::~NetworkEditor()
968986
{
969987
Q_FOREACH(QGraphicsItem* item, scene_->items())

0 commit comments

Comments
 (0)