From 100ab8e90be161e96333ca493e7d5f0342799cfa Mon Sep 17 00:00:00 2001 From: Terry Mancey Date: Tue, 5 Oct 2021 10:06:19 -0500 Subject: [PATCH] Fixes high CPU usage while Brave ads is enabled --- .../ad_notifications/ad_notification_serving.cc | 10 ++++++++++ .../ad_notifications/ad_notification_serving.h | 2 ++ vendor/bat-native-ads/src/bat/ads/internal/ads_impl.cc | 6 +++--- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/vendor/bat-native-ads/src/bat/ads/internal/ad_serving/ad_notifications/ad_notification_serving.cc b/vendor/bat-native-ads/src/bat/ads/internal/ad_serving/ad_notifications/ad_notification_serving.cc index 48f2906280ad..72972efcd8c5 100644 --- a/vendor/bat-native-ads/src/bat/ads/internal/ad_serving/ad_notifications/ad_notification_serving.cc +++ b/vendor/bat-native-ads/src/bat/ads/internal/ad_serving/ad_notifications/ad_notification_serving.cc @@ -97,6 +97,12 @@ void AdServing::StopServingAdsAtRegularIntervals() { } void AdServing::MaybeServeAd() { + if (is_serving_) { + return; + } + + is_serving_ = true; + frequency_capping::PermissionRules permission_rules; if (!permission_rules.HasPermission()) { BLOG(1, "Ad notification not served: Not allowed due to permission rules"); @@ -281,6 +287,8 @@ bool AdServing::ServeAd( } void AdServing::FailedToServeAd() { + is_serving_ = false; + NotifyFailedToServeAdNotification(); RetryServingAdAtNextInterval(); @@ -290,6 +298,8 @@ void AdServing::ServedAd( const CreativeAdNotificationInfo& creative_ad_notification) { eligible_ads_->SetLastServedAd(creative_ad_notification); + is_serving_ = false; + MaybeServeAdAtNextRegularInterval(); } diff --git a/vendor/bat-native-ads/src/bat/ads/internal/ad_serving/ad_notifications/ad_notification_serving.h b/vendor/bat-native-ads/src/bat/ads/internal/ad_serving/ad_notifications/ad_notification_serving.h index 2f8268ec1525..04b5c979d3df 100644 --- a/vendor/bat-native-ads/src/bat/ads/internal/ad_serving/ad_notifications/ad_notification_serving.h +++ b/vendor/bat-native-ads/src/bat/ads/internal/ad_serving/ad_notifications/ad_notification_serving.h @@ -56,6 +56,8 @@ class AdServing final { void OnAdsPerHourChanged(); private: + bool is_serving_ = false; + Timer timer_; std::unique_ptr eligible_ads_; diff --git a/vendor/bat-native-ads/src/bat/ads/internal/ads_impl.cc b/vendor/bat-native-ads/src/bat/ads/internal/ads_impl.cc index fe8603e2ab4b..9e6f88515fa9 100644 --- a/vendor/bat-native-ads/src/bat/ads/internal/ads_impl.cc +++ b/vendor/bat-native-ads/src/bat/ads/internal/ads_impl.cc @@ -214,11 +214,11 @@ void AdsImpl::OnUnIdle(const int idle_time, const bool was_locked) { return; } - auto unidle_timestamp_diagnostics = + auto last_unidle_timestamp_diagnostics = std::make_unique(); - unidle_timestamp_diagnostics->SetLastUnIdleTimestamp(base::Time::Now()); + last_unidle_timestamp_diagnostics->SetLastUnIdleTimestamp(base::Time::Now()); AdDiagnostics::Get()->SetDiagnosticsEntry( - std::move(unidle_timestamp_diagnostics)); + std::move(last_unidle_timestamp_diagnostics)); MaybeUpdateIdleTimeThreshold();