libzypp 17.37.17
DownloadProgressTracker.cc
Go to the documentation of this file.
1/*---------------------------------------------------------------------\
2| ____ _ __ __ ___ |
3| |__ / \ / / . \ . \ |
4| / / \ V /| _/ _/ |
5| / /__ | | | | | | |
6| /_____||_| |_| |_| |
7| |
8\---------------------------------------------------------------------*/
10
11#include <algorithm>
12
13namespace zypp::internal {
14
15void ProgressTracker::updateStats(double dltotal, double dlnow)
16{
17 clock::time_point now = clock::now();
18
19 if ( !_timeStart )
20 _timeStart = _timeLast = now;
21
22 // If called without args (0.0), recompute based on the last values seen
23 if ( dltotal && dltotal != _dnlTotal )
24 _dnlTotal = dltotal;
25
26 if ( dlnow && dlnow != _dnlNow ) {
27 _dnlNow = dlnow;
28 }
29
30 // percentage:
31 if ( _dnlTotal )
32 _dnlPercent = int(_dnlNow * 100 / _dnlTotal);
33
34 // download rates:
35 _drateTotal = _dnlNow / std::max( std::chrono::duration_cast<std::chrono::seconds>(now - *_timeStart).count(), int64_t(1) );
36
37 if ( _timeLast < now )
38 {
39 const auto duration = std::chrono::duration_cast<std::chrono::seconds>(now - *_timeLast).count();
40 if ( duration >= 1 ) {
41 _drateLast = (_dnlNow - _dnlLast) / duration;
42 // start new period
43 _timeLast = now;
45 }
46 }
47 else if ( _timeStart == _timeLast )
49}
50
51}
std::optional< clock::time_point > _timeStart
Start total stats.
double _dnlTotal
Bytes to download or 0 if unknown.
double _drateLast
Download rate in last period.
std::optional< clock::time_point > _timeLast
Start last period(~1sec)
double _drateTotal
Download rate so far.
double _dnlLast
Bytes downloaded at period start.
double _dnlNow
Bytes downloaded now.
int _dnlPercent
Percent completed or 0 if _dnlTotal is unknown.
void updateStats(double dltotal=0.0, double dlnow=0.0)