LCOV - code coverage report
Current view: top level - root/contrail/src/contrail-common/base - task_tbbkeepawake.h (source / functions) Hit Total Coverage
Test: OpenSDN C/C++ coverage (all TARGET_SET jobs) Lines: 0 25 0.0 %
Date: 2026-08-03 02:19:58 Functions: 0 5 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : #include <mutex>
       2             : 
       3             : #include "base/task.h"
       4             : #include "base/timer.h"
       5             : #include <boost/bind/bind.hpp>
       6             : #include "io/event_manager.h"
       7             : 
       8             : using namespace boost::placeholders;
       9             : 
      10             : class TaskTbbKeepAwake {
      11             : public:
      12           0 :     TaskTbbKeepAwake() : tbb_awake_count_(0), tbb_awake_val_(0),
      13           0 :                          timeout_changed_(false), tbb_awake_timer_(NULL) { }
      14             : 
      15           0 :     bool StartTbbKeepAwakeTask(TaskScheduler *ts, EventManager *event_mgr,
      16             :                                const std::string task_name,
      17             :                                uint32_t tbbKeepawakeTimeout = 1000) {
      18           0 :         uint32_t task_id = ts->GetTaskId(task_name);
      19           0 :         tbb_awake_timer_ = TimerManager::CreateTimer(*event_mgr->io_service(),
      20             :                                                      "TBB Keep Awake",
      21             :                                                      task_id, 0);
      22           0 :         tbb_awake_val_ = tbbKeepawakeTimeout;
      23           0 :         bool ret = tbb_awake_timer_->Start(tbbKeepawakeTimeout,
      24             :                        boost::bind(&TaskTbbKeepAwake::TbbKeepAwake, this));
      25           0 :         return ret;
      26             :     }
      27             : 
      28           0 :     void ModifyTbbKeepAwakeTimeout(uint32_t timeout) {
      29           0 :         std::scoped_lock lock(mutex_);
      30           0 :         if (tbb_awake_val_ != timeout) {
      31           0 :             timeout_changed_ = true;
      32           0 :             tbb_awake_val_ = timeout;
      33             :         }
      34           0 :     }
      35             : 
      36           0 :     bool TbbKeepAwake() {
      37           0 :         tbb_awake_count_++;
      38           0 :         if (timeout_changed_) {
      39           0 :             tbb_awake_timer_->Reschedule(tbb_awake_val_);
      40           0 :             timeout_changed_ = false;
      41             :         }
      42           0 :         return true;
      43             :     }
      44             : 
      45           0 :     void ShutTbbKeepAwakeTask() {
      46           0 :         if (tbb_awake_timer_) {
      47           0 :             tbb_awake_timer_->Cancel();
      48           0 :             TimerManager::DeleteTimer(tbb_awake_timer_);
      49             :         }
      50           0 :     }
      51             : 
      52             :     uint32_t tbb_awake_val() const { return tbb_awake_val_; }
      53             : private:
      54             :     uint64_t tbb_awake_count_;
      55             :     uint32_t tbb_awake_val_;
      56             :     bool timeout_changed_;
      57             :     Timer *tbb_awake_timer_;
      58             :     std::mutex mutex_;
      59             : };

Generated by: LCOV version 1.14