Lines Matching +full:- +full:- +full:no +full:- +full:transfer +full:- +full:progress
21 * SPDX-License-Identifier: curl
30 #include "progress.h"
44 strcpy(r, "--:--:--"); in time2str()
49 curl_off_t m = (seconds - (h*CURL_OFF_T_C(3600))) / CURL_OFF_T_C(60); in time2str()
50 curl_off_t s = (seconds - (h*CURL_OFF_T_C(3600))) - (m*CURL_OFF_T_C(60)); in time2str()
58 h = (seconds - (d*CURL_OFF_T_C(86400))) / CURL_OFF_T_C(3600); in time2str()
95 /* 10000 MB - 100 GB, we show it as XX.XG */ in max5data()
123 pgrsStartNow() - sets start time
124 pgrsSetDownloadSize(x) - known expected download size
125 pgrsSetUploadSize(x) - known expected upload size
126 pgrsSetDownloadCounter() - amount of data currently downloaded
127 pgrsSetUploadCounter() - amount of data currently uploaded
128 pgrsUpdate() - show progress
129 pgrsDone() - transfer complete
136 data->progress.lastshow = 0; in Curl_pgrsDone()
141 if(!(data->progress.flags & PGRS_HIDE) && in Curl_pgrsDone()
142 !data->progress.callback) in Curl_pgrsDone()
143 /* only output if we don't use a progress callback and we're not in Curl_pgrsDone()
145 fprintf(data->set.err, "\n"); in Curl_pgrsDone()
147 data->progress.speeder_c = 0; /* reset the progress meter display */ in Curl_pgrsDone()
151 /* reset the known transfer sizes */
154 Curl_pgrsSetDownloadSize(data, -1); in Curl_pgrsResetTransferSizes()
155 Curl_pgrsSetUploadSize(data, -1); in Curl_pgrsResetTransferSizes()
173 /* This is set at the start of a transfer */ in Curl_pgrsTimeWas()
174 data->progress.t_startop = timestamp; in Curl_pgrsTimeWas()
178 data->progress.t_startsingle = timestamp; in Curl_pgrsTimeWas()
179 data->progress.is_t_startransfer_set = false; in Curl_pgrsTimeWas()
182 data->progress.t_acceptdata = timestamp; in Curl_pgrsTimeWas()
185 delta = &data->progress.t_nslookup; in Curl_pgrsTimeWas()
188 delta = &data->progress.t_connect; in Curl_pgrsTimeWas()
191 delta = &data->progress.t_appconnect; in Curl_pgrsTimeWas()
194 delta = &data->progress.t_pretransfer; in Curl_pgrsTimeWas()
197 delta = &data->progress.t_starttransfer; in Curl_pgrsTimeWas()
204 if(data->progress.is_t_startransfer_set) { in Curl_pgrsTimeWas()
208 data->progress.is_t_startransfer_set = true; in Curl_pgrsTimeWas()
212 /* this is the normal end-of-transfer thing */ in Curl_pgrsTimeWas()
215 data->progress.t_redirect = Curl_timediff_us(timestamp, in Curl_pgrsTimeWas()
216 data->progress.start); in Curl_pgrsTimeWas()
220 timediff_t us = Curl_timediff_us(timestamp, data->progress.t_startsingle); in Curl_pgrsTimeWas()
244 data->progress.speeder_c = 0; /* reset the progress meter display */ in Curl_pgrsStartNow()
245 data->progress.start = Curl_now(); in Curl_pgrsStartNow()
246 data->progress.is_t_startransfer_set = false; in Curl_pgrsStartNow()
247 data->progress.ul_limit_start = data->progress.start; in Curl_pgrsStartNow()
248 data->progress.dl_limit_start = data->progress.start; in Curl_pgrsStartNow()
249 data->progress.ul_limit_size = 0; in Curl_pgrsStartNow()
250 data->progress.dl_limit_size = 0; in Curl_pgrsStartNow()
251 data->progress.downloaded = 0; in Curl_pgrsStartNow()
252 data->progress.uploaded = 0; in Curl_pgrsStartNow()
254 data->progress.flags &= PGRS_HIDE|PGRS_HEADERS_OUT; in Curl_pgrsStartNow()
255 Curl_ratelimit(data, data->progress.start); in Curl_pgrsStartNow()
264 * the start of the transfer. This starting point is regularly moved as
265 * transfer goes on, to keep getting accurate values (instead of average over
266 * the entire transfer).
272 * Returns 0 if no waiting is needed or when no waiting is needed but the
282 curl_off_t size = cursize - startsize; in Curl_pgrsLimitWaitTime()
311 return (minimum - actual); in Curl_pgrsLimitWaitTime()
322 data->progress.downloaded = size; in Curl_pgrsSetDownloadCounter()
331 if(data->set.max_recv_speed) { in Curl_ratelimit()
332 if(Curl_timediff(now, data->progress.dl_limit_start) >= in Curl_ratelimit()
334 data->progress.dl_limit_start = now; in Curl_ratelimit()
335 data->progress.dl_limit_size = data->progress.downloaded; in Curl_ratelimit()
338 if(data->set.max_send_speed) { in Curl_ratelimit()
339 if(Curl_timediff(now, data->progress.ul_limit_start) >= in Curl_ratelimit()
341 data->progress.ul_limit_start = now; in Curl_ratelimit()
342 data->progress.ul_limit_size = data->progress.uploaded; in Curl_ratelimit()
352 data->progress.uploaded = size; in Curl_pgrsSetUploadCounter()
358 data->progress.size_dl = size; in Curl_pgrsSetDownloadSize()
359 data->progress.flags |= PGRS_DL_SIZE_KNOWN; in Curl_pgrsSetDownloadSize()
362 data->progress.size_dl = 0; in Curl_pgrsSetDownloadSize()
363 data->progress.flags &= ~PGRS_DL_SIZE_KNOWN; in Curl_pgrsSetDownloadSize()
370 data->progress.size_ul = size; in Curl_pgrsSetUploadSize()
371 data->progress.flags |= PGRS_UL_SIZE_KNOWN; in Curl_pgrsSetUploadSize()
374 data->progress.size_ul = 0; in Curl_pgrsSetUploadSize()
375 data->progress.flags &= ~PGRS_UL_SIZE_KNOWN; in Curl_pgrsSetUploadSize()
393 /* returns TRUE if it's time to show the progress meter */
397 struct Progress * const p = &data->progress; in progress_calc()
400 p->timespent = Curl_timediff_us(now, p->start); in progress_calc()
401 p->dlspeed = trspeed(p->downloaded, p->timespent); in progress_calc()
402 p->ulspeed = trspeed(p->uploaded, p->timespent); in progress_calc()
405 if(p->lastshow != now.tv_sec) { in progress_calc()
407 int nowindex = p->speeder_c% CURR_TIME; in progress_calc()
408 p->lastshow = now.tv_sec; in progress_calc()
413 p->speeder[ nowindex ] = p->downloaded + p->uploaded; in progress_calc()
416 p->speeder_time [ nowindex ] = now; in progress_calc()
420 p->speeder_c++; in progress_calc()
423 array. With N_ENTRIES filled in, we have about N_ENTRIES-1 seconds of in progress_calc()
424 transfer. Imagine, after one second we have filled in two entries, in progress_calc()
426 countindex = ((p->speeder_c >= CURR_TIME)? CURR_TIME:p->speeder_c) - 1; in progress_calc()
428 /* first of all, we don't do this if there's no counted seconds yet */ in progress_calc()
437 checkindex = (p->speeder_c >= CURR_TIME)? p->speeder_c%CURR_TIME:0; in progress_calc()
440 span_ms = Curl_timediff(now, p->speeder_time[checkindex]); in progress_calc()
445 amount = p->speeder[nowindex]- p->speeder[checkindex]; in progress_calc()
450 p->current_speed = (curl_off_t) in progress_calc()
455 p->current_speed = amount*CURL_OFF_T_C(1000)/span_ms; in progress_calc()
459 p->current_speed = p->ulspeed + p->dlspeed; in progress_calc()
481 (curl_off_t)data->progress.timespent/1000000; /* seconds */ in progress_meter()
483 if(!(data->progress.flags & PGRS_HEADERS_OUT)) { in progress_meter()
484 if(data->state.resume_from) { in progress_meter()
485 fprintf(data->set.err, in progress_meter()
486 "** Resuming transfer from byte position %" in progress_meter()
487 CURL_FORMAT_CURL_OFF_T "\n", data->state.resume_from); in progress_meter()
489 fprintf(data->set.err, in progress_meter()
494 data->progress.flags |= PGRS_HEADERS_OUT; /* headers are shown */ in progress_meter()
498 if((data->progress.flags & PGRS_UL_SIZE_KNOWN) && in progress_meter()
499 (data->progress.ulspeed > CURL_OFF_T_C(0))) { in progress_meter()
500 ulestimate = data->progress.size_ul / data->progress.ulspeed; in progress_meter()
502 if(data->progress.size_ul > CURL_OFF_T_C(10000)) in progress_meter()
503 ulpercen = data->progress.uploaded / in progress_meter()
504 (data->progress.size_ul/CURL_OFF_T_C(100)); in progress_meter()
505 else if(data->progress.size_ul > CURL_OFF_T_C(0)) in progress_meter()
506 ulpercen = (data->progress.uploaded*100) / in progress_meter()
507 data->progress.size_ul; in progress_meter()
511 if((data->progress.flags & PGRS_DL_SIZE_KNOWN) && in progress_meter()
512 (data->progress.dlspeed > CURL_OFF_T_C(0))) { in progress_meter()
513 dlestimate = data->progress.size_dl / data->progress.dlspeed; in progress_meter()
515 if(data->progress.size_dl > CURL_OFF_T_C(10000)) in progress_meter()
516 dlpercen = data->progress.downloaded / in progress_meter()
517 (data->progress.size_dl/CURL_OFF_T_C(100)); in progress_meter()
518 else if(data->progress.size_dl > CURL_OFF_T_C(0)) in progress_meter()
519 dlpercen = (data->progress.downloaded*100) / in progress_meter()
520 data->progress.size_dl; in progress_meter()
528 time2str(time_left, total_estimate > 0?(total_estimate - timespent):0); in progress_meter()
534 ((data->progress.flags & PGRS_UL_SIZE_KNOWN)? in progress_meter()
535 data->progress.size_ul:data->progress.uploaded)+ in progress_meter()
536 ((data->progress.flags & PGRS_DL_SIZE_KNOWN)? in progress_meter()
537 data->progress.size_dl:data->progress.downloaded); in progress_meter()
540 total_transfer = data->progress.downloaded + data->progress.uploaded; in progress_meter()
549 fprintf(data->set.err, in progress_meter()
557 max5data(data->progress.downloaded, max5[0]), /* rcvd size */ in progress_meter()
559 max5data(data->progress.uploaded, max5[1]), /* xfer size */ in progress_meter()
560 max5data(data->progress.dlspeed, max5[3]), /* avrg dl speed */ in progress_meter()
561 max5data(data->progress.ulspeed, max5[4]), /* avrg ul speed */ in progress_meter()
565 max5data(data->progress.current_speed, max5[5]) in progress_meter()
569 fflush(data->set.err); in progress_meter()
572 /* progress bar disabled */
579 * progress callback!
585 if(!(data->progress.flags & PGRS_HIDE)) { in Curl_pgrsUpdate()
586 if(data->set.fxferinfo) { in Curl_pgrsUpdate()
590 result = data->set.fxferinfo(data->set.progress_client, in Curl_pgrsUpdate()
591 data->progress.size_dl, in Curl_pgrsUpdate()
592 data->progress.downloaded, in Curl_pgrsUpdate()
593 data->progress.size_ul, in Curl_pgrsUpdate()
594 data->progress.uploaded); in Curl_pgrsUpdate()
602 else if(data->set.fprogress) { in Curl_pgrsUpdate()
606 result = data->set.fprogress(data->set.progress_client, in Curl_pgrsUpdate()
607 (double)data->progress.size_dl, in Curl_pgrsUpdate()
608 (double)data->progress.downloaded, in Curl_pgrsUpdate()
609 (double)data->progress.size_ul, in Curl_pgrsUpdate()
610 (double)data->progress.uploaded); in Curl_pgrsUpdate()