Skip to content
Snippets Groups Projects

ArViz: Replace Coin timer by QtTimer to fix ArViz from freezing...

Merged Rainer Kartmann requested to merge fix/arviz-freezing into master
4 files
+ 42
12
Compare changes
  • Side-by-side
  • Inline
Files
4
@@ -51,11 +51,11 @@ namespace armarx::viz
return "UNKNOWN";
}
static void updateVisualizationCB(void* data, SoSensor* sensor)
{
auto* visu = static_cast<CoinVisualizer*>(data);
visu->update();
}
// static void updateVisualizationCB(void* data, SoSensor* sensor)
// {
// auto* visu = static_cast<CoinVisualizer*>(data);
// visu->update();
// }
struct TimedBlock
{
@@ -89,10 +89,10 @@ namespace armarx::viz
&CoinVisualizerWrapper::onUpdateFailure);
root = new SoSeparator;
timerSensor = new SoTimerSensor(updateVisualizationCB, this);
//timerSensor = new SoTimerSensor(updateVisualizationCB, this);
float cycleTimeMS = 33.0f;
timerSensor->setInterval(SbTime(cycleTimeMS / 1000.0f));
//float cycleTimeMS = 33.0f;
//timerSensor->setInterval(SbTime(cycleTimeMS / 1000.0f));
}
CoinVisualizer::~CoinVisualizer()
@@ -115,8 +115,8 @@ namespace armarx::viz
state = CoinVisualizerState::STARTING;
stateStorage = storage;
SoSensorManager* sensor_mgr = SoDB::getSensorManager();
sensor_mgr->insertTimerSensor(timerSensor);
//SoSensorManager* sensor_mgr = SoDB::getSensorManager();
//sensor_mgr->insertTimerSensor(timerSensor);
}
void CoinVisualizer::stop()
@@ -272,6 +272,10 @@ namespace armarx::viz
void CoinVisualizer::update()
{
{
std::lock_guard lock(timingMutex);
lastTiming.updateToggle = (lastTiming.updateToggle + 1) % 10;
}
switch (state)
{
case CoinVisualizerState::STARTING:
@@ -312,6 +316,7 @@ namespace armarx::viz
// We should restart the pull for updates so it can run in parallel
data::LayerUpdates currentUpdates = pulledUpdates;
updateResult = CoinVisualizerUpdateResult::WAITING;
timing.waitStart = time_start;
storage->begin_pullUpdatesSince(currentUpdates.revision, callback);
auto layerIDsBefore = getLayerIDs();
@@ -343,6 +348,7 @@ namespace armarx::viz
// Copy the timing result
std::lock_guard lock(timingMutex);
timing.counter = lastTiming.counter + 1;
timing.updateToggle = lastTiming.updateToggle;
lastTiming = std::move(timing);
}
}
@@ -350,7 +356,13 @@ namespace armarx::viz
case CoinVisualizerUpdateResult::WAITING:
{
// Still waiting for result
} break;
{
// Copy the timing result
std::lock_guard lock(timingMutex);
lastTiming.waitDuration = IceUtil::Time::now() - lastTiming.waitStart;
}
}
break;
case CoinVisualizerUpdateResult::FAILURE:
{
std::unique_lock<std::mutex> lock(stateMutex);
Loading