PageRenderTime 36ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 0ms

/oneshot_timer_tests/src/IdleOneShotLatencyMeasurer.cpp

https://gitlab.com/F34140r/ros_realtime_tests
C++ | 49 lines | 36 code | 6 blank | 7 comment | 1 complexity | ec419a8253184df15fdba8a0063536ab MD5 | raw file
Possible License(s): BSD-3-Clause, GPL-2.0
  1. /**
  2. * Copyright (C) 2014, BMW Car IT GmbH
  3. * Author: Jonas Sticha (Jonas.Sticha@bmw-carit.de)
  4. *
  5. * This software is licensed under BSD 3-clause License
  6. * (see http://spdx.org/licenses/BSD-3-Clause).
  7. **/
  8. #include "ros/ros.h"
  9. #include "IdleOneShotLatencyMeasurer.h"
  10. #include <time.h>
  11. #include <pthread.h>
  12. #define SEC_TO_NANOSEC_MULTIPLIER 1000000000
  13. void* doRosSpin(void*)
  14. {
  15. ros::spin();
  16. }
  17. IdleOneShotLatencyMeasurer::IdleOneShotLatencyMeasurer() : OneShotLatencyMeasurer()
  18. {
  19. pthread_t thread;
  20. pthread_create(&thread, NULL, &doRosSpin, NULL);
  21. }
  22. bool IdleOneShotLatencyMeasurer::blockUntilCallbackCalled()
  23. {
  24. callbackCalled = false;
  25. struct timespec sleep;
  26. long long timeoutTemp = timeoutNanoseconds * 1.2;
  27. sleep.tv_sec = (int) timeoutTemp/SEC_TO_NANOSEC_MULTIPLIER;
  28. sleep.tv_nsec = timeoutTemp - (sleep.tv_sec * SEC_TO_NANOSEC_MULTIPLIER);
  29. int i = 0;
  30. while(!callbackCalled)
  31. {
  32. nanosleep((const struct timespec*) &sleep, NULL);
  33. i++;
  34. if(i>300)
  35. {
  36. return false;
  37. }
  38. }
  39. return true;
  40. }
  41. IdleOneShotLatencyMeasurer::~IdleOneShotLatencyMeasurer()
  42. {
  43. }