summaryrefslogtreecommitdiff
path: root/ace/High_Res_Timer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ace/High_Res_Timer.cpp')
-rw-r--r--ace/High_Res_Timer.cpp34
1 files changed, 33 insertions, 1 deletions
diff --git a/ace/High_Res_Timer.cpp b/ace/High_Res_Timer.cpp
index a7e1ab7029e..261c343f2e8 100644
--- a/ace/High_Res_Timer.cpp
+++ b/ace/High_Res_Timer.cpp
@@ -96,11 +96,22 @@ ACE_High_Res_Timer::elapsed_time (struct timespec &elapsed_time)
// Just grab the nanoseconds. That is, leave off all values above
// microsecond. This equation is right! Don't mess with me!
+ // (It first strips off everything but the portion less than 1 usec.
+ // Then it converts that to nanoseconds by dividing by the scale
+ // factor to convert to usec, and multiplying by 1000.)
// The cast avoids a MSVC 4.1 compiler warning about narrowing.
+#if defined (ACE_HAS_LONGLONG_T)
u_long nseconds = (u_long) ((this->end_ - this->start_) % global_scale_factor_ * 1000 / global_scale_factor_);
+#else
+ u_long nseconds = (u_long) ((this->end_ - this->start_).lo () % global_scale_factor_ * 1000 / global_scale_factor_);
+#endif /* ACE_HAS_LONGLONG_T */
// Get just the microseconds (dropping any left over nanoseconds).
+#if defined (ACE_HAS_LONGLONG_T)
ACE_hrtime_t useconds;
+#else
+ u_long useconds;
+#endif /* ACE_HAS_LONGLONG_T */
useconds = (this->end_ - this->start_) / global_scale_factor_;
#if ! defined(ACE_HAS_BROKEN_TIMESPEC_MEMBERS)
@@ -126,17 +137,28 @@ ACE_High_Res_Timer::elapsed_time_incr (ACE_Time_Value &tv)
// gives us microseconds. We could use floating points to get the
// nanosecond precision if some compilers didn't barf on 64-bit
// divisions with doubles. So, we just extract out the nanoseconds
-// first and then add them to the standard miscrosecond calculation.
+// first and then add them to the standard microsecond calculation.
void
ACE_High_Res_Timer::elapsed_time (ACE_hrtime_t &nanoseconds)
{
// Just grab the nanoseconds. That is, leave off all values above
// microsecond. This equation is right! Don't mess with me!
+ // (It first strips off everything but the portion less than 1 usec.
+ // Then it converts that to nanoseconds by dividing by the scale
+ // factor to convert to usec, and multiplying by 1000.)
// The cast avoids a MSVC 4.1 compiler warning about narrowing.
+#if defined (ACE_HAS_LONGLONG_T)
u_long nseconds = (u_long) ((this->end_ - this->start_) % global_scale_factor_ * 1000 / global_scale_factor_);
+#else
+ u_long nseconds = (u_long) ((this->end_ - this->start_).lo () % global_scale_factor_ * 1000 / global_scale_factor_);
+#endif /* ACE_HAS_LONGLONG_T */
// Get just the microseconds (dropping any left over nanoseconds).
+#if defined (ACE_HAS_LONGLONG_T)
ACE_hrtime_t useconds;
+#else
+ u_long useconds;
+#endif /* ACE_HAS_LONGLONG_T */
useconds = (this->end_ - this->start_) / global_scale_factor_;
// Total nanoseconds in a single 64-bit value.
@@ -155,7 +177,12 @@ ACE_High_Res_Timer::print_ave (const char *str, const int count, ACE_HANDLE hand
// Separate to seconds and nanoseconds.
ACE_hrtime_t total_secs = total_nanoseconds / 1000000000;
+#if defined (ACE_HAS_LONGLONG_T)
u_long extra_nsecs = (u_long) (total_nanoseconds % 1000000000);
+#else
+ // Ignore the hi portion of the ACE_hrtime_t.
+ u_long extra_nsecs = total_nanoseconds.lo () % 1000000000;
+#endif /* ACE_HAS_LONGLONG_T */
char buf[100];
if (count > 1)
@@ -184,7 +211,12 @@ ACE_High_Res_Timer::print_total (const char *str, const int count, ACE_HANDLE ha
// Separate to seconds and nanoseconds.
ACE_hrtime_t total_secs = total_nanoseconds / 1000000000;
+#if defined (ACE_HAS_LONGLONG_T)
u_long extra_nsecs = (u_long) (total_nanoseconds % 1000000000);
+#else
+ // Ignore the hi portion of the ACE_hrtime_t.
+ u_long extra_nsecs = total_nanoseconds.lo () % 1000000000;
+#endif /* ACE_HAS_LONGLONG_T */
char buf[100];
if (count > 1)