mirror of
https://github.com/transmission/transmission
synced 2024-12-24 08:43:27 +00:00
fix: 4.0.2 wishlist CPU perf regression pt. 1 (#5266)
This commit is contained in:
parent
652c4666dc
commit
58ce7bd437
3 changed files with 10 additions and 14 deletions
1
.github/workflows/actions.yml
vendored
1
.github/workflows/actions.yml
vendored
|
@ -738,6 +738,7 @@ jobs:
|
||||||
set -ex
|
set -ex
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install -y --no-install-recommends \
|
sudo apt-get install -y --no-install-recommends \
|
||||||
|
appstream \
|
||||||
ca-certificates \
|
ca-certificates \
|
||||||
clang \
|
clang \
|
||||||
cmake \
|
cmake \
|
||||||
|
|
|
@ -62,17 +62,17 @@ void tr_file_piece_map::reset(tr_torrent_metainfo const& tm)
|
||||||
|
|
||||||
tr_file_piece_map::file_span_t tr_file_piece_map::fileSpan(tr_piece_index_t piece) const
|
tr_file_piece_map::file_span_t tr_file_piece_map::fileSpan(tr_piece_index_t piece) const
|
||||||
{
|
{
|
||||||
auto compare = CompareToSpan<tr_piece_index_t>{};
|
constexpr auto Compare = CompareToSpan<tr_piece_index_t>{};
|
||||||
auto const begin = std::begin(file_pieces_);
|
auto const begin = std::begin(file_pieces_);
|
||||||
auto const& [equal_begin, equal_end] = std::equal_range(begin, std::end(file_pieces_), piece, compare);
|
auto const& [equal_begin, equal_end] = std::equal_range(begin, std::end(file_pieces_), piece, Compare);
|
||||||
return { tr_piece_index_t(std::distance(begin, equal_begin)), tr_piece_index_t(std::distance(begin, equal_end)) };
|
return { tr_piece_index_t(equal_begin - begin), tr_piece_index_t(equal_end - begin) };
|
||||||
}
|
}
|
||||||
|
|
||||||
tr_file_piece_map::file_offset_t tr_file_piece_map::fileOffset(uint64_t offset) const
|
tr_file_piece_map::file_offset_t tr_file_piece_map::fileOffset(uint64_t offset) const
|
||||||
{
|
{
|
||||||
auto compare = CompareToSpan<uint64_t>{};
|
constexpr auto Compare = CompareToSpan<uint64_t>{};
|
||||||
auto const begin = std::begin(file_bytes_);
|
auto const begin = std::begin(file_bytes_);
|
||||||
auto const it = std::lower_bound(begin, std::end(file_bytes_), offset, compare);
|
auto const it = std::lower_bound(begin, std::end(file_bytes_), offset, Compare);
|
||||||
tr_file_index_t const file_index = std::distance(begin, it);
|
tr_file_index_t const file_index = std::distance(begin, it);
|
||||||
auto const file_offset = offset - it->begin;
|
auto const file_offset = offset - it->begin;
|
||||||
return file_offset_t{ file_index, file_offset };
|
return file_offset_t{ file_index, file_offset };
|
||||||
|
@ -124,11 +124,6 @@ tr_priority_t tr_file_priorities::filePriority(tr_file_index_t file) const
|
||||||
|
|
||||||
tr_priority_t tr_file_priorities::piecePriority(tr_piece_index_t piece) const
|
tr_priority_t tr_file_priorities::piecePriority(tr_piece_index_t piece) const
|
||||||
{
|
{
|
||||||
if (std::empty(*fpm_)) // not initialized yet
|
|
||||||
{
|
|
||||||
return TR_PRI_NORMAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// increase priority if a file begins or ends in this piece
|
// increase priority if a file begins or ends in this piece
|
||||||
// because that makes life easier for code/users using at incomplete files.
|
// because that makes life easier for code/users using at incomplete files.
|
||||||
// Xrefs: f2daeb242, https://forum.transmissionbt.com/viewtopic.php?t=10473
|
// Xrefs: f2daeb242, https://forum.transmissionbt.com/viewtopic.php?t=10473
|
||||||
|
|
|
@ -89,7 +89,7 @@ private:
|
||||||
{
|
{
|
||||||
using span_t = index_span_t<T>;
|
using span_t = index_span_t<T>;
|
||||||
|
|
||||||
int compare(T item, span_t span) const // <=>
|
[[nodiscard]] constexpr int compare(T item, span_t span) const // <=>
|
||||||
{
|
{
|
||||||
if (item < span.begin)
|
if (item < span.begin)
|
||||||
{
|
{
|
||||||
|
@ -104,17 +104,17 @@ private:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator()(T item, span_t span) const // <
|
[[nodiscard]] constexpr bool operator()(T item, span_t span) const // <
|
||||||
{
|
{
|
||||||
return compare(item, span) < 0;
|
return compare(item, span) < 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int compare(span_t span, T item) const // <=>
|
[[nodiscard]] constexpr int compare(span_t span, T item) const // <=>
|
||||||
{
|
{
|
||||||
return -compare(item, span);
|
return -compare(item, span);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator()(span_t span, T item) const // <
|
[[nodiscard]] constexpr bool operator()(span_t span, T item) const // <
|
||||||
{
|
{
|
||||||
return compare(span, item) < 0;
|
return compare(span, item) < 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue