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:
parent
271f96f78f
commit
ca0fd33d2d
@ -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
|
||||||
|
@ -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.
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
@ -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 =
|
||||||
|
@ -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 */
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
|
@ -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))
|
||||||
|
Loading…
Reference in New Issue
Block a user