summaryrefslogtreecommitdiffhomepage
path: root/logic
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2017-04-12 01:47:18 +0200
committerStanislaw Halik <sthalik@misaki.pl>2017-04-12 01:50:01 +0200
commit8364abad02ad0435168fbb0c7d8e0baae1c02ba3 (patch)
treef93ba2647d0919205784541849dbd8e78fcb8ace /logic
parent4e3f3d81e391b67f4a793de4ac2ca8916e8cf93e (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.txt2
-rw-r--r--logic/tracker.cpp39
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);