From: imarom Date: Wed, 2 Mar 2016 12:37:58 +0000 (+0200) Subject: brief/deep sleep for DP cores X-Git-Url: https://gerrit.fd.io/r/gitweb?a=commitdiff_plain;h=9c62e2a6f114d99a7271e259bad2601a28cd9c4a;p=trex.git brief/deep sleep for DP cores --- diff --git a/src/stateless/dp/trex_stateless_dp_core.cpp b/src/stateless/dp/trex_stateless_dp_core.cpp index 19eface1..f8d6d828 100644 --- a/src/stateless/dp/trex_stateless_dp_core.cpp +++ b/src/stateless/dp/trex_stateless_dp_core.cpp @@ -394,12 +394,27 @@ bool TrexStatelessDpCore::set_stateless_next_node(CGenNodeStateless * cur_node, void TrexStatelessDpCore::idle_state_loop() { + const int SHORT_DELAY_MS = 2; + const int LONG_DELAY_MS = 50; + const int DEEP_SLEEP_LIMIT = 2000; + + int counter = 0; + while (m_state == STATE_IDLE) { bool had_msg = periodic_check_for_cp_messages(); - /* if no message - backoff for some time */ - if (!had_msg) { - delay(200); + if (had_msg) { + counter = 0; + continue; + } + + /* enter deep sleep only if enough time had passed */ + if (counter < DEEP_SLEEP_LIMIT) { + delay(SHORT_DELAY_MS); + counter++; + } else { + delay(LONG_DELAY_MS); } + } }