| // Copyright 2023 The Cobalt Authors. All Rights Reserved. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| #ifndef STARBOARD_NPLB_MAXIMUM_PLAYER_CONFIGURATION_EXPLORER_H_ |
| #define STARBOARD_NPLB_MAXIMUM_PLAYER_CONFIGURATION_EXPLORER_H_ |
| |
| #include <set> |
| #include <string> |
| #include <vector> |
| |
| #include "starboard/drm.h" |
| #include "starboard/nplb/player_test_util.h" |
| #include "starboard/player.h" |
| #include "starboard/shared/starboard/media/media_util.h" |
| #include "starboard/testing/fake_graphics_context_provider.h" |
| |
| namespace starboard { |
| namespace nplb { |
| |
| typedef const std::function<bool(const std::vector<int>&)> PosetSearchFunctor; |
| typedef std::vector<SbPlayerTestConfig> SbPlayerMultiplePlayerTestConfig; |
| |
| // Expose the two functions below for testing. |
| bool PosetContainedByMaxElementsSet( |
| const std::set<std::vector<int>>& max_elements_set, |
| const std::vector<int>& v); |
| std::set<std::vector<int>> SearchPosetMaximalElementsDFS( |
| int resource_types, |
| int max_instances_per_resource, |
| const PosetSearchFunctor& test_functor); |
| |
| // The MaximumPlayerConfigurationExplorer is to get the maximum feasible |
| // configurations for a group of players that the platform can create and run |
| // concurrently. |
| class MaximumPlayerConfigurationExplorer { |
| public: |
| // Note that with the initial implementation, the audio config is ignored. |
| MaximumPlayerConfigurationExplorer( |
| const std::vector<SbPlayerTestConfig>& player_configs, |
| int max_instances_per_config, |
| int max_total_instances, |
| testing::FakeGraphicsContextProvider* fake_graphics_context_provider); |
| ~MaximumPlayerConfigurationExplorer(); |
| |
| std::vector<SbPlayerMultiplePlayerTestConfig> CalculateMaxTestConfigs(); |
| |
| private: |
| struct PlayerInstance { |
| PlayerInstance() |
| : config(nullptr, nullptr, kSbPlayerOutputModeInvalid, "") {} |
| PlayerInstance(SbPlayer player, |
| SbDrmSystem drm_system, |
| const SbPlayerTestConfig& config) |
| : player(player), drm_system(drm_system), config(config) {} |
| SbPlayer player = kSbPlayerInvalid; |
| SbDrmSystem drm_system = kSbDrmSystemInvalid; |
| SbPlayerTestConfig config; |
| }; |
| |
| // Test whether the system can support this particular configuration of |
| // players by creating it. |
| bool IsConfigCreatable(const std::vector<int>& configs_to_create); |
| PlayerInstance CreatePlayerInstance(const SbPlayerTestConfig& config); |
| void DestroyPlayerInstance(const PlayerInstance& instance); |
| |
| const std::vector<SbPlayerTestConfig> player_configs_; |
| const int max_instances_per_config_; |
| const int max_total_instances_; |
| testing::FakeGraphicsContextProvider* fake_graphics_context_provider_; |
| |
| std::vector<std::vector<PlayerInstance>> player_instances_; |
| |
| MaximumPlayerConfigurationExplorer( |
| const MaximumPlayerConfigurationExplorer& other) = delete; |
| MaximumPlayerConfigurationExplorer& operator=( |
| const MaximumPlayerConfigurationExplorer& other) = delete; |
| }; |
| |
| } // namespace nplb |
| } // namespace starboard |
| |
| #endif // STARBOARD_NPLB_MAXIMUM_PLAYER_CONFIGURATION_EXPLORER_H_ |