| 169 | } |
| 170 | |
| 171 | void poller_wait_until(const std::function<bool(void)> &f, |
| 172 | std::chrono::milliseconds ms) { |
| 173 | using namespace std::chrono_literals; |
| 174 | using milliseconds = std::chrono::milliseconds; |
| 175 | |
| 176 | auto pending = ms; |
| 177 | auto start = std::chrono::system_clock::now(); |
| 178 | auto start0 = start; |
| 179 | bool fret = f(); |
| 180 | std::chrono::milliseconds one_ms(1); |
| 181 | |
| 182 | while (pending > 0s && !fret) { |
| 183 | DEBUG("WAIT {}ms or F", pending.count()); |
| 184 | rtpmidid::poller.wait(std::max(pending / 4, one_ms)); |
| 185 | auto now = std::chrono::system_clock::now(); |
| 186 | auto elapsed = std::chrono::duration_cast<milliseconds>(now - start); |
| 187 | start = now; |
| 188 | pending -= elapsed; |
| 189 | fret = f(); |
| 190 | }; |
| 191 | auto now = std::chrono::system_clock::now(); |
| 192 | auto elapsed = std::chrono::duration_cast<milliseconds>(now - start0); |
| 193 | DEBUG("Done in {}ms", elapsed.count()); |
| 194 | if (elapsed > ms) { |
| 195 | ERROR("TEST TIMEOUT"); |
| 196 | } |
| 197 | } |
no test coverage detected