From fc0fb02fee0b6442c1f2bf0632cf2ae4efbfd0f2 Mon Sep 17 00:00:00 2001 From: Francis Tsui Date: Thu, 7 May 2026 22:18:49 -0700 Subject: [PATCH] Make sure timer is destroyed on the same thread callback is scheduled on. PiperOrigin-RevId: 912325093 --- sharing/internal/api/mock_sharing_platform.h | 2 - sharing/internal/api/sharing_platform.h | 2 - sharing/internal/public/context.h | 3 -- sharing/internal/public/context_impl.cc | 4 -- sharing/internal/public/context_impl.h | 1 - sharing/internal/test/fake_context.cc | 5 +-- sharing/internal/test/fake_context.h | 5 --- sharing/internal/test/fake_context_test.cc | 16 ------- sharing/nearby_connections_manager_impl.cc | 4 +- sharing/nearby_sharing_service_impl.cc | 5 ++- sharing/nearby_sharing_settings.cc | 15 ++++--- sharing/nearby_sharing_settings.h | 9 ++-- sharing/nearby_sharing_settings_test.cc | 36 ++++++++------- sharing/transfer_manager.cc | 17 ++++---- sharing/transfer_manager.h | 8 ++-- sharing/transfer_manager_test.cc | 46 +++++++++++--------- 16 files changed, 77 insertions(+), 101 deletions(-) diff --git a/sharing/internal/api/mock_sharing_platform.h b/sharing/internal/api/mock_sharing_platform.h index 34dbe0cf..c19adcc8 100644 --- a/sharing/internal/api/mock_sharing_platform.h +++ b/sharing/internal/api/mock_sharing_platform.h @@ -24,7 +24,6 @@ #include "absl/strings/string_view.h" #include "internal/base/file_path.h" #include "internal/platform/implementation/device_info.h" -#include "internal/platform/task_runner.h" #include "sharing/internal/api/app_info.h" #include "sharing/internal/api/bluetooth_adapter.h" #include "sharing/internal/api/fast_init_ble_beacon.h" @@ -71,7 +70,6 @@ class MockSharingPlatform : public SharingPlatform { MOCK_METHOD(PreferenceManager&, GetPreferenceManager, (), (override)); MOCK_METHOD(AccountManager&, GetAccountManager, (), (override)); - MOCK_METHOD(TaskRunner&, GetDefaultTaskRunner, (), (override)); MOCK_METHOD(nearby::api::DeviceInfo&, GetDeviceInfo, (), (override)); MOCK_METHOD(std::unique_ptr, CreatePublicCertificateDatabase, (const FilePath& database_path), diff --git a/sharing/internal/api/sharing_platform.h b/sharing/internal/api/sharing_platform.h index c795002e..9aefd967 100644 --- a/sharing/internal/api/sharing_platform.h +++ b/sharing/internal/api/sharing_platform.h @@ -23,7 +23,6 @@ #include "absl/strings/string_view.h" #include "internal/base/file_path.h" #include "internal/platform/implementation/device_info.h" -#include "internal/platform/task_runner.h" #include "sharing/internal/api/app_info.h" #include "sharing/internal/api/bluetooth_adapter.h" #include "sharing/internal/api/fast_init_ble_beacon.h" @@ -64,7 +63,6 @@ class SharingPlatform { virtual PreferenceManager& GetPreferenceManager() = 0; virtual AccountManager& GetAccountManager() = 0; - virtual TaskRunner& GetDefaultTaskRunner() = 0; virtual nearby::api::DeviceInfo& GetDeviceInfo() = 0; virtual std::unique_ptr CreatePublicCertificateDatabase(const FilePath& database_path) = 0; diff --git a/sharing/internal/public/context.h b/sharing/internal/public/context.h index 23c8de03..05b3d25f 100644 --- a/sharing/internal/public/context.h +++ b/sharing/internal/public/context.h @@ -49,9 +49,6 @@ class Context { // count of tasks running at the same time. virtual std::unique_ptr CreateConcurrentTaskRunner( uint32_t concurrent_count) const = 0; - - // Provides the API to retrieve TaskRunner to run a task globally. - virtual TaskRunner* GetTaskRunner() = 0; }; } // namespace nearby diff --git a/sharing/internal/public/context_impl.cc b/sharing/internal/public/context_impl.cc index b439cefa..7aefa05c 100644 --- a/sharing/internal/public/context_impl.cc +++ b/sharing/internal/public/context_impl.cc @@ -70,8 +70,4 @@ std::unique_ptr ContextImpl::CreateConcurrentTaskRunner( return task_runner; } -TaskRunner* ContextImpl::GetTaskRunner() { - return &platform_.GetDefaultTaskRunner(); -} - } // namespace nearby diff --git a/sharing/internal/public/context_impl.h b/sharing/internal/public/context_impl.h index 9775228d..a9078a6a 100644 --- a/sharing/internal/public/context_impl.h +++ b/sharing/internal/public/context_impl.h @@ -43,7 +43,6 @@ class ContextImpl : public Context { std::unique_ptr CreateSequencedTaskRunner() const override; std::unique_ptr CreateConcurrentTaskRunner( uint32_t concurrent_count) const override; - TaskRunner* GetTaskRunner() override; private: nearby::sharing::api::SharingPlatform& platform_; diff --git a/sharing/internal/test/fake_context.cc b/sharing/internal/test/fake_context.cc index 35605bca..37557c15 100644 --- a/sharing/internal/test/fake_context.cc +++ b/sharing/internal/test/fake_context.cc @@ -38,8 +38,7 @@ FakeContext::FakeContext() fake_connectivity_manager_(std::make_unique()), fake_bluetooth_adapter_(std::make_unique()), fake_fast_initiation_manager_( - std::make_unique()), - executor_(std::make_unique(fake_clock_.get(), 5)) {} + std::make_unique()) {} Clock* FakeContext::GetClock() const { return fake_clock_.get(); } @@ -70,6 +69,4 @@ std::unique_ptr FakeContext::CreateConcurrentTaskRunner( return std::make_unique(fake_clock_.get(), concurrent_count); } -TaskRunner* FakeContext::GetTaskRunner() { return executor_.get(); } - } // namespace nearby diff --git a/sharing/internal/test/fake_context.h b/sharing/internal/test/fake_context.h index c637dbf2..5a59879a 100644 --- a/sharing/internal/test/fake_context.h +++ b/sharing/internal/test/fake_context.h @@ -47,7 +47,6 @@ class FakeContext : public Context { std::unique_ptr CreateSequencedTaskRunner() const override; std::unique_ptr CreateConcurrentTaskRunner( uint32_t concurrent_count) const override; - TaskRunner* GetTaskRunner() override; FakeClock* fake_clock() const { return fake_clock_.get(); } FakeConnectivityManager* fake_connectivity_manager() const { @@ -59,9 +58,6 @@ class FakeContext : public Context { FakeFastInitiationManager* fake_fast_initiation_manager() const { return fake_fast_initiation_manager_.get(); } - FakeTaskRunner* fake_task_runner() const { - return executor_.get(); - } FakeTaskRunner* last_sequenced_task_runner() const { return last_sequenced_task_runner_; @@ -72,7 +68,6 @@ class FakeContext : public Context { std::unique_ptr fake_connectivity_manager_; std::unique_ptr fake_bluetooth_adapter_; std::unique_ptr fake_fast_initiation_manager_; - std::unique_ptr executor_; mutable FakeTaskRunner* last_sequenced_task_runner_ = nullptr; }; diff --git a/sharing/internal/test/fake_context_test.cc b/sharing/internal/test/fake_context_test.cc index 0b0c3152..03179926 100644 --- a/sharing/internal/test/fake_context_test.cc +++ b/sharing/internal/test/fake_context_test.cc @@ -15,9 +15,6 @@ #include "sharing/internal/test/fake_context.h" #include "gtest/gtest.h" -#include "absl/synchronization/notification.h" -#include "absl/time/time.h" -#include "internal/platform/task_runner.h" namespace nearby { namespace { @@ -31,18 +28,5 @@ TEST(FakeContext, TestAccessMockContext) { EXPECT_NE(context.CreateConcurrentTaskRunner(5), nullptr); } -TEST(FakeContext, ExecuteTask) { - FakeContext context; - absl::Notification notification; - bool is_called = false; - context.GetTaskRunner()->PostTask([&]() { - is_called = true; - notification.Notify(); - }); - - EXPECT_TRUE(notification.WaitForNotificationWithTimeout(absl::Seconds(1))); - EXPECT_TRUE(is_called); -} - } // namespace } // namespace nearby diff --git a/sharing/nearby_connections_manager_impl.cc b/sharing/nearby_connections_manager_impl.cc index f7154f69..78d1b9db 100644 --- a/sharing/nearby_connections_manager_impl.cc +++ b/sharing/nearby_connections_manager_impl.cc @@ -423,8 +423,8 @@ void NearbyConnectionsManagerImpl::Connect( // Setup transfer manager. if (IsTransportTypeFlagsSet(transport_type, TransportType::kHighQuality)) { - transfer_managers_[endpoint_id] = - std::make_unique(context_, endpoint_id); + transfer_managers_[endpoint_id] = std::make_unique( + connections_callback_task_runner_, endpoint_id); } } diff --git a/sharing/nearby_sharing_service_impl.cc b/sharing/nearby_sharing_service_impl.cc index bba46979..a999d629 100644 --- a/sharing/nearby_sharing_service_impl.cc +++ b/sharing/nearby_sharing_service_impl.cc @@ -259,8 +259,9 @@ NearbySharingServiceImpl::NearbySharingServiceImpl( nearby_fast_initiation_( NearbyFastInitiationImpl::Factory::Create(context_)), settings_(std::make_unique( - context_, context_->GetClock(), device_info_, preference_manager_, - local_device_data_manager_.get(), &analytics_recorder_)), + service_thread_.get(), context_->GetClock(), device_info_, + preference_manager_, local_device_data_manager_.get(), + &analytics_recorder_)), service_extension_(std::make_unique()), file_handler_(sharing_platform), app_info_(sharing_platform.CreateAppInfo()), diff --git a/sharing/nearby_sharing_settings.cc b/sharing/nearby_sharing_settings.cc index baf1118e..8d915aa9 100644 --- a/sharing/nearby_sharing_settings.cc +++ b/sharing/nearby_sharing_settings.cc @@ -22,17 +22,18 @@ #include #include +#include "absl/base/nullability.h" #include "absl/strings/string_view.h" #include "absl/synchronization/mutex.h" #include "absl/time/time.h" #include "internal/platform/clock.h" #include "internal/platform/implementation/device_info.h" +#include "internal/platform/task_runner.h" #include "proto/sharing_enums.pb.h" #include "sharing/analytics/analytics_recorder.h" #include "sharing/common/nearby_share_enums.h" #include "sharing/common/nearby_share_prefs.h" #include "sharing/internal/api/preference_manager.h" -#include "sharing/internal/public/context.h" #include "sharing/internal/public/logging.h" #include "sharing/internal/public/pref_names.h" #include "sharing/local_device_data/nearby_share_local_device_data_manager.h" @@ -70,12 +71,12 @@ ShowNotificationStatus GetNotificationStatus( } // namespace NearbyShareSettings::NearbyShareSettings( - Context* context, nearby::Clock* clock, + TaskRunner* absl_nonnull task_runner, nearby::Clock* absl_nonnull clock, nearby::api::DeviceInfo& device_info, PreferenceManager& preference_manager, NearbyShareLocalDeviceDataManager* local_device_data_manager, analytics::AnalyticsRecorder* analytics_recorder) - : context_(context), - clock_(clock), + : task_runner_(*task_runner), + clock_(*clock), device_info_(device_info), preference_manager_(preference_manager), local_device_data_manager_(local_device_data_manager), @@ -143,7 +144,7 @@ void NearbyShareSettings::StartVisibilityTimer( LOG(INFO) << __func__ << ": start visibility timer. expiration=" << expiration; visibility_expiration_timer_ = std::make_unique( - *context_->GetTaskRunner(), "nearby_share_settings_visibility_timer", + task_runner_, "nearby_share_settings_visibility_timer", expiration, [this]() { LOG(INFO) << __func__ << ": visibility timer expired."; proto::DeviceVisibility visibility; @@ -164,7 +165,7 @@ void NearbyShareSettings::RestoreFallbackVisibility() { static_cast(prefs::kDefaultFallbackVisibility)); fallback_visibility_ = static_cast(fallback_visibility); - int64_t now_seconds = absl::ToUnixSeconds(clock_->Now()); + int64_t now_seconds = absl::ToUnixSeconds(clock_.Now()); int64_t remaining_seconds = expiration_seconds - now_seconds; int64_t diff = kMaxVisibilityExpirationSeconds - remaining_seconds; LOG(INFO) << __func__ << ": diff=" << diff << ", now=" << now_seconds @@ -276,7 +277,7 @@ void NearbyShareSettings::SetVisibility(DeviceVisibility visibility, visibility_expiration_timer_.reset(); SetFallbackVisibility(last_visibility); - absl::Time now = clock_->Now(); + absl::Time now = clock_.Now(); if (expiration != absl::ZeroDuration()) { VLOG(1) << __func__ << ": temporary visibility timer starts."; absl::Time fallback_visibility_timestamp = now + expiration; diff --git a/sharing/nearby_sharing_settings.h b/sharing/nearby_sharing_settings.h index f0793bae..8e40847e 100644 --- a/sharing/nearby_sharing_settings.h +++ b/sharing/nearby_sharing_settings.h @@ -23,6 +23,7 @@ #include #include "location/nearby/sharing/lib/sync/sync_binding_prefs.pb.h" +#include "absl/base/nullability.h" #include "absl/base/thread_annotations.h" #include "absl/strings/string_view.h" #include "absl/synchronization/mutex.h" @@ -30,11 +31,11 @@ #include "internal/base/observer_list.h" #include "internal/platform/clock.h" #include "internal/platform/implementation/device_info.h" +#include "internal/platform/task_runner.h" #include "proto/sharing_enums.pb.h" #include "sharing/analytics/analytics_recorder.h" #include "sharing/common/nearby_share_enums.h" #include "sharing/internal/api/preference_manager.h" -#include "sharing/internal/public/context.h" #include "sharing/internal/public/logging.h" #include "sharing/local_device_data/nearby_share_local_device_data_manager.h" #include "sharing/proto/settings_observer_data.pb.h" @@ -139,7 +140,7 @@ class NearbyShareSettings }; NearbyShareSettings( - Context* context, nearby::Clock* clock, + TaskRunner* absl_nonnull task_runner, nearby::Clock* absl_nonnull clock, nearby::api::DeviceInfo& device_info, nearby::sharing::api::PreferenceManager& preference_manager, NearbyShareLocalDeviceDataManager* local_device_data_manager, @@ -224,8 +225,8 @@ class NearbyShareSettings // Make sure thread safe to access Nearby settings mutable absl::Mutex mutex_; - Context* context_; - nearby::Clock* const clock_; + TaskRunner& task_runner_; + nearby::Clock& clock_; nearby::api::DeviceInfo& device_info_; nearby::sharing::api::PreferenceManager& preference_manager_; NearbyShareLocalDeviceDataManager* const local_device_data_manager_; diff --git a/sharing/nearby_sharing_settings_test.cc b/sharing/nearby_sharing_settings_test.cc index e11e22a1..4e6f029f 100644 --- a/sharing/nearby_sharing_settings_test.cc +++ b/sharing/nearby_sharing_settings_test.cc @@ -29,12 +29,12 @@ #include "absl/time/clock.h" #include "absl/time/time.h" #include "internal/base/files.h" +#include "internal/test/fake_clock.h" #include "internal/test/fake_device_info.h" #include "internal/test/fake_task_runner.h" #include "sharing/common/nearby_share_enums.h" #include "sharing/common/nearby_share_prefs.h" #include "sharing/internal/public/pref_names.h" -#include "sharing/internal/test/fake_context.h" #include "sharing/internal/test/fake_preference_manager.h" #include "sharing/local_device_data/fake_nearby_share_local_device_data_manager.h" #include "sharing/proto/enums.pb.h" @@ -120,11 +120,12 @@ class FakeNearbyShareSettingsObserver : public NearbyShareSettings::Observer { class NearbyShareSettingsTest : public ::testing::Test { public: NearbyShareSettingsTest() - : local_device_data_manager_(kDefaultDeviceName) { + : local_device_data_manager_(kDefaultDeviceName), + fake_task_runner_(&fake_clock_, /*count=*/1) { prefs::RegisterNearbySharingPrefs(preference_manager_); nearby_share_settings_ = std::make_unique( - &context_, context_.GetClock(), fake_device_info_, preference_manager_, - &local_device_data_manager_); + &fake_task_runner_, &fake_clock_, fake_device_info_, + preference_manager_, &local_device_data_manager_); nearby_share_settings_->AddSettingsObserver(&observer_); } @@ -147,11 +148,11 @@ class NearbyShareSettingsTest : public ::testing::Test { // Waits for running tasks to complete. void Flush() { absl::SleepFor(absl::Seconds(1)); - context_.fake_task_runner()->SyncWithTimeout(absl::Milliseconds(200)); + fake_task_runner_.SyncWithTimeout(absl::Milliseconds(200)); } void FastForward(absl::Duration duration) { - context_.fake_clock()->FastForward(duration); + fake_clock_.FastForward(duration); } bool Contains(std::vector v, std::string val) { @@ -164,8 +165,9 @@ class NearbyShareSettingsTest : public ::testing::Test { protected: nearby::FakeDeviceInfo fake_device_info_; nearby::FakePreferenceManager preference_manager_; - FakeContext context_; FakeNearbyShareLocalDeviceDataManager local_device_data_manager_; + FakeClock fake_clock_; + FakeTaskRunner fake_task_runner_; FakeNearbyShareSettingsObserver observer_; std::unique_ptr nearby_share_settings_; }; @@ -301,7 +303,7 @@ TEST_F(NearbyShareSettingsTest, // Set our initial visibility to self share. settings()->SetVisibility(DeviceVisibility::DEVICE_VISIBILITY_SELF_SHARE); // Set everyone mode temporarily. - absl::Time now = context_.GetClock()->Now(); + absl::Time now = fake_clock_.Now(); settings()->SetVisibility( DeviceVisibility::DEVICE_VISIBILITY_EVERYONE, absl::Seconds(prefs::kDefaultMaxVisibilityExpirationSeconds)); @@ -357,7 +359,7 @@ TEST_F(NearbyShareSettingsTest, TemporaryVisibilityIsCorrect) { DeviceVisibility::DEVICE_VISIBILITY_UNSPECIFIED); EXPECT_EQ(fallback_visibility.fallback_time, absl::UnixEpoch()); // Transition to temporary everyone mode. - absl::Time now = context_.GetClock()->Now(); + absl::Time now = fake_clock_.Now(); settings()->SetVisibility( DeviceVisibility::DEVICE_VISIBILITY_EVERYONE, absl::Seconds(prefs::kDefaultMaxVisibilityExpirationSeconds)); @@ -378,7 +380,7 @@ TEST_F(NearbyShareSettingsTest, SetVisibilityWithExpirationTooLong) { absl::Hours(1)); // Expiration capped at 10minutes. absl::Time expected_fallback_time = - context_.GetClock()->Now() + absl::Minutes(10); + fake_clock_.Now() + absl::Minutes(10); NearbyShareSettings::FallbackVisibilityInfo fallback_visibility = settings()->GetFallbackVisibility(); // default visibility was hidden. @@ -420,7 +422,8 @@ TEST_F(NearbyShareSettingsTest, SetSyncBindingPerfs_Success) { TEST(NearbyShareVisibilityTest, RestoresFallbackVisibility_ExpiredTimer) { // Create Nearby Share settings dependencies. - FakeContext context; + FakeClock fake_clock; + FakeTaskRunner fake_task_runner(&fake_clock, /*count=*/1); FakeDeviceInfo fake_device_info; FakePreferenceManager preference_manager; FakeNearbyShareLocalDeviceDataManager local_device_data_manager( @@ -432,13 +435,13 @@ TEST(NearbyShareVisibilityTest, RestoresFallbackVisibility_ExpiredTimer) { // Set expiration to 10 seconds ago. preference_manager.SetInteger( PrefNames::kVisibilityExpirationSeconds, - absl::ToUnixSeconds(context.GetClock()->Now() - absl::Seconds(10))); + absl::ToUnixSeconds(fake_clock.Now() - absl::Seconds(10))); // Set fallback visibility to self share. preference_manager.SetInteger( PrefNames::kFallbackVisibility, static_cast(DeviceVisibility::DEVICE_VISIBILITY_SELF_SHARE)); // Create a Nearby Share settings instance. - NearbyShareSettings settings(&context, context.GetClock(), fake_device_info, + NearbyShareSettings settings(&fake_task_runner, &fake_clock, fake_device_info, preference_manager, &local_device_data_manager); // Make sure we restore the correct visibility. @@ -448,7 +451,8 @@ TEST(NearbyShareVisibilityTest, RestoresFallbackVisibility_ExpiredTimer) { TEST(NearbyShareVisibilityTest, RestoresFallbackVisibility_FutureTimer) { // Create Nearby Share settings dependencies. - FakeContext context; + FakeClock fake_clock; + FakeTaskRunner fake_task_runner(&fake_clock, /*count=*/1); FakeDeviceInfo fake_device_info; FakePreferenceManager preference_manager; FakeNearbyShareLocalDeviceDataManager local_device_data_manager( @@ -460,13 +464,13 @@ TEST(NearbyShareVisibilityTest, RestoresFallbackVisibility_FutureTimer) { // Set expiration to 10 seconds in the future. preference_manager.SetInteger( PrefNames::kVisibilityExpirationSeconds, - absl::ToUnixSeconds(context.GetClock()->Now() + absl::Seconds(10))); + absl::ToUnixSeconds(fake_clock.Now() + absl::Seconds(10))); // Set fallback visibility to self share. preference_manager.SetInteger( PrefNames::kFallbackVisibility, static_cast(DeviceVisibility::DEVICE_VISIBILITY_SELF_SHARE)); // Create a Nearby Share settings instance. - NearbyShareSettings settings(&context, context.GetClock(), fake_device_info, + NearbyShareSettings settings(&fake_task_runner, &fake_clock, fake_device_info, preference_manager, &local_device_data_manager); // Make sure we restore the correct visibility. diff --git a/sharing/transfer_manager.cc b/sharing/transfer_manager.cc index dede2870..863c970e 100644 --- a/sharing/transfer_manager.cc +++ b/sharing/transfer_manager.cc @@ -19,10 +19,10 @@ #include #include +#include "absl/base/nullability.h" #include "absl/strings/string_view.h" #include "absl/synchronization/mutex.h" -#include "absl/time/time.h" -#include "sharing/internal/public/context.h" +#include "internal/platform/task_runner.h" #include "sharing/internal/public/logging.h" #include "sharing/nearby_connections_types.h" #include "sharing/thread_timer.h" @@ -43,9 +43,9 @@ bool IsHighQualityMedium(Medium medium) { } // namespace -TransferManager::TransferManager(Context* context, +TransferManager::TransferManager(TaskRunner* absl_nonnull runner, absl::string_view endpoint_id) - : context_(context), endpoint_id_(endpoint_id) {} + : runner_(*runner), endpoint_id_(endpoint_id) {} TransferManager::~TransferManager() { absl::MutexLock lock(mutex_); @@ -101,8 +101,8 @@ bool TransferManager::StartTransfer() { } timeout_timer_ = std::make_unique( - *context_->GetTaskRunner(), "transfer_manager_timeout_timer", - kMediumUpgradeTimeout, [this]() { + runner_, "transfer_manager_timeout_timer", kMediumUpgradeTimeout, + [this]() { absl::MutexLock lock(mutex_); LOG(INFO) << "Timed out for endpoint " << endpoint_id_ << " after " @@ -113,8 +113,7 @@ bool TransferManager::StartTransfer() { LOG(INFO) << "Attempting to upgrade the bandwidth for endpoint " + endpoint_id_ + ". Large payloads will be delayed" + " until either bandwidth is upgraded or a timeout of " - << (kMediumUpgradeTimeout / absl::Milliseconds(1)) - << " milliseconds is reached"; + << kMediumUpgradeTimeout << " is reached"; return true; } @@ -132,6 +131,7 @@ bool TransferManager::CancelTransfer() { } void TransferManager::StopWaitingForHighQualityMedium() { + timeout_timer_.reset(); is_waiting_for_high_quality_medium_ = false; for (const auto& task : pending_tasks_) { @@ -140,7 +140,6 @@ void TransferManager::StopWaitingForHighQualityMedium() { } pending_tasks_.clear(); - timeout_timer_.reset(); } } // namespace sharing diff --git a/sharing/transfer_manager.h b/sharing/transfer_manager.h index e33d1f33..e19f248c 100644 --- a/sharing/transfer_manager.h +++ b/sharing/transfer_manager.h @@ -20,11 +20,12 @@ #include #include +#include "absl/base/nullability.h" #include "absl/base/thread_annotations.h" #include "absl/strings/string_view.h" #include "absl/synchronization/mutex.h" #include "absl/time/time.h" -#include "sharing/internal/public/context.h" +#include "internal/platform/task_runner.h" #include "sharing/nearby_connections_types.h" #include "sharing/thread_timer.h" @@ -39,7 +40,8 @@ class TransferManager { // Used to wait for the medium upgrade. static constexpr absl::Duration kMediumUpgradeTimeout = absl::Seconds(10); - TransferManager(Context* context, absl::string_view endpoint_id); + TransferManager(TaskRunner* absl_nonnull runner, + absl::string_view endpoint_id); ~TransferManager(); @@ -52,7 +54,7 @@ class TransferManager { private: void StopWaitingForHighQualityMedium() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mutex_); - Context* context_; + TaskRunner& runner_; std::string endpoint_id_; absl::Mutex mutex_; bool is_waiting_for_high_quality_medium_ ABSL_GUARDED_BY(mutex_) = true; diff --git a/sharing/transfer_manager_test.cc b/sharing/transfer_manager_test.cc index f6ed6fc0..f46869f5 100644 --- a/sharing/transfer_manager_test.cc +++ b/sharing/transfer_manager_test.cc @@ -21,7 +21,7 @@ #include "absl/synchronization/notification.h" #include "absl/time/time.h" #include "internal/test/fake_clock.h" -#include "sharing/internal/test/fake_context.h" +#include "internal/test/fake_task_runner.h" #include "sharing/nearby_connections_types.h" namespace nearby { @@ -32,11 +32,12 @@ constexpr absl::string_view kEndpointId = "endpoint"; constexpr absl::Duration kNotificationTimeout = absl::Milliseconds(200); TEST(TransferManager, MediumUpgradeSuccess) { - FakeContext context; + FakeClock fake_clock; + FakeTaskRunner executor(&fake_clock, /*concurrent_count=*/1); absl::Notification notification; bool is_called = false; - TransferManager transfer_manager{&context, kEndpointId}; + TransferManager transfer_manager{&executor, kEndpointId}; transfer_manager.Send([&]() { is_called = true; notification.Notify(); @@ -53,11 +54,12 @@ TEST(TransferManager, MediumUpgradeSuccess) { } TEST(TransferManager, SendAfterMediumUpgradeSuccess) { - FakeContext context; + FakeClock fake_clock; + FakeTaskRunner executor(&fake_clock, /*concurrent_count=*/1); absl::Notification notification; bool is_called = false; - TransferManager transfer_manager{&context, kEndpointId}; + TransferManager transfer_manager{&executor, kEndpointId}; transfer_manager.Send([&]() { is_called = true; notification.Notify(); @@ -75,11 +77,12 @@ TEST(TransferManager, SendAfterMediumUpgradeSuccess) { } TEST(TransferManager, MediumUpgradeFailed) { - FakeContext context; + FakeClock fake_clock; + FakeTaskRunner executor(&fake_clock, /*concurrent_count=*/1); absl::Notification notification; bool is_called = false; - TransferManager transfer_manager{&context, kEndpointId}; + TransferManager transfer_manager{&executor, kEndpointId}; transfer_manager.Send([&]() { is_called = true; notification.Notify(); @@ -94,11 +97,12 @@ TEST(TransferManager, MediumUpgradeFailed) { } TEST(TransferManager, MediumUpgradeTimeout) { - FakeContext context; + FakeClock fake_clock; + FakeTaskRunner executor(&fake_clock, /*concurrent_count=*/1); absl::Notification notification; bool is_called = false; - TransferManager transfer_manager{&context, kEndpointId}; + TransferManager transfer_manager{&executor, kEndpointId}; transfer_manager.Send([&]() { is_called = true; notification.Notify(); @@ -106,8 +110,7 @@ TEST(TransferManager, MediumUpgradeTimeout) { ASSERT_FALSE(is_called); ASSERT_TRUE(transfer_manager.StartTransfer()); - FakeClock* clock = static_cast(context.GetClock()); - clock->FastForward(TransferManager::kMediumUpgradeTimeout); + fake_clock.FastForward(TransferManager::kMediumUpgradeTimeout); ASSERT_TRUE( notification.WaitForNotificationWithTimeout(kNotificationTimeout)); @@ -115,11 +118,12 @@ TEST(TransferManager, MediumUpgradeTimeout) { } TEST(TransferManager, CancelStartedTransfer) { - FakeContext context; + FakeClock fake_clock; + FakeTaskRunner executor(&fake_clock, /*concurrent_count=*/1); absl::Notification notification; bool is_called = false; - TransferManager transfer_manager{&context, kEndpointId}; + TransferManager transfer_manager{&executor, kEndpointId}; transfer_manager.Send([&]() { is_called = true; notification.Notify(); @@ -127,8 +131,7 @@ TEST(TransferManager, CancelStartedTransfer) { ASSERT_FALSE(is_called); ASSERT_TRUE(transfer_manager.StartTransfer()); - FakeClock* clock = static_cast(context.GetClock()); - clock->FastForward(absl::Seconds(5)); + fake_clock.FastForward(absl::Seconds(5)); ASSERT_TRUE(transfer_manager.CancelTransfer()); ASSERT_FALSE( @@ -137,11 +140,12 @@ TEST(TransferManager, CancelStartedTransfer) { } TEST(TransferManager, CancelTimedOutMediumUpgrade) { - FakeContext context; + FakeClock fake_clock; + FakeTaskRunner executor(&fake_clock, /*concurrent_count=*/1); absl::Notification notification; bool is_called = false; - TransferManager transfer_manager{&context, kEndpointId}; + TransferManager transfer_manager{&executor, kEndpointId}; transfer_manager.Send([&]() { is_called = true; notification.Notify(); @@ -149,8 +153,7 @@ TEST(TransferManager, CancelTimedOutMediumUpgrade) { ASSERT_FALSE(is_called); ASSERT_TRUE(transfer_manager.StartTransfer()); - FakeClock* clock = static_cast(context.GetClock()); - clock->FastForward(TransferManager::kMediumUpgradeTimeout); + fake_clock.FastForward(TransferManager::kMediumUpgradeTimeout); ASSERT_TRUE( notification.WaitForNotificationWithTimeout(kNotificationTimeout)); @@ -159,11 +162,12 @@ TEST(TransferManager, CancelTimedOutMediumUpgrade) { } TEST(TransferManager, MediumUpgradeBeforeStartTransfer) { - FakeContext context; + FakeClock fake_clock; + FakeTaskRunner executor(&fake_clock, /*concurrent_count=*/1); absl::Notification notification; bool is_called = false; - TransferManager transfer_manager{&context, kEndpointId}; + TransferManager transfer_manager{&executor, kEndpointId}; transfer_manager.Send([&]() { is_called = true; notification.Notify();