// Copyright 2019 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_PERFORMANCE_MANAGER_EXECUTION_CONTEXT_PRIORITY_BOOSTING_VOTE_AGGREGATOR_H_ #define COMPONENTS_PERFORMANCE_MANAGER_EXECUTION_CONTEXT_PRIORITY_BOOSTING_VOTE_AGGREGATOR_H_ #include <map> #include <optional> #include <set> #include "base/memory/raw_ptr.h" #include "base/task/task_traits.h" #include "components/performance_manager/public/execution_context_priority/execution_context_priority.h" namespace performance_manager { namespace execution_context_priority { class BoostingVoteAggregator; // A BoostingVote is a special kind of relative vote that allows a voter to // express that "execution context X should have the same or greater priority // than execution context Y". It allows implementing priority boost semantics to // avoid priority inversions for access to shared resources. BoostingVotes must // be registered with a BoostingVoteAggregator. Similar to a VoteReceipt, they // are a move-only type and their vote will be removed with their destruction. // // A BoostingVote is considered "active" if it is associated with an aggregator // (the result of calling "aggregator()" is non-null). // // See comments in the implementation for details on how the algorithm works. class BoostingVote { … }; // The BoostingVoteAggregator allows for incoming votes to be modified via a // collection of registered "relative boosting votes" that express relationships // such as "execution context X should have the same or greater priority than // execution context Y". It is intended to serve as the root of a tree of voters // and aggregators, allowing priority boost semantics to be implemented. This // class must outlive all boosting votes registered with it. class BoostingVoteAggregator : public VoteObserver { … }; } // namespace execution_context_priority } // namespace performance_manager #endif // COMPONENTS_PERFORMANCE_MANAGER_EXECUTION_CONTEXT_PRIORITY_BOOSTING_VOTE_AGGREGATOR_H_