https://www.mediawiki.org/wiki/Special:Code/MediaWiki/101948

Revision: 101948
Author:   tstarling
Date:     2011-11-04 02:43:42 +0000 (Fri, 04 Nov 2011)
Log Message:
-----------
Added a test program which can read from a pipe at a precisely controlled rate, 
up to about 1 GB/s. 

Modified Paths:
--------------
    trunk/udplog/Makefile
    trunk/udplog/srclib/PosixClock.h

Added Paths:
-----------
    trunk/udplog/srcmisc/slowread.cpp

Modified: trunk/udplog/Makefile
===================================================================
--- trunk/udplog/Makefile       2011-11-04 02:10:45 UTC (rev 101947)
+++ trunk/udplog/Makefile       2011-11-04 02:43:42 UTC (rev 101948)
@@ -1,8 +1,9 @@
-TARGETS = log2udp udprecv delta udp2log/udp2log packet-loss
+TARGETS = log2udp udprecv delta udp2log/udp2log packet-loss slowread
 SRCLIB_OBJS = srclib/HostEntry.o srclib/FileDescriptor.o srclib/IPAddress.o 
srclib/Socket.o srclib/SocketAddress.o srclib/PosixClock.o
 HOST_OBJS = srcmisc/host.o $(SRCLIB_OBJS)
 LOG2UDP_OBJS = srcmisc/log2udp.o $(SRCLIB_OBJS)
 UDPRECV_OBJS = srcmisc/udprecv.o $(SRCLIB_OBJS)
+SLOWREAD_OBJS = srcmisc/slowread.o $(SRCLIB_OBJS)
 UDP2LOG_OBJS = udp2log/udp2log.o udp2log/LogProcessor.o 
udp2log/Udp2LogConfig.o $(SRCLIB_OBJS)
 CFLAGS:=$(CFLAGS) -Wall
 
@@ -29,6 +30,9 @@
 packet-loss: srcmisc/packet-loss.cpp
        g++ $(CFLAGS) -o packet-loss srcmisc/packet-loss.cpp
 
+slowread: $(SLOWREAD_OBJS)
+       g++ $(CFLAGS) $(SLOWREAD_OBJS) -lrt -o slowread
+
 udp2log/udp2log: $(UDP2LOG_OBJS)
        g++ $(CFLAGS) -o udp2log/udp2log $(UDP2LOG_OBJS) 
-lboost_program_options -lrt
 

Modified: trunk/udplog/srclib/PosixClock.h
===================================================================
--- trunk/udplog/srclib/PosixClock.h    2011-11-04 02:10:45 UTC (rev 101947)
+++ trunk/udplog/srclib/PosixClock.h    2011-11-04 02:43:42 UTC (rev 101948)
@@ -87,6 +87,13 @@
                return res;
        }
 
+       Time NanoSleep(int flags, const Time & request) {
+               Time remain;
+               if (clock_nanosleep(id, flags, &request.data, &remain.data) == 
-1) {
+                       throw libc_error("PosixClock::NanoSleep");
+               }
+               return remain;
+       }
 protected:
        clockid_t id;
        Time res;

Added: trunk/udplog/srcmisc/slowread.cpp
===================================================================
--- trunk/udplog/srcmisc/slowread.cpp                           (rev 0)
+++ trunk/udplog/srcmisc/slowread.cpp   2011-11-04 02:43:42 UTC (rev 101948)
@@ -0,0 +1,33 @@
+#include "../srclib/PosixClock.h"
+#include <stdlib.h>
+#include <unistd.h>
+
+int main(int argc, char** argv) {
+       long long rate = 1e6; // bytes per second
+
+       if (argc > 1) {
+               rate = atoll(argv[1]);
+       }
+       
+       const int bufSize = 32768;
+       char buffer[bufSize];
+       ssize_t bytesRead;
+
+       PosixClock clock(CLOCK_REALTIME);
+       PosixClock::Time t = clock.Get();
+       PosixClock::Time currentTime;
+       PosixClock::Time maxDrift(0.001);
+       for (;;) {
+               bytesRead = read(STDIN_FILENO, buffer, bufSize);
+               if (bytesRead <= 0) {
+                       return 0;
+               }
+               currentTime = clock.Get();
+               if (currentTime - t > maxDrift) {
+                       t = currentTime;
+               }
+               t += PosixClock::Time((double)bytesRead / rate);
+               clock.NanoSleep(TIMER_ABSTIME, t);
+       }
+}
+


Property changes on: trunk/udplog/srcmisc/slowread.cpp
___________________________________________________________________
Added: svn:eol-style
   + native


_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to