222
222
EXPECT_FALSE(mt::fd_is_readable(receiver.watch_fd()));
225
TEST_F(AndroidInputReceiverSetup, no_artificial_latency_in_resampling)
227
using namespace testing;
228
using namespace std::chrono;
229
using namespace std::literals::chrono_literals;
233
bool handler_called{false};
235
mircva::InputReceiver receiver{
237
std::make_shared<mircv::XKBMapper>(),
238
[&ev, &handler_called](MirEvent* event)
241
handler_called = true;
243
std::make_shared<mircv::NullInputReceiverReport>(),
249
TestingInputProducer producer(server_fd);
251
producer.produce_a_pointer_event(123, 456, t);
254
while (!mt::fd_becomes_readable(receiver.watch_fd(), 1ms) && t < 100ms)
257
receiver.dispatch(md::FdEvent::readable);
258
EXPECT_TRUE(handler_called);
259
ASSERT_EQ(mir_event_type_motion, ev.type);
261
auto const resample_latency_ms =
262
duration_cast<std::chrono::milliseconds>(t);
264
// Check that we're not using the Android-default RESAMPLE_LATENCY of 5ms
265
// which is too high...
266
// Use plain integers so any failures are readable:
267
EXPECT_THAT(resample_latency_ms.count(), Lt(1));
270
225
TEST_F(AndroidInputReceiverSetup, slow_raw_input_doesnt_cause_frameskipping)
271
226
{ // Regression test for LP: #1372300
272
227
using namespace testing;
304
259
EXPECT_TRUE(handler_called);
305
260
ASSERT_EQ(mir_event_type_key, ev.type);
262
// The motion is still too new. Won't be reported yet, but is batched.
307
263
auto start = high_resolution_clock::now();
309
265
EXPECT_TRUE(mt::fd_becomes_readable(receiver.watch_fd(), 1ms));
310
266
handler_called = false;
311
267
receiver.dispatch(md::FdEvent::readable);
268
// We've processed the data, but no new event has been generated.
269
EXPECT_FALSE(handler_called);
313
271
auto end = high_resolution_clock::now();
314
272
auto duration = end - start;
323
281
// But later in a frame or so, the motion will be reported:
324
282
t += 2 * one_frame; // Account for the slower 59Hz event rate
325
EXPECT_TRUE(handler_called || mt::fd_becomes_readable(receiver.watch_fd(), next_event_timeout));
283
EXPECT_TRUE(mt::fd_becomes_readable(receiver.watch_fd(), next_event_timeout));
326
284
receiver.dispatch(md::FdEvent::readable);
328
286
EXPECT_TRUE(handler_called);