| // Copyright 2020 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SRC_MEDIA_AUDIO_AUDIO_CORE_TESTING_FAKE_PROFILE_PROVIDER_H_ |
| #define SRC_MEDIA_AUDIO_AUDIO_CORE_TESTING_FAKE_PROFILE_PROVIDER_H_ |
| |
| #include <fuchsia/scheduler/cpp/fidl.h> |
| #include <lib/fidl/cpp/binding_set.h> |
| |
| #include <cstdint> |
| #include <unordered_set> |
| |
| namespace media::audio { |
| |
| class FakeProfileProvider : public fuchsia::scheduler::ProfileProvider { |
| public: |
| fidl::InterfaceRequestHandler<fuchsia::scheduler::ProfileProvider> GetHandler() { |
| return bindings_.GetHandler(this); |
| } |
| |
| // |GetProfile| will return ZX_ERR_NOT_FOUND/ZX_HANDLE_INVALID for any priority that has not |
| // previously been marked as valid with a call to |SetProfile|. |
| // |
| // Note that currently the only works for a single |GetProfile| call since we don't duplicate |
| // a new handle before sending it back to the client. |
| bool SetProfile(uint32_t priority) { return valid_priorities_.insert(priority).second; } |
| |
| private: |
| // |fuchsia::scheduler::ProfileProvider| |
| void GetProfile(uint32_t priority, std::string name, GetProfileCallback callback) override { |
| auto it = valid_priorities_.find(priority); |
| if (it == valid_priorities_.end()) { |
| callback(ZX_ERR_NOT_FOUND, zx::profile()); |
| } else { |
| callback(ZX_OK, zx::profile()); |
| } |
| } |
| |
| // |fuchsia::scheduler::ProfileProvider| |
| // TODO(eieio): Temporary until the deadline scheduler fully lands in tree. |
| void GetDeadlineProfile(uint64_t capacity, uint64_t deadline, uint64_t period, std::string name, |
| GetProfileCallback callback) override { |
| // This will fail if used (ex: zx_object_set_profile), but allows us to do some testing of the |
| // consuming code. |
| callback(ZX_OK, zx::profile()); |
| } |
| |
| // |fuchsia::scheduler::ProfileProvider| |
| void GetCpuAffinityProfile(fuchsia::scheduler::CpuSet cpu_mask, |
| GetProfileCallback callback) override {} |
| |
| // |fuchsia::scheduler::ProfileProvider| |
| void SetProfileByRole(zx::thread thread, std::string role, |
| SetProfileByRoleCallback callback) override { |
| callback(ZX_ERR_NOT_SUPPORTED); |
| } |
| |
| std::unordered_set<uint32_t> valid_priorities_; |
| fidl::BindingSet<fuchsia::scheduler::ProfileProvider> bindings_; |
| }; |
| |
| } // namespace media::audio |
| |
| #endif // SRC_MEDIA_AUDIO_AUDIO_CORE_TESTING_FAKE_PROFILE_PROVIDER_H_ |