Add -s <seconds> parameter to capture.cpp

This commit is contained in:
Graydon Hoare 2021-08-25 22:22:58 -07:00
parent dfb4020a92
commit 26fd867e52
No known key found for this signature in database
GPG Key ID: 69824B014EE65219
2 changed files with 17 additions and 3 deletions

View File

@ -34,7 +34,7 @@ void SigInt( int )
[[noreturn]] void Usage() [[noreturn]] void Usage()
{ {
printf( "Usage: capture -o output.tracy [-a address] [-p port] [-f]\n" ); printf( "Usage: capture -o output.tracy [-a address] [-p port] [-f] [-s seconds]\n" );
exit( 1 ); exit( 1 );
} }
@ -52,9 +52,10 @@ int main( int argc, char** argv )
const char* address = "127.0.0.1"; const char* address = "127.0.0.1";
const char* output = nullptr; const char* output = nullptr;
int port = 8086; int port = 8086;
int seconds = -1;
int c; int c;
while( ( c = getopt( argc, argv, "a:o:p:f" ) ) != -1 ) while( ( c = getopt( argc, argv, "a:o:p:fs:" ) ) != -1 )
{ {
switch( c ) switch( c )
{ {
@ -70,6 +71,9 @@ int main( int argc, char** argv )
case 'f': case 'f':
overwrite = true; overwrite = true;
break; break;
case 's':
seconds = atoi (optarg);
break;
default: default:
Usage(); Usage();
break; break;
@ -137,6 +141,7 @@ int main( int argc, char** argv )
{ {
worker.Disconnect(); worker.Disconnect();
disconnect = false; disconnect = false;
break;
} }
lock.lock(); lock.lock();
@ -162,6 +167,14 @@ int main( int argc, char** argv )
fflush( stdout ); fflush( stdout );
std::this_thread::sleep_for( std::chrono::milliseconds( 100 ) ); std::this_thread::sleep_for( std::chrono::milliseconds( 100 ) );
if( seconds != -1 )
{
const auto dur = std::chrono::high_resolution_clock::now() - t0;
if( std::chrono::duration_cast<std::chrono::seconds>(dur).count() >= seconds )
{
disconnect = true;
}
}
} }
const auto t1 = std::chrono::high_resolution_clock::now(); const auto t1 = std::chrono::high_resolution_clock::now();

View File

@ -2017,6 +2017,7 @@ You can capture a trace using a command line utility contained in the \texttt{ca
\item \texttt{-a address} -- specifies the IP address (or a domain name) of the client application (uses \texttt{localhost} if not provided). \item \texttt{-a address} -- specifies the IP address (or a domain name) of the client application (uses \texttt{localhost} if not provided).
\item \texttt{-p port} -- network port which should be used (optional). \item \texttt{-p port} -- network port which should be used (optional).
\item \texttt{-f} -- force overwrite, if output file already exists. \item \texttt{-f} -- force overwrite, if output file already exists.
\item \texttt{-s seconds} -- number of seconds to capture before automatically disconnecting (optional).
\end{itemize} \end{itemize}
If there is no client running at the given address, the server will wait until a connection can be made. During the capture the following information will be displayed: If there is no client running at the given address, the server will wait until a connection can be made. During the capture the following information will be displayed:
@ -2031,7 +2032,7 @@ Timer resolution: 3 ns
The \emph{queue delay} and \emph{timer resolution} parameters are calibration results of timers used by the client. The next line is a status bar, which displays: network connection speed, connection compression ratio, and the resulting uncompressed data rate; total amount of data transferred over the network; memory usage of the capture utility; time extent of the captured data. The \emph{queue delay} and \emph{timer resolution} parameters are calibration results of timers used by the client. The next line is a status bar, which displays: network connection speed, connection compression ratio, and the resulting uncompressed data rate; total amount of data transferred over the network; memory usage of the capture utility; time extent of the captured data.
You can disconnect from the client and save the captured trace by pressing \keys{\ctrl + C}. You can disconnect from the client and save the captured trace by pressing \keys{\ctrl + C}. If you prefer to disconnect after a fixed time, use the \texttt{-s seconds} parameter.
\subsection{Interactive profiling} \subsection{Interactive profiling}
\label{interactiveprofiling} \label{interactiveprofiling}