From 94744b5a2d5da4f4646277b86cf66d7ba607ac51 Mon Sep 17 00:00:00 2001
From: joanvallve <jvallve@iri.upc.edu>
Date: Mon, 16 Nov 2020 16:14:22 +0100
Subject: [PATCH] working with corresponding branch in core

---
 src/node.cpp | 65 ++++++++++++++++++++++++++++++----------------------
 1 file changed, 37 insertions(+), 28 deletions(-)

diff --git a/src/node.cpp b/src/node.cpp
index b39bfa8..8d3946d 100644
--- a/src/node.cpp
+++ b/src/node.cpp
@@ -241,8 +241,8 @@ int main(int argc, char **argv)
     pthread_setschedparam(solver_thread.native_handle(), SCHED_FIFO, &Priority_Param);*/
 
     // Profiling
-    double duration_viz(0), duration_solver(0);
-    unsigned int n_viz(0), n_solver(0);
+    std::chrono::microseconds duration_viz(0);
+    unsigned int n_viz(0);
 
     while (ros::ok())
     {
@@ -282,41 +282,50 @@ int main(int argc, char **argv)
         loopRate.sleep();
     }
     WOLF_DEBUG("Node is shutting down outside loop... waiting for the thread to stop...");
-    solver_thread.join();
+    //solver_thread.join();
     WOLF_DEBUG("thread stopped.");
 
     // Profiling
-    ofstream profiling_file;
-    profiling_file.open ("~/wolf_profiling.txt");
-    profiling_file << "WOLF PROFILING:\n";
-    profiling_file << "\n\nSOLVER:"
-                   << "\n\ttotal time:"             << wolf_node.solver_.duration_manager_ + wolf_node.solver_.duration_solver_ << " s"
-                   << "\n\tmanager time:"           << wolf_node.solver_.duration_manager_ << " s"
-                   << "\n\tsolver time:"            << wolf_node.solver_.duration_solver_ << " s"
-                   << "\n\texecutions:"             << wolf_node.solver_.n_solve_
-                   << "\n\taverage time:"           << (wolf_node.solver_.duration_manager_ + wolf_node.solver_.duration_solver_) / wolf_node.solver_.n_solve_ << " s"
-                   << "\n\taverage manager time:"   << wolf_node.solver_.duration_manager_ / wolf_node.solver_.n_solve_ << " s"
-                   << "\n\taverage solver time:"    << wolf_node.solver_.duration_solver_ / wolf_node.solver_.n_solve_ << " s" << std::endl;
-    profiling_file << "\n\nVISUALIZATION:"
-                   << "\n\ttotal time:" << duration_viz << " s"
-                   << "\n\texecutions:" << n_viz
-                   << "\n\taverage time:" << duration_viz/n_viz << std::endl;
+    std::stringstream profiling_str;
+    profiling_str << "========== WOLF PROFILING ==========\n";
+
+    profiling_str <<"\nSOLVER:"
+                  << "\n\ttotal time:           " << 1e-9*(wolf_node.solver_->duration_manager_ + wolf_node.solver_->duration_solver_).count() << " s"
+                  << "\n\tmanager time:         " << 1e-9*wolf_node.solver_->duration_manager_.count() << " s"
+                  << "\n\tsolver time:          " << 1e-9*wolf_node.solver_->duration_solver_.count() << " s"
+                  << "\n\texecutions:           " << wolf_node.solver_->n_solve_
+                  << "\n\taverage time:         " << 1e-9*(wolf_node.solver_->duration_manager_ + wolf_node.solver_->duration_solver_).count() / wolf_node.solver_->n_solve_ << " s"
+                  << "\n\taverage manager time: " << 1e-9*wolf_node.solver_->duration_manager_.count() / wolf_node.solver_->n_solve_ << " s"
+                  << "\n\taverage solver time:  " << 1e-9*wolf_node.solver_->duration_solver_.count() / wolf_node.solver_->n_solve_ << " s" << std::endl;
+
+    profiling_str << "\n\nVISUALIZATION:"
+                  << "\n\ttotal time:   " << 1e-9*duration_viz.count() << " s"
+                  << "\n\texecutions:   " << n_viz
+                  << "\n\taverage time: " << 1e-9*duration_viz.count()/n_viz << std::endl;
+
     for (auto sensor : wolf_node.problem_ptr_->getHardware()->getSensorList())
         for (auto proc : sensor->getProcessorList())
         {
-            profiling_file << "\n\nPROCESSOR "                      << proc->getName() << ":"
-                           << "\n\ttotal time:"                     << wolf_node.solver_.duration_manager_ + wolf_node.solver_.duration_solver_ << " s"
-                           << "\n\tproc. captures time:"            << wolf_node.solver_.duration_manager_ << " s"
-                           << "\n\tproc. frames time:"              << wolf_node.solver_.duration_solver_ << " s"
-                           << "\n\texecutions:"                     << wolf_node.solver_.n_solve_
-                           << "\n\taverage time:"                   << (wolf_node.solver_.duration_manager_ + wolf_node.solver_.duration_solver_) / wolf_node.solver_.n_solve_ << " s"
-                           << "\n\taverage proc. captures time:"    << wolf_node.solver_.duration_manager_ / wolf_node.solver_.n_solve_ << " s"
-                           << "\n\taverage proc. frames time:"      << wolf_node.solver_.duration_solver_ / wolf_node.solver_.n_solve_ << " s" << std::endl;
+            profiling_str << "\n\nPROCESSOR "             << proc->getName() << ":"
+                          << "\n\ttotal time:           " << 1e-9*(proc->duration_capture_ + proc->duration_kf_).count()<< " s"
+                          << "\n\tProcessing captures:"
+                          << "\n\t\ttotal time:         " << 1e-9*proc->duration_capture_.count() << " s"
+                          << "\n\t\tcaptures processed: " << proc->n_capture_callback_
+                          << "\n\t\taverage time:       " << 1e-9*proc->duration_capture_.count() / proc->n_capture_callback_ << " s"
+                          << "\n\tProcessing keyframes:"
+                          << "\n\t\ttotal time:         " << 1e-9*proc->duration_kf_.count() << " s"
+                          << "\n\t\tkf processed:       " << proc->n_kf_callback_
+                          << "\n\t\taverage time:       " << 1e-9*proc->duration_kf_.count() / proc->n_kf_callback_ << " s" << std::endl;
         }
 
+    std::cout << profiling_str.str();
+
+    ofstream profiling_file;
+    profiling_file.open (std::string(std::getenv("HOME")) + "/wolf_profiling.txt");
+    if (not profiling_file.is_open())
+        ROS_ERROR("Error in opening file to store profiling!");
+    profiling_file << profiling_str.str();
     profiling_file.close();
-      return 0;
 
-    // file.close();
     return 0;
 }
-- 
GitLab