Georg Horn's STARTTRANSFER_TIME patch
authorDaniel Stenberg <daniel@haxx.se>
Tue, 20 Nov 2001 15:00:50 +0000 (15:00 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 20 Nov 2001 15:00:50 +0000 (15:00 +0000)
docs/curl.1
docs/curl_easy_getinfo.3
include/curl/curl.h
lib/getinfo.c
lib/progress.c
lib/progress.h
lib/transfer.c
lib/urldata.h
src/writeout.c

index 358ef2d6afb5b6149db6fa343af7b6ce3839f94e..4ca8ee2c200a1bf150f5f3d98a404216ef4c8f78 100644 (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
 are specific to the particular protocol(s) involved.
 .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
 The total amount of bytes that were downloaded.
 .TP
index b6ce3c8c1d4358292abdd7fd4d66bd33f982b9ba..73fd461a348a5076bba20e95390993fc71812c75 100644 (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
 protocol(s) involved.
 .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
 Pass a pointer to a double to receive the total amount of bytes that were
 uploaded.
index 3a815ad55672f19abbd700107c8c25ff1cd12afd..48b82d177fa7907b90a50df5a0f132770fb14a20 100644 (file)
@@ -584,8 +584,8 @@ CURLcode curl_global_init(long flags);
 void curl_global_cleanup(void);
 
 /* This is the version number */
-#define LIBCURL_VERSION "7.9.1"
-#define LIBCURL_VERSION_NUM 0x070901
+#define LIBCURL_VERSION "7.9.2-pre3"
+#define LIBCURL_VERSION_NUM 0x070902
 
 /* linked-list structure for the CURLOPT_QUOTE option (and other) */
 struct curl_slist {
@@ -635,7 +635,9 @@ typedef enum {
   CURLINFO_CONTENT_LENGTH_DOWNLOAD   = CURLINFO_DOUBLE + 15,
   CURLINFO_CONTENT_LENGTH_UPLOAD     = CURLINFO_DOUBLE + 16,
 
-  CURLINFO_LASTONE          = 17
+  CURLINFO_STARTTRANSFER_TIME = CURLINFO_DOUBLE + 17,
+
+  CURLINFO_LASTONE          = 18
 } CURLINFO;
 
 /* unfortunately, the easy.h include file needs the options and info stuff
index b502609ead8bd2f2052a58fd722ea4f6d572b2ae..cdb69ca7234e4aeb864768ac4202dfeda290b775 100644 (file)
@@ -43,6 +43,7 @@ CURLcode Curl_initinfo(struct SessionHandle *data)
   pro->t_nslookup = 0;
   pro->t_connect = 0;
   pro->t_pretransfer = 0;
+  pro->t_starttransfer = 0;
 
   info->httpcode = 0;
   info->httpversion=0;
@@ -107,6 +108,9 @@ CURLcode Curl_getinfo(struct SessionHandle *data, CURLINFO info, ...)
   case CURLINFO_PRETRANSFER_TIME:
     *param_doublep =  data->progress.t_pretransfer;
     break;
+  case CURLINFO_STARTTRANSFER_TIME:
+    *param_doublep = data->progress.t_starttransfer;
+    break;
   case CURLINFO_SIZE_UPLOAD:
     *param_doublep =  data->progress.uploaded;
     break;
index 86574465491c2aceccb7ff66e43dae39264dee9f..318a6d872ab2de608f3c10ecdc84878de4457dfc 100644 (file)
@@ -111,22 +111,24 @@ void Curl_pgrsTime(struct SessionHandle *data, timerid timer)
     /* mistake filter */
     break;
   case TIMER_STARTSINGLE:
-    /* This is set at the start of a single fetch, there may be several
-       fetches within an operation, why we add all other times relative
-       to this one */
+    /* This is set at the start of a single fetch */
     data->progress.t_startsingle = Curl_tvnow();
     break;
 
   case TIMER_NAMELOOKUP:
-    data->progress.t_nslookup +=
+    data->progress.t_nslookup =
       (double)Curl_tvdiff(Curl_tvnow(), data->progress.t_startsingle)/1000.0;
     break;
   case TIMER_CONNECT:
-    data->progress.t_connect +=
+    data->progress.t_connect =
       (double)Curl_tvdiff(Curl_tvnow(), data->progress.t_startsingle)/1000.0;
     break;
   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;
     break;
   case TIMER_POSTRANSFER:
@@ -227,7 +229,7 @@ int Curl_pgrsUpdate(struct connectdata *conn)
   /* The exact time spent so far (from the start) */
   timespent = (double)Curl_tvdiff (now, data->progress.start)/1000;
 
-  data->progress.timespent = (long)timespent;
+  data->progress.timespent = timespent;
 
   /* The average download speed this far */
   data->progress.dlspeed =
index 3d0a6b084c1fd9abd45ef46cbe0357dd1948ce01..2d45984144039fbfc9f89aa39a7321b789e7b348 100644 (file)
@@ -31,6 +31,7 @@ typedef enum {
   TIMER_NAMELOOKUP,
   TIMER_CONNECT,
   TIMER_PRETRANSFER,
+  TIMER_STARTTRANSFER,
   TIMER_POSTRANSFER,
   TIMER_STARTSINGLE,
   TIMER_LAST /* must be last */
index 163b2cb848e88224de6ef78bce05c5558844888e..b59c9f2f700004e242e03b9e6b281b778d8a5a74 100644 (file)
@@ -305,6 +305,8 @@ Transfer(struct connectdata *c_conn)
         }
        break;
       default:
+        if ((bytecount == 0) && (writebytecount == 0))
+          Curl_pgrsTime(data, TIMER_STARTTRANSFER);
         if((keepon & KEEP_READ) && FD_ISSET(conn->sockfd, &readfd)) {
           /* read! */
           urg = Curl_read(conn, conn->sockfd, buf, BUFSIZE -1, &nread);
index a8f1ebe7828116ee7a06b6bbea4af2dd963f6719..6749113fe1f7070b9bd76fb11a17bc06958d6bdb 100644 (file)
@@ -374,7 +374,7 @@ struct Progress {
   int width; /* screen width at download start */
   int flags; /* see progress.h */
 
-  long timespent;
+  double timespent;
 
   double dlspeed;
   double ulspeed;
@@ -382,6 +382,7 @@ struct Progress {
   double t_nslookup;
   double t_connect;
   double t_pretransfer;
+  double t_starttransfer;
 
   struct timeval start;
   struct timeval t_startsingle;
index 2c1b3aa248b52f8e8a69d89ca7354b84b8e2febc..a786d2d076b242d2f63c2a7b6aa4f1c69a1bdcd3 100644 (file)
@@ -37,6 +37,7 @@ typedef enum {
   VAR_NAMELOOKUP_TIME,
   VAR_CONNECT_TIME,
   VAR_PRETRANSFER_TIME,
+  VAR_STARTTRANSFER_TIME,
   VAR_SIZE_DOWNLOAD,
   VAR_SIZE_UPLOAD,
   VAR_SPEED_DOWNLOAD,
@@ -61,6 +62,7 @@ static struct variable replacements[]={
   {"time_namelookup", VAR_NAMELOOKUP_TIME},
   {"time_connect", VAR_CONNECT_TIME},
   {"time_pretransfer", VAR_PRETRANSFER_TIME},
+  {"time_starttransfer", VAR_STARTTRANSFER_TIME},
   {"size_header", VAR_HEADER_SIZE},
   {"size_request", VAR_REQUEST_SIZE},
   {"size_download", VAR_SIZE_DOWNLOAD},
@@ -138,6 +140,11 @@ void ourWriteOut(CURL *curl, char *writeinfo)
                    curl_easy_getinfo(curl, CURLINFO_PRETRANSFER_TIME, &doubleinfo))
                   fprintf(stream, "%.3f", doubleinfo);
                 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:
                 if(CURLE_OK ==
                    curl_easy_getinfo(curl, CURLINFO_SIZE_UPLOAD, &doubleinfo))