diff options
author | Julian Andres Klode <jak@debian.org> | 2016-09-28 00:49:45 +0200 |
---|---|---|
committer | Julian Andres Klode <jak@debian.org> | 2016-11-22 22:58:33 +0100 |
commit | 49521f87851089bdb4097b715d09a8bd348aa60a (patch) | |
tree | 7cedcd05be67505f4949eb18dbe155178b76e4bb /apt-pkg/pkgcachegen.cc | |
parent | c0723bf1a60daf45096998d4ae9feee3c44343f8 (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.cc | 26 |
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) |