mirror of
https://github.com/moparisthebest/curl
synced 2024-12-21 07:38:49 -05:00
progress: calculate transfer speed on milliseconds if possible
to increase accuracy for quick transfers Fixes #2200 Closes #2206
This commit is contained in:
parent
d4e40f0690
commit
a8ce5efba9
@ -7,7 +7,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@ -416,6 +416,14 @@
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if (SIZEOF_CURL_OFF_T == 4)
|
||||||
|
# define CURL_OFF_T_MAX CURL_OFF_T_C(0x7FFFFFFF)
|
||||||
|
#else
|
||||||
|
/* assume CURL_SIZEOF_CURL_OFF_T == 8 */
|
||||||
|
# define CURL_OFF_T_MAX CURL_OFF_T_C(0x7FFFFFFFFFFFFFFF)
|
||||||
|
#endif
|
||||||
|
#define CURL_OFF_T_MIN (-CURL_OFF_T_MAX - CURL_OFF_T_C(1))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Arg 2 type for gethostname in case it hasn't been defined in config file.
|
* Arg 2 type for gethostname in case it hasn't been defined in config file.
|
||||||
*/
|
*/
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@ -358,6 +358,7 @@ int Curl_pgrsUpdate(struct connectdata *conn)
|
|||||||
curl_off_t total_transfer;
|
curl_off_t total_transfer;
|
||||||
curl_off_t total_expected_transfer;
|
curl_off_t total_expected_transfer;
|
||||||
curl_off_t timespent;
|
curl_off_t timespent;
|
||||||
|
curl_off_t timespent_ms; /* milliseconds */
|
||||||
struct Curl_easy *data = conn->data;
|
struct Curl_easy *data = conn->data;
|
||||||
int nowindex = data->progress.speeder_c% CURR_TIME;
|
int nowindex = data->progress.speeder_c% CURR_TIME;
|
||||||
int checkindex;
|
int checkindex;
|
||||||
@ -369,22 +370,27 @@ int Curl_pgrsUpdate(struct connectdata *conn)
|
|||||||
curl_off_t dlestimate = 0;
|
curl_off_t dlestimate = 0;
|
||||||
curl_off_t total_estimate;
|
curl_off_t total_estimate;
|
||||||
bool shownow = FALSE;
|
bool shownow = FALSE;
|
||||||
|
curl_off_t dl = data->progress.downloaded;
|
||||||
|
curl_off_t ul = data->progress.uploaded;
|
||||||
|
|
||||||
now = Curl_now(); /* what time is it */
|
now = Curl_now(); /* what time is it */
|
||||||
|
|
||||||
/* The time spent so far (from the start) */
|
/* The time spent so far (from the start) */
|
||||||
data->progress.timespent = Curl_timediff_us(now, data->progress.start);
|
data->progress.timespent = Curl_timediff_us(now, data->progress.start);
|
||||||
timespent = (curl_off_t)data->progress.timespent/1000000; /* seconds */
|
timespent = (curl_off_t)data->progress.timespent/1000000; /* seconds */
|
||||||
|
timespent_ms = (curl_off_t)data->progress.timespent/1000; /* ms */
|
||||||
|
|
||||||
/* The average download speed this far */
|
/* The average download speed this far */
|
||||||
data->progress.dlspeed = (curl_off_t)
|
if(dl < CURL_OFF_T_MAX/1000)
|
||||||
(data->progress.downloaded/
|
data->progress.dlspeed = (dl * 1000 / (timespent_ms>0?timespent_ms:1));
|
||||||
(timespent>0?timespent:1));
|
else
|
||||||
|
data->progress.dlspeed = (dl / (timespent>0?timespent:1));
|
||||||
|
|
||||||
/* The average upload speed this far */
|
/* The average upload speed this far */
|
||||||
data->progress.ulspeed = (curl_off_t)
|
if(ul < CURL_OFF_T_MAX/1000)
|
||||||
(data->progress.uploaded/
|
data->progress.ulspeed = (ul * 1000 / (timespent_ms>0?timespent_ms:1));
|
||||||
(timespent>0?timespent:1));
|
else
|
||||||
|
data->progress.ulspeed = (ul / (timespent>0?timespent:1));
|
||||||
|
|
||||||
/* Calculations done at most once a second, unless end is reached */
|
/* Calculations done at most once a second, unless end is reached */
|
||||||
if(data->progress.lastshow != now.tv_sec) {
|
if(data->progress.lastshow != now.tv_sec) {
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@ -40,14 +40,6 @@
|
|||||||
* of 'long' the conversion function to use is strtol().
|
* of 'long' the conversion function to use is strtol().
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if (SIZEOF_CURL_OFF_T == 4)
|
|
||||||
# define CURL_OFF_T_MAX CURL_OFF_T_C(0x7FFFFFFF)
|
|
||||||
#else
|
|
||||||
/* assume CURL_SIZEOF_CURL_OFF_T == 8 */
|
|
||||||
# define CURL_OFF_T_MAX CURL_OFF_T_C(0x7FFFFFFFFFFFFFFF)
|
|
||||||
#endif
|
|
||||||
#define CURL_OFF_T_MIN (-CURL_OFF_T_MAX - CURL_OFF_T_C(1))
|
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
CURL_OFFT_OK, /* parsed fine */
|
CURL_OFFT_OK, /* parsed fine */
|
||||||
CURL_OFFT_FLOW, /* over or underflow */
|
CURL_OFFT_FLOW, /* over or underflow */
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
|
Loading…
Reference in New Issue
Block a user