diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2017-04-12 01:47:18 +0200 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2017-04-12 01:50:01 +0200 |
commit | 8364abad02ad0435168fbb0c7d8e0baae1c02ba3 (patch) | |
tree | f93ba2647d0919205784541849dbd8e78fcb8ace /logic | |
parent | 4e3f3d81e391b67f4a793de4ac2ca8916e8cf93e (diff) |
logic/tracker: no need for timeBeginPeriod
There's jitter of up to 3 ms. Increasing timer resolution
pessimizes overall performance. For Falcon BMS it costs about a
dozen frames.
Diffstat (limited to 'logic')
-rw-r--r-- | logic/CMakeLists.txt | 2 | ||||
-rw-r--r-- | logic/tracker.cpp | 39 |
2 files changed, 13 insertions, 28 deletions
diff --git a/logic/CMakeLists.txt b/logic/CMakeLists.txt index f3f128af..177dd045 100644 --- a/logic/CMakeLists.txt +++ b/logic/CMakeLists.txt @@ -3,5 +3,5 @@ target_link_libraries(opentrack-logic opentrack-spline) if(NOT WIN32) target_link_libraries(opentrack-logic opentrack-qxt-mini) else() - target_link_libraries(opentrack-logic opentrack-dinput winmm) + target_link_libraries(opentrack-logic opentrack-dinput) endif() diff --git a/logic/tracker.cpp b/logic/tracker.cpp index 4eba230c..95f7b38f 100644 --- a/logic/tracker.cpp +++ b/logic/tracker.cpp @@ -21,10 +21,6 @@ #include <algorithm> #include <cstdio> -#if defined(_WIN32) -# include <windows.h> -#endif - using namespace euler; using namespace gui_tracker_impl; @@ -269,7 +265,11 @@ void Tracker::logic() logger.write_pose(value); // "filtered" } + } + + nanp |= is_nan(value); + { euler_t neck, rel; if (s.neck_enable) @@ -335,10 +335,6 @@ void Tracker::logic() for (int i = 0; i < 3; i++) value(i) = map(value(i), m(i)); - nanp |= is_nan(value); - - logger.write_pose(value); // "mapped" - if (nanp) { QMutexLocker foo(&mtx); @@ -362,16 +358,14 @@ void Tracker::logic() output_pose = value; raw_6dof = raw; + logger.write_pose(value); // "mapped" + logger.reset_dt(); logger.next_line(); } void Tracker::run() { -#if defined(_WIN32) - (void) timeBeginPeriod(1); -#endif - setPriority(QThread::HighPriority); { @@ -390,9 +384,10 @@ void Tracker::run() logger.next_line(); } - t.start(); logger.reset_dt(); + t.start(); + while (!get(f_should_quit)) { Pose tmp; @@ -405,26 +400,20 @@ void Tracker::run() logic(); static constexpr long const_sleep_us = 4000; - - using std::max; - using std::min; - const long elapsed_usecs = t.elapsed_usecs(); + t.start(); backlog_time += elapsed_usecs - const_sleep_us; - if (std::fabs(backlog_time) > 10000l * 1000) + if (std::fabs(backlog_time) > 3000 * 1000) { qDebug() << "tracker: backlog interval overflow" << backlog_time; backlog_time = 0; } - const unsigned sleep_time = unsigned(std::round(clamp((const_sleep_us - backlog_time)/1000., 0., const_sleep_us*3/1000.))); + const unsigned sleep_time = unsigned(std::round(clamp((const_sleep_us - backlog_time)/1000., 0, const_sleep_us*2.5/1000))); - t.start(); - - if (sleep_time > 0) - portable::sleep(sleep_time); + portable::sleep(sleep_time); } { @@ -433,10 +422,6 @@ void Tracker::run() libs.pProtocol->pose(p); } -#if defined(_WIN32) - (void) timeEndPeriod(1); -#endif - for (int i = 0; i < 6; i++) { m(i).spline_main.set_tracking_active(false); |