summaryrefslogtreecommitdiff
path: root/ftparchive/apt-ftparchive.cc
diff options
context:
space:
mode:
authorJulian Andres Klode <jak@debian.org>2018-05-30 11:45:16 +0000
committerJulian Andres Klode <jak@debian.org>2018-05-30 11:45:16 +0000
commitc105a808366867e5476bd4d1ea7fe1c1e9795948 (patch)
treeea1a9d696a4571d6637b8aaa97dcba6be86bdd0a /ftparchive/apt-ftparchive.cc
parent819426013c6ca6310bb469440702b6295dba4498 (diff)
parentf6655a1138a11e80884959014939a25f23a1e308 (diff)
Merge branch 'fix/usesteadyclockforprogress' into 'master'
Fix/usesteadyclockforprogress See merge request apt-team/apt!19
Diffstat (limited to 'ftparchive/apt-ftparchive.cc')
-rw-r--r--ftparchive/apt-ftparchive.cc70
1 files changed, 38 insertions, 32 deletions
diff --git a/ftparchive/apt-ftparchive.cc b/ftparchive/apt-ftparchive.cc
index a3fdf2391..077701cc0 100644
--- a/ftparchive/apt-ftparchive.cc
+++ b/ftparchive/apt-ftparchive.cc
@@ -23,6 +23,7 @@
#include <apt-private/private-output.h>
#include <algorithm>
+#include <chrono>
#include <climits>
#include <functional>
#include <iostream>
@@ -33,6 +34,7 @@
#include <sys/stat.h>
#include <sys/time.h>
#include <time.h>
+#include <math.h>
#include "apt-ftparchive.h"
#include "cachedb.h"
@@ -46,6 +48,15 @@
using namespace std;
unsigned Quiet = 0;
+static struct timeval GetTimevalFromSteadyClock() /*{{{*/
+{
+ auto const Time = std::chrono::steady_clock::now().time_since_epoch();
+ auto const Time_sec = std::chrono::duration_cast<std::chrono::seconds>(Time);
+ auto const Time_usec = std::chrono::duration_cast<std::chrono::microseconds>(Time - Time_sec);
+ return { Time_sec.count(), Time_usec.count() };
+}
+ /*}}}*/
+
// struct PackageMap - List of all package files in the config file /*{{{*/
// ---------------------------------------------------------------------
/* */
@@ -173,9 +184,8 @@ bool PackageMap::GenPackages(Configuration &Setup,struct CacheDB::Stats &Stats)
string OverrideDir = Setup.FindDir("Dir::OverrideDir");
string CacheDir = Setup.FindDir("Dir::CacheDir");
- struct timeval StartTime;
- gettimeofday(&StartTime,0);
-
+ struct timeval StartTime = GetTimevalFromSteadyClock();
+
PkgDone = true;
// Create a package writer object.
@@ -232,15 +242,15 @@ bool PackageMap::GenPackages(Configuration &Setup,struct CacheDB::Stats &Stats)
else
c0out << ' ';
- struct timeval NewTime;
- gettimeofday(&NewTime,0);
- double Delta = NewTime.tv_sec - StartTime.tv_sec +
- (NewTime.tv_usec - StartTime.tv_usec)/1000000.0;
+ struct timeval NewTime = GetTimevalFromSteadyClock();
+ std::chrono::duration<double> Delta =
+ std::chrono::seconds(NewTime.tv_sec - StartTime.tv_sec) +
+ std::chrono::microseconds(NewTime.tv_sec - StartTime.tv_usec);
c0out << Packages.Stats.Packages << " files " <<
/* SizeToStr(Packages.Stats.MD5Bytes) << "B/" << */
SizeToStr(Packages.Stats.Bytes) << "B " <<
- TimeToStr((long)Delta) << endl;
+ TimeToStr(llround(Delta.count())) << endl;
if(_config->FindB("APT::FTPArchive::ShowCacheMisses", false) == true)
c0out << " Misses in Cache: " << Packages.Stats.Misses<< endl;
@@ -264,9 +274,7 @@ bool PackageMap::GenSources(Configuration &Setup,struct CacheDB::Stats &Stats)
string OverrideDir = Setup.FindDir("Dir::OverrideDir");
string CacheDir = Setup.FindDir("Dir::CacheDir");
- struct timeval StartTime;
- gettimeofday(&StartTime,0);
-
+ struct timeval StartTime = GetTimevalFromSteadyClock();
SrcDone = true;
// Create a package writer object.
@@ -320,13 +328,13 @@ bool PackageMap::GenSources(Configuration &Setup,struct CacheDB::Stats &Stats)
else
c0out << ' ';
- struct timeval NewTime;
- gettimeofday(&NewTime,0);
- double Delta = NewTime.tv_sec - StartTime.tv_sec +
- (NewTime.tv_usec - StartTime.tv_usec)/1000000.0;
+ struct timeval NewTime = GetTimevalFromSteadyClock();
+ std::chrono::duration<double> Delta =
+ std::chrono::seconds(NewTime.tv_sec - StartTime.tv_sec) +
+ std::chrono::microseconds(NewTime.tv_sec - StartTime.tv_usec);
c0out << Sources.Stats.Packages << " pkgs in " <<
- TimeToStr((long)Delta) << endl;
+ TimeToStr(llround(Delta.count())) << endl;
if(_config->FindB("APT::FTPArchive::ShowCacheMisses", false) == true)
c0out << " Misses in Cache: " << Sources.Stats.Misses << endl;
@@ -356,10 +364,9 @@ bool PackageMap::GenContents(Configuration &Setup,
string ArchiveDir = Setup.FindDir("Dir::ArchiveDir");
string CacheDir = Setup.FindDir("Dir::CacheDir");
string OverrideDir = Setup.FindDir("Dir::OverrideDir");
-
- struct timeval StartTime;
- gettimeofday(&StartTime,0);
-
+
+ struct timeval StartTime = GetTimevalFromSteadyClock();
+
// Create a package writer object.
MultiCompress Comp(flCombine(ArchiveDir,this->Contents),
CntCompress,Permissions);
@@ -437,17 +444,17 @@ bool PackageMap::GenContents(Configuration &Setup,
else
c0out << ' ';
- struct timeval NewTime;
- gettimeofday(&NewTime,0);
- double Delta = NewTime.tv_sec - StartTime.tv_sec +
- (NewTime.tv_usec - StartTime.tv_usec)/1000000.0;
+ struct timeval NewTime = GetTimevalFromSteadyClock();
+ std::chrono::duration<double> Delta =
+ std::chrono::seconds(NewTime.tv_sec - StartTime.tv_sec) +
+ std::chrono::microseconds(NewTime.tv_sec - StartTime.tv_usec);
if(_config->FindB("APT::FTPArchive::ShowCacheMisses", false) == true)
c0out << " Misses in Cache: " << Contents.Stats.Misses<< endl;
c0out << Contents.Stats.Packages << " files " <<
SizeToStr(Contents.Stats.Bytes) << "B " <<
- TimeToStr((long)Delta) << endl;
+ TimeToStr(llround(Delta.count())) << endl;
return true;
}
@@ -926,8 +933,7 @@ static bool Generate(CommandLine &CmdL)
if (CmdL.FileSize() < 2)
return ShowHelp(CmdL);
- struct timeval StartTime;
- gettimeofday(&StartTime,0);
+ struct timeval StartTime = GetTimevalFromSteadyClock();
struct CacheDB::Stats Stats;
// Read the configuration file.
@@ -964,12 +970,12 @@ static bool Generate(CommandLine &CmdL)
return false;
}
- struct timeval NewTime;
- gettimeofday(&NewTime,0);
- double Delta = NewTime.tv_sec - StartTime.tv_sec +
- (NewTime.tv_usec - StartTime.tv_usec)/1000000.0;
+ struct timeval NewTime = GetTimevalFromSteadyClock();
+ std::chrono::duration<double> Delta =
+ std::chrono::seconds(NewTime.tv_sec - StartTime.tv_sec) +
+ std::chrono::microseconds(NewTime.tv_sec - StartTime.tv_usec);
c1out << "Done. " << SizeToStr(Stats.Bytes) << "B in " << Stats.Packages
- << " archives. Took " << TimeToStr((long)Delta) << endl;
+ << " archives. Took " << TimeToStr(llround(Delta.count())) << endl;
UnloadTree(TransList);
return true;