iMSTK
Interactive Medical Simulation Toolkit
imstkPerformanceGraph.cpp
1 /*
2 ** This file is part of the Interactive Medical Simulation Toolkit (iMSTK)
3 ** iMSTK is distributed under the Apache License, Version 2.0.
4 ** See accompanying NOTICE for details.
5 */
6 
7 #include "imstkPerformanceGraph.h"
8 #include "imstkLogger.h"
9 #include "imstkRenderer.h"
10 #include "imstkScene.h"
11 #include "imstkSceneManager.h"
12 #include "imstkViewer.h"
13 
14 namespace imstk
15 {
16 void
17 PerformanceGraph::setViewer(std::weak_ptr<Viewer> viewer)
18 {
19  CHECK(viewer.lock() != nullptr) << "Tried to set null viewer";
20  m_viewer = viewer;
21 }
22 
23 void
24 PerformanceGraph::setSceneManager(std::weak_ptr<SceneManager> sceneManager)
25 {
26  CHECK(sceneManager.lock() != nullptr) << "Tried to set null sceneManager";
27  m_sceneManager = sceneManager;
28 }
29 
30 void
32 {
33  std::shared_ptr<Viewer> viewer = m_viewer.lock();
34  CHECK(viewer != nullptr) << "PerformanceGraph must have viewer";
35  const int infoLevel = viewer->getInfoLevel();
36  if (infoLevel != m_prevInfoLevel)
37  {
38  // If level 1 or 2 enable, else disable
39  m_enabled = (infoLevel == 2);
40  m_sceneManager.lock()->getActiveScene()->setEnableTaskTiming(m_enabled);
41  viewer->getActiveRenderer()->setTimeTableVisibility(m_enabled);
42  }
43  m_prevInfoLevel = infoLevel;
44 
45  // Only update when visible
46  if (m_enabled)
47  {
48  m_t += dt;
49 
50  if (m_t > m_updateDuration) // wait 150ms before updating displayed value
51  {
52  std::shared_ptr<SceneManager> sceneManager = m_sceneManager.lock();
53  std::shared_ptr<Scene> scene = sceneManager->getActiveScene();
54  std::shared_ptr<Renderer> ren = viewer->getActiveRenderer();
55 
56  // Update the timing table
57  scene->lockComputeTimes();
58  ren->setTimeTable(scene->getTaskComputeTimes());
59  scene->unlockComputeTimes();
60  m_t = 0.0;
61  }
62  }
63 }
64 } // namespace imstk
Compound Geometry.
void visualUpdate(const double &dt)
Update the display of the last frames update times.
double m_updateDuration
seconds long to wait before updating again