TaskScheduler: Avoid Sequence refcount bump in GetWork()
vmpstr@ discovered an implicit copy constructor resulting
in a refcount bump in https://codereview.chromium.org/1895903003/
and made it explicit in https://codereview.chromium.org/1901223003/
this CL removes the need for it via a couple changes:
1) Make SequenceAndSortKey move-only
- Allows it to be in std::priority_queue without std::unique_ptr's
- Less pointer chasing == yay?!
- Removing need for custom SequenceAndSortKeyComparator.
2) Add a take_sequence() method to it:
- Allows to take its Sequence without refbump on Pop()
3) Make it a private implementation detail and make Transaction's API:
- Push(sequence,sort_key), PeekSortKey(), PopSequence()
4) Do fdoray's TODO on adding IsEmpty() to Transaction's API:
- Removes need for null SequenceAndSortKey (required change to allow for PeekSortKey).
5) Make SequenceSortKey copyable.
- Required for SequenceAndSortKey's move constructor
- Means it turns into a class with operator== for tests instead of custom
test member verifiers.
Might have been able to split these up but they all line up fairly nicely
and don't amount to a crazy amount of code so here it is :-).
BUG=553459
Review-Url: https://codereview.chromium.org/1903133003
Cr-Commit-Position: refs/heads/master@{#390451}
10 files changed