summaryrefslogtreecommitdiff
path: root/apt-pkg/pkgcachegen.cc
diff options
context:
space:
mode:
authorJulian Andres Klode <jak@debian.org>2016-09-28 00:49:45 +0200
committerJulian Andres Klode <jak@debian.org>2016-11-22 22:58:33 +0100
commit49521f87851089bdb4097b715d09a8bd348aa60a (patch)
tree7cedcd05be67505f4949eb18dbe155178b76e4bb /apt-pkg/pkgcachegen.cc
parentc0723bf1a60daf45096998d4ae9feee3c44343f8 (diff)
Do not use MD5SumValue for Description_md5()
Our profile says we spend about 5% of the time transforming the hex digits into the binary format used by HashsumValue, all for comparing them against the other strings. That makes no sense at all. According to callgrind, this reduces the overall instruction count from 5,3 billion to 5 billion in my example, which roughly matches the 5%.
Diffstat (limited to 'apt-pkg/pkgcachegen.cc')
-rw-r--r--apt-pkg/pkgcachegen.cc26
1 files changed, 13 insertions, 13 deletions
diff --git a/apt-pkg/pkgcachegen.cc b/apt-pkg/pkgcachegen.cc
index 1d997678c..107f1f141 100644
--- a/apt-pkg/pkgcachegen.cc
+++ b/apt-pkg/pkgcachegen.cc
@@ -45,8 +45,8 @@ template<class T> using Dynamic = pkgCacheGenerator::Dynamic<T>;
typedef std::vector<pkgIndexFile *>::iterator FileIterator;
template <typename Iter> std::vector<Iter*> pkgCacheGenerator::Dynamic<Iter>::toReMap;
-static bool IsDuplicateDescription(pkgCache::DescIterator Desc,
- MD5SumValue const &CurMd5, std::string const &CurLang);
+static bool IsDuplicateDescription(pkgCache &Cache, pkgCache::DescIterator Desc,
+ APT::StringView CurMd5, std::string const &CurLang);
using std::string;
using APT::StringView;
@@ -340,14 +340,14 @@ bool pkgCacheGenerator::MergeListPackage(ListParser &List, pkgCache::PkgIterator
Pkg.Name(), "UsePackage", 1);
// Find the right version to write the description
- MD5SumValue CurMd5 = List.Description_md5();
+ StringView CurMd5 = List.Description_md5();
std::vector<std::string> availDesc = List.AvailableDescriptionLanguages();
for (Ver = Pkg.VersionList(); Ver.end() == false; ++Ver)
{
pkgCache::DescIterator VerDesc = Ver.DescriptionList();
// a version can only have one md5 describing it
- if (VerDesc.end() == true || MD5SumValue(VerDesc.md5()) != CurMd5)
+ if (VerDesc.end() == true || Cache.ViewString(VerDesc->md5sum) != CurMd5)
continue;
map_stringitem_t md5idx = VerDesc->md5sum;
@@ -355,7 +355,7 @@ bool pkgCacheGenerator::MergeListPackage(ListParser &List, pkgCache::PkgIterator
{
// don't add a new description if we have one for the given
// md5 && language
- if (IsDuplicateDescription(VerDesc, CurMd5, *CurLang) == true)
+ if (IsDuplicateDescription(Cache, VerDesc, CurMd5, *CurLang) == true)
continue;
AddNewDescription(List, Ver, *CurLang, CurMd5, md5idx);
@@ -489,7 +489,7 @@ bool pkgCacheGenerator::MergeListVersion(ListParser &List, pkgCache::PkgIterator
}
/* Record the Description(s) based on their master md5sum */
- MD5SumValue CurMd5 = List.Description_md5();
+ StringView CurMd5 = List.Description_md5();
/* Before we add a new description we first search in the group for
a version with a description of the same MD5 - if so we reuse this
@@ -500,7 +500,7 @@ bool pkgCacheGenerator::MergeListVersion(ListParser &List, pkgCache::PkgIterator
for (pkgCache::VerIterator V = P.VersionList();
V.end() == false; ++V)
{
- if (V->DescriptionList == 0 || MD5SumValue(V.DescriptionList().md5()) != CurMd5)
+ if (V->DescriptionList == 0 || Cache.ViewString(V.DescriptionList()->md5sum) != CurMd5)
continue;
Ver->DescriptionList = V->DescriptionList;
}
@@ -515,7 +515,7 @@ bool pkgCacheGenerator::MergeListVersion(ListParser &List, pkgCache::PkgIterator
return true;
}
/*}}}*/
-bool pkgCacheGenerator::AddNewDescription(ListParser &List, pkgCache::VerIterator &Ver, std::string const &lang, MD5SumValue const &CurMd5, map_stringitem_t &md5idx) /*{{{*/
+bool pkgCacheGenerator::AddNewDescription(ListParser &List, pkgCache::VerIterator &Ver, std::string const &lang, APT::StringView CurMd5, map_stringitem_t &md5idx) /*{{{*/
{
pkgCache::DescIterator Desc;
Dynamic<pkgCache::DescIterator> DynDesc(Desc);
@@ -935,7 +935,7 @@ bool pkgCacheGenerator::NewFileDesc(pkgCache::DescIterator &Desc,
/* This puts a description structure in the linked list */
map_pointer_t pkgCacheGenerator::NewDescription(pkgCache::DescIterator &Desc,
const string &Lang,
- const MD5SumValue &md5sum,
+ APT::StringView md5sum,
map_stringitem_t const idxmd5str)
{
// Get a structure
@@ -955,7 +955,7 @@ map_pointer_t pkgCacheGenerator::NewDescription(pkgCache::DescIterator &Desc,
Desc->md5sum = idxmd5str;
else
{
- map_stringitem_t const idxmd5sum = WriteStringInMap(md5sum.Value());
+ map_stringitem_t const idxmd5sum = WriteStringInMap(md5sum);
if (unlikely(idxmd5sum == 0))
return 0;
Desc->md5sum = idxmd5sum;
@@ -1839,11 +1839,11 @@ bool pkgCacheGenerator::MakeOnlyStatusCache(OpProgress *Progress,DynamicMMap **O
}
/*}}}*/
// IsDuplicateDescription /*{{{*/
-static bool IsDuplicateDescription(pkgCache::DescIterator Desc,
- MD5SumValue const &CurMd5, std::string const &CurLang)
+static bool IsDuplicateDescription(pkgCache &Cache, pkgCache::DescIterator Desc,
+ APT::StringView CurMd5, std::string const &CurLang)
{
// Descriptions in the same link-list have all the same md5
- if (Desc.end() == true || MD5SumValue(Desc.md5()) != CurMd5)
+ if (Desc.end() == true || Cache.ViewString(Desc->md5sum) != CurMd5)
return false;
for (; Desc.end() == false; ++Desc)
if (Desc.LanguageCode() == CurLang)