1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-21 07:38:49 -05:00

Georg Horn's STARTTRANSFER_TIME patch

This commit is contained in:
Daniel Stenberg 2001-11-20 15:00:50 +00:00
parent 271f96f78f
commit ca0fd33d2d
9 changed files with 41 additions and 11 deletions

View File

@ -569,6 +569,11 @@ The time, in seconds, it took from the start until the file transfer is just
about to begin. This includes all pre-transfer commands and negotiations that about to begin. This includes all pre-transfer commands and negotiations that
are specific to the particular protocol(s) involved. are specific to the particular protocol(s) involved.
.TP .TP
.B time_starttransfer
The time, in seconds, it took from the start until the first byte is just about
to be transfered. This includes time_pretransfer and also the time the
server needs to calculate the result.
.TP
.B size_download .B size_download
The total amount of bytes that were downloaded. The total amount of bytes that were downloaded.
.TP .TP

View File

@ -52,6 +52,12 @@ start until the file transfer is just about to begin. This includes all
pre-transfer commands and negotiations that are specific to the particular pre-transfer commands and negotiations that are specific to the particular
protocol(s) involved. protocol(s) involved.
.TP .TP
.B CURLINFO_STARTTRANSFER_TIME
Pass a pointer to a double to receive the time, in seconds, it took from the
start until the first byte is just about to be transfered. This includes
CURLINFO_PRETRANSFER_TIME and also the time the server needs to calculate
the result.
.TP
.B CURLINFO_SIZE_UPLOAD .B CURLINFO_SIZE_UPLOAD
Pass a pointer to a double to receive the total amount of bytes that were Pass a pointer to a double to receive the total amount of bytes that were
uploaded. uploaded.

View File

@ -584,8 +584,8 @@ CURLcode curl_global_init(long flags);
void curl_global_cleanup(void); void curl_global_cleanup(void);
/* This is the version number */ /* This is the version number */
#define LIBCURL_VERSION "7.9.1" #define LIBCURL_VERSION "7.9.2-pre3"
#define LIBCURL_VERSION_NUM 0x070901 #define LIBCURL_VERSION_NUM 0x070902
/* linked-list structure for the CURLOPT_QUOTE option (and other) */ /* linked-list structure for the CURLOPT_QUOTE option (and other) */
struct curl_slist { struct curl_slist {
@ -635,7 +635,9 @@ typedef enum {
CURLINFO_CONTENT_LENGTH_DOWNLOAD = CURLINFO_DOUBLE + 15, CURLINFO_CONTENT_LENGTH_DOWNLOAD = CURLINFO_DOUBLE + 15,
CURLINFO_CONTENT_LENGTH_UPLOAD = CURLINFO_DOUBLE + 16, CURLINFO_CONTENT_LENGTH_UPLOAD = CURLINFO_DOUBLE + 16,
CURLINFO_LASTONE = 17 CURLINFO_STARTTRANSFER_TIME = CURLINFO_DOUBLE + 17,
CURLINFO_LASTONE = 18
} CURLINFO; } CURLINFO;
/* unfortunately, the easy.h include file needs the options and info stuff /* unfortunately, the easy.h include file needs the options and info stuff

View File

@ -43,6 +43,7 @@ CURLcode Curl_initinfo(struct SessionHandle *data)
pro->t_nslookup = 0; pro->t_nslookup = 0;
pro->t_connect = 0; pro->t_connect = 0;
pro->t_pretransfer = 0; pro->t_pretransfer = 0;
pro->t_starttransfer = 0;
info->httpcode = 0; info->httpcode = 0;
info->httpversion=0; info->httpversion=0;
@ -107,6 +108,9 @@ CURLcode Curl_getinfo(struct SessionHandle *data, CURLINFO info, ...)
case CURLINFO_PRETRANSFER_TIME: case CURLINFO_PRETRANSFER_TIME:
*param_doublep = data->progress.t_pretransfer; *param_doublep = data->progress.t_pretransfer;
break; break;
case CURLINFO_STARTTRANSFER_TIME:
*param_doublep = data->progress.t_starttransfer;
break;
case CURLINFO_SIZE_UPLOAD: case CURLINFO_SIZE_UPLOAD:
*param_doublep = data->progress.uploaded; *param_doublep = data->progress.uploaded;
break; break;

View File

@ -111,22 +111,24 @@ void Curl_pgrsTime(struct SessionHandle *data, timerid timer)
/* mistake filter */ /* mistake filter */
break; break;
case TIMER_STARTSINGLE: case TIMER_STARTSINGLE:
/* This is set at the start of a single fetch, there may be several /* This is set at the start of a single fetch */
fetches within an operation, why we add all other times relative
to this one */
data->progress.t_startsingle = Curl_tvnow(); data->progress.t_startsingle = Curl_tvnow();
break; break;
case TIMER_NAMELOOKUP: case TIMER_NAMELOOKUP:
data->progress.t_nslookup += data->progress.t_nslookup =
(double)Curl_tvdiff(Curl_tvnow(), data->progress.t_startsingle)/1000.0; (double)Curl_tvdiff(Curl_tvnow(), data->progress.t_startsingle)/1000.0;
break; break;
case TIMER_CONNECT: case TIMER_CONNECT:
data->progress.t_connect += data->progress.t_connect =
(double)Curl_tvdiff(Curl_tvnow(), data->progress.t_startsingle)/1000.0; (double)Curl_tvdiff(Curl_tvnow(), data->progress.t_startsingle)/1000.0;
break; break;
case TIMER_PRETRANSFER: case TIMER_PRETRANSFER:
data->progress.t_pretransfer += data->progress.t_pretransfer =
(double)Curl_tvdiff(Curl_tvnow(), data->progress.t_startsingle)/1000.0;
break;
case TIMER_STARTTRANSFER:
data->progress.t_starttransfer =
(double)Curl_tvdiff(Curl_tvnow(), data->progress.t_startsingle)/1000.0; (double)Curl_tvdiff(Curl_tvnow(), data->progress.t_startsingle)/1000.0;
break; break;
case TIMER_POSTRANSFER: case TIMER_POSTRANSFER:
@ -227,7 +229,7 @@ int Curl_pgrsUpdate(struct connectdata *conn)
/* The exact time spent so far (from the start) */ /* The exact time spent so far (from the start) */
timespent = (double)Curl_tvdiff (now, data->progress.start)/1000; timespent = (double)Curl_tvdiff (now, data->progress.start)/1000;
data->progress.timespent = (long)timespent; data->progress.timespent = timespent;
/* The average download speed this far */ /* The average download speed this far */
data->progress.dlspeed = data->progress.dlspeed =

View File

@ -31,6 +31,7 @@ typedef enum {
TIMER_NAMELOOKUP, TIMER_NAMELOOKUP,
TIMER_CONNECT, TIMER_CONNECT,
TIMER_PRETRANSFER, TIMER_PRETRANSFER,
TIMER_STARTTRANSFER,
TIMER_POSTRANSFER, TIMER_POSTRANSFER,
TIMER_STARTSINGLE, TIMER_STARTSINGLE,
TIMER_LAST /* must be last */ TIMER_LAST /* must be last */

View File

@ -305,6 +305,8 @@ Transfer(struct connectdata *c_conn)
} }
break; break;
default: default:
if ((bytecount == 0) && (writebytecount == 0))
Curl_pgrsTime(data, TIMER_STARTTRANSFER);
if((keepon & KEEP_READ) && FD_ISSET(conn->sockfd, &readfd)) { if((keepon & KEEP_READ) && FD_ISSET(conn->sockfd, &readfd)) {
/* read! */ /* read! */
urg = Curl_read(conn, conn->sockfd, buf, BUFSIZE -1, &nread); urg = Curl_read(conn, conn->sockfd, buf, BUFSIZE -1, &nread);

View File

@ -374,7 +374,7 @@ struct Progress {
int width; /* screen width at download start */ int width; /* screen width at download start */
int flags; /* see progress.h */ int flags; /* see progress.h */
long timespent; double timespent;
double dlspeed; double dlspeed;
double ulspeed; double ulspeed;
@ -382,6 +382,7 @@ struct Progress {
double t_nslookup; double t_nslookup;
double t_connect; double t_connect;
double t_pretransfer; double t_pretransfer;
double t_starttransfer;
struct timeval start; struct timeval start;
struct timeval t_startsingle; struct timeval t_startsingle;

View File

@ -37,6 +37,7 @@ typedef enum {
VAR_NAMELOOKUP_TIME, VAR_NAMELOOKUP_TIME,
VAR_CONNECT_TIME, VAR_CONNECT_TIME,
VAR_PRETRANSFER_TIME, VAR_PRETRANSFER_TIME,
VAR_STARTTRANSFER_TIME,
VAR_SIZE_DOWNLOAD, VAR_SIZE_DOWNLOAD,
VAR_SIZE_UPLOAD, VAR_SIZE_UPLOAD,
VAR_SPEED_DOWNLOAD, VAR_SPEED_DOWNLOAD,
@ -61,6 +62,7 @@ static struct variable replacements[]={
{"time_namelookup", VAR_NAMELOOKUP_TIME}, {"time_namelookup", VAR_NAMELOOKUP_TIME},
{"time_connect", VAR_CONNECT_TIME}, {"time_connect", VAR_CONNECT_TIME},
{"time_pretransfer", VAR_PRETRANSFER_TIME}, {"time_pretransfer", VAR_PRETRANSFER_TIME},
{"time_starttransfer", VAR_STARTTRANSFER_TIME},
{"size_header", VAR_HEADER_SIZE}, {"size_header", VAR_HEADER_SIZE},
{"size_request", VAR_REQUEST_SIZE}, {"size_request", VAR_REQUEST_SIZE},
{"size_download", VAR_SIZE_DOWNLOAD}, {"size_download", VAR_SIZE_DOWNLOAD},
@ -138,6 +140,11 @@ void ourWriteOut(CURL *curl, char *writeinfo)
curl_easy_getinfo(curl, CURLINFO_PRETRANSFER_TIME, &doubleinfo)) curl_easy_getinfo(curl, CURLINFO_PRETRANSFER_TIME, &doubleinfo))
fprintf(stream, "%.3f", doubleinfo); fprintf(stream, "%.3f", doubleinfo);
break; break;
case VAR_STARTTRANSFER_TIME:
if(CURLE_OK ==
curl_easy_getinfo(curl, CURLINFO_STARTTRANSFER_TIME, &doubleinfo))
fprintf(stream, "%.3f", doubleinfo);
break;
case VAR_SIZE_UPLOAD: case VAR_SIZE_UPLOAD:
if(CURLE_OK == if(CURLE_OK ==
curl_easy_getinfo(curl, CURLINFO_SIZE_UPLOAD, &doubleinfo)) curl_easy_getinfo(curl, CURLINFO_SIZE_UPLOAD, &doubleinfo))