clock_skew_minimization_object.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #ifndef __CLOCK_SKEW_MINIMIZATION_OBJECT_H__
  2. #define __CLOCK_SKEW_MINIMIZATION_OBJECT_H__
  3. #include "fixed_types.h"
  4. #include "subsecond_time.h"
  5. #include "log.h"
  6. class Core;
  7. class ClockSkewMinimizationObject
  8. {
  9. public:
  10. enum Scheme
  11. {
  12. NONE = 0,
  13. BARRIER,
  14. NUM_SCHEMES
  15. };
  16. static Scheme parseScheme(String scheme);
  17. };
  18. class ClockSkewMinimizationClient : public ClockSkewMinimizationObject
  19. {
  20. protected:
  21. ClockSkewMinimizationClient() {}
  22. public:
  23. virtual ~ClockSkewMinimizationClient() {}
  24. static ClockSkewMinimizationClient* create(Core* core);
  25. virtual void enable() = 0;
  26. virtual void disable() = 0;
  27. virtual void synchronize(SubsecondTime time = SubsecondTime::Zero(), bool ignore_time = false, bool abort_func(void*) = NULL, void* abort_arg = NULL) = 0;
  28. };
  29. class ClockSkewMinimizationManager : public ClockSkewMinimizationObject
  30. {
  31. protected:
  32. ClockSkewMinimizationManager() {}
  33. public:
  34. virtual ~ClockSkewMinimizationManager() {}
  35. static ClockSkewMinimizationManager* create();
  36. virtual void processSyncMsg(Byte* msg) = 0;
  37. };
  38. class ClockSkewMinimizationServer : public ClockSkewMinimizationObject
  39. {
  40. protected:
  41. ClockSkewMinimizationServer() {}
  42. public:
  43. virtual ~ClockSkewMinimizationServer() {}
  44. static ClockSkewMinimizationServer* create();
  45. virtual void synchronize(thread_id_t thread_id, SubsecondTime time) = 0;
  46. virtual void release() = 0;
  47. virtual void advance() = 0;
  48. virtual void setDisable(bool disable) { }
  49. virtual void setGroup(core_id_t core_id, core_id_t master_core_id) = 0;
  50. virtual void setFastForward(bool fastforward, SubsecondTime next_barrier_time = SubsecondTime::MaxTime()) = 0;
  51. virtual SubsecondTime getGlobalTime(bool upper_bound = false);
  52. virtual void setBarrierInterval(SubsecondTime barrier_interval) = 0;
  53. virtual SubsecondTime getBarrierInterval() const = 0;
  54. virtual void printState(void) {}
  55. };
  56. #endif /* __CLOCK_SKEW_MINIMIZATION_OBJECT_H__ */