From 9c62e2a6f114d99a7271e259bad2601a28cd9c4a Mon Sep 17 00:00:00 2001 From: imarom Date: Wed, 2 Mar 2016 14:37:58 +0200 Subject: brief/deep sleep for DP cores --- src/stateless/dp/trex_stateless_dp_core.cpp | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'src/stateless/dp/trex_stateless_dp_core.cpp') 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); } + } } -- cgit 1.2.3-korg