summaryrefslogtreecommitdiff
path: root/test/media_device
AgeCommit message (Expand)Author
2021-11-24test: Convert to pragma onceKieran Bingham
2021-10-15test: Remove using namespace in header filesHirokazu Honda
2021-08-09libcamera: Rename 'method' to 'function'Laurent Pinchart
2021-06-25libcamera/base: Validate internal headers as privateKieran Bingham
2020-10-23libcamera: Drop unneeded empty default constructors and destructorsLaurent Pinchart
2020-10-20test: Omit extra semicolonsHirokazu Honda
2020-05-16libcamera: Move internal headers to include/libcamera/internal/Laurent Pinchart
2020-05-13licenses: License all meson files under CC0-1.0Laurent Pinchart
2019-11-18libcamera: Remove space between empty curly bracketsLaurent Pinchart
2019-10-23libcamera: Standardise on C compatibility headersLaurent Pinchart
2019-05-23meson: Create and use a dependency for libcamera and its headersLaurent Pinchart
2019-05-23meson: Fix coding style in meson.build filesLaurent Pinchart
2019-05-17test: media_device: Add test for acquire() and release()Niklas Söderlund
2019-05-17test: media_device: Create a common MediaDeviceTest base classNiklas Söderlund
2019-05-17libcamera: media_device: Handle media device fd in acquire() and release()Niklas Söderlund
2019-05-17libcamera: media_device: Open and close media device inside populate()Niklas Söderlund
2019-05-17libcamera: Always check return value of MediaDevice::acquire()Niklas Söderlund
2019-01-24libcamera: device_enumerator: Reference-count MediaDevice instancesLaurent Pinchart
2019-01-22libcamera: Global s/devnode/deviceNode renameJacopo Mondi
2019-01-14test: media_device: Add link handling testJacopo Mondi
2019-01-14test: media_device: Make MediaDeviceTest a MediaDevicePrintTestJacopo Mondi
2019-01-14test: media_device: Convert to foreachKieran Bingham
2019-01-02test: media_device: Move test definitionKieran Bingham
2019-01-01test: Move test objects to libtestKieran Bingham
2018-12-31test: Add media device testJacopo Mondi
class="hl opt">(), count_(0) { timeout.connect(this, &ManagedTimer::timeoutHandler); } void start(int msec) { count_ = 0; start_ = std::chrono::steady_clock::now(); expiration_ = std::chrono::steady_clock::time_point(); Timer::start(msec); } void start(std::chrono::steady_clock::time_point deadline) { count_ = 0; start_ = std::chrono::steady_clock::now(); expiration_ = std::chrono::steady_clock::time_point(); Timer::start(deadline); } int jitter() { std::chrono::steady_clock::duration duration = expiration_ - deadline(); return abs(std::chrono::duration_cast<std::chrono::milliseconds>(duration).count()); } bool hasFailed() { return isRunning() || count_ != 1 || jitter() > 50; } private: void timeoutHandler(Timer *timer) { expiration_ = std::chrono::steady_clock::now(); count_++; } unsigned int count_; std::chrono::steady_clock::time_point start_; std::chrono::steady_clock::time_point expiration_; }; class TimerTest : public Test { protected: int init() { return 0; } int run() { EventDispatcher *dispatcher = Thread::current()->eventDispatcher(); ManagedTimer timer; ManagedTimer timer2; /* Timer expiration. */ timer.start(1000); if (!timer.isRunning()) { cout << "Timer expiration test failed" << endl; return TestFail; } dispatcher->processEvents(); if (timer.hasFailed()) { cout << "Timer expiration test failed" << endl; return TestFail; } /* * 32 bit wrap test * Nanosecond resolution in a 32 bit value wraps at 4.294967 * seconds (0xFFFFFFFF / 1000000) */ timer.start(4295); dispatcher->processEvents(); if (timer.hasFailed()) { cout << "Timer expiration test failed" << endl; return TestFail; } /* Timer restart. */ timer.start(500); if (!timer.isRunning()) { cout << "Timer restart test failed" << endl; return TestFail; } dispatcher->processEvents(); if (timer.hasFailed()) { cout << "Timer restart test failed" << endl; return TestFail; } /* Timer restart before expiration. */ timer.start(50); timer.start(100); timer.start(150); dispatcher->processEvents(); if (timer.hasFailed()) { cout << "Timer restart before expiration test failed" << endl; return TestFail; } /* Timer with absolute deadline. */ timer.start(std::chrono::steady_clock::now() + std::chrono::milliseconds(200)); dispatcher->processEvents(); if (timer.hasFailed()) { cout << "Absolute deadline test failed" << endl; return TestFail; } /* Two timers. */ timer.start(1000); timer2.start(300); dispatcher->processEvents(); if (!timer.isRunning()) { cout << "Two timers test failed" << endl; return TestFail; } if (timer2.jitter() > 50) { cout << "Two timers test failed" << endl; return TestFail; } dispatcher->processEvents(); if (timer.jitter() > 50) { cout << "Two timers test failed" << endl; return TestFail; } /* Restart timer before expiration. */ timer.start(1000); timer2.start(300); dispatcher->processEvents(); if (timer2.jitter() > 50) { cout << "Two timers test failed" << endl; return TestFail; } timer.start(1000); dispatcher->processEvents(); if (timer.jitter() > 50) { cout << "Two timers test failed" << endl; return TestFail; } /* * Test that dynamically allocated timers are stopped when * deleted. This will result in a crash on failure. */ ManagedTimer *dyntimer = new ManagedTimer(); dyntimer->start(100); delete dyntimer; timer.start(200); dispatcher->processEvents(); return TestPass; } void cleanup() { } }; TEST_REGISTER(TimerTest)