Changeset 1979
- Timestamp:
- 04/16/08 21:17:25 (7 months ago)
- Location:
- features/performance/src
- Files:
-
- 2 modified
-
common/timer.h (modified) (2 diffs)
-
send_packets.c (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
features/performance/src/common/timer.h
r1977 r1979 191 191 } while(0) 192 192 193 #ifdef HAVE_ABSOLUTE_TIME 194 typedef AbsoluteTime delta_t; 195 #else 196 typedef struct timeval delta_t; 197 #endif 198 199 /* 200 * starts a timer so we can figure out how much time has passed 201 * when we call get_delta_timer() 202 */ 203 static inline void 204 start_delta_time(delta_t *ctx) 205 { 206 #ifdef HAVE_ABSOLUTE_TIME 207 *ctx = UpTime(); 208 #else 209 gettimeofday(ctx, NULL) 210 #endif 211 } 193 212 194 213 /* 195 214 * returns the amount of time that has passed since the 196 * last time you called this function.215 * last time you called start_delta_time() 197 216 */ 198 217 static inline void 199 get_delta_time( struct timespec *ret)218 get_delta_time(delta_t *ctx, struct timespec *ret) 200 219 { 201 220 /* OS X has absolute time */ 202 221 #ifdef HAVE_ABSOLUTE_TIME 203 static AbsoluteTime last = {0, 0};204 222 AbsoluteTime now, delta; 205 223 Nanoseconds nano; … … 207 225 now = UpTime(); 208 226 209 if (! NonZero( last)) {227 if (! NonZero(*ctx)) { 210 228 timesclear(ret); 211 229 } else { 212 delta = SubAbsoluteFromAbsolute(now, last);230 delta = SubAbsoluteFromAbsolute(now, *ctx); 213 231 nano = AbsoluteToNanoseconds(delta); 214 232 NANOSEC_TO_TIMESPEC(UnsignedWideToUInt64(nano) / 10, ret); 215 233 } 216 217 CopyAbsolute(last, now);218 234 219 235 /* Everyone else just uses gettimeofday */ 220 236 #else 221 static struct timeval last = {0, 0};222 237 struct timeval now, delta; 223 238 224 239 gettimeofday(&now, NULL); 225 if (!timerisset(&last)) { 240 241 if (!timerisset(last)) { 226 242 timesclear(ret); 227 243 } else { 228 timersub(&now, &last, &delta);244 timersub(&now, last, &delta); 229 245 TIMEVAL_TO_TIMESPEC(&delta, ret); 230 246 } 231 last.tv_sec = now.tv_sec;232 last.tv_usec = now.tv_usec;233 247 #endif 234 248 } -
features/performance/src/send_packets.c
r1974 r1979 72 72 73 73 static void do_sleep(struct timeval *time, struct timeval *last, int len, 74 int accurate, sendpacket_t *sp, COUNTER counter );74 int accurate, sendpacket_t *sp, COUNTER counter, delta_t *ctx); 75 75 static const u_char *get_next_packet(pcap_t *pcap, struct pcap_pkthdr *pkthdr, 76 76 int file_idx, packet_cache_t **prev_packet); … … 96 96 struct pcap_pkthdr *pkthdr_ptr; 97 97 #endif 98 98 delta_t delta_ctx; 99 99 100 /* register signals */ 100 101 didsig = 0; … … 168 169 */ 169 170 if (options.speed.mode != SPEED_TOPSPEED) 170 do_sleep((struct timeval *)&pkthdr.ts, &last, pktlen, options.accurate, sp, packetnum); 171 171 do_sleep((struct timeval *)&pkthdr.ts, &last, pktlen, options.accurate, sp, packetnum, &delta_ctx); 172 173 start_delta_time(&delta_ctx); 172 174 /* write packet out on network */ 173 175 if (sendpacket(sp, pktdata, pktlen) < (int)pktlen) … … 321 323 static void 322 324 do_sleep(struct timeval *time, struct timeval *last, int len, int accurate, 323 sendpacket_t *sp, COUNTER counter )325 sendpacket_t *sp, COUNTER counter, delta_t *delta_ctx) 324 326 { 325 327 static struct timeval didsleep = { 0, 0 }; … … 340 342 #ifdef TCPREPLAY 341 343 adjuster.tv_nsec = OPT_VALUE_SLEEP_ACCEL * 1000; 344 dbgx(2, "Adjuster: " TIMEVAL_FORMAT, adjuster.tv_sec, adjuster.tv_nsec); 342 345 #else 343 adjuster.tv_nsec = ADJUSTER_OFFSET * 1000; 344 #endif 345 346 dbgx(2, "Adjuster: " TIMEVAL_FORMAT, adjuster.tv_sec, adjuster.tv_nsec); 346 adjuster.tv_nsec = 0; 347 #endif 347 348 348 349 /* acclerator time? */ … … 486 487 487 488 488 get_delta_time( &delta_time);489 get_delta_time(delta_ctx, &delta_time); 489 490 dbgx(2, "delta: " TIMESPEC_FORMAT, delta_time.tv_sec, delta_time.tv_nsec); 490 491 … … 577 578 #endif 578 579 579 get_delta_time(&delta_time);580 580 dbgx(2, "sleep delta: " TIMESPEC_FORMAT, delta_time.tv_sec, delta_time.tv_nsec); 581 581
