Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(24)

Unified Diff: components/ntp_snippets/remote/remote_suggestions_scheduler_impl.cc

Issue 2794313002: [Remote suggestions] Prioritize wifi for soft fetches. (Closed)
Patch Set: Minor polish Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/ntp_snippets/remote/remote_suggestions_scheduler_impl.cc
diff --git a/components/ntp_snippets/remote/remote_suggestions_scheduler_impl.cc b/components/ntp_snippets/remote/remote_suggestions_scheduler_impl.cc
index 253d41593190acab34598994a9ba3d83b099f069..5b9739dcf47fcf8b275fdef9f8e4b23e988f136a 100644
--- a/components/ntp_snippets/remote/remote_suggestions_scheduler_impl.cc
+++ b/components/ntp_snippets/remote/remote_suggestions_scheduler_impl.cc
@@ -22,6 +22,7 @@
#include "components/ntp_snippets/user_classifier.h"
#include "components/prefs/pref_registry_simple.h"
#include "components/prefs/pref_service.h"
+#include "net/base/network_change_notifier.h"
namespace ntp_snippets {
@@ -38,8 +39,8 @@ namespace {
enum class FetchingInterval {
PERSISTENT_FALLBACK,
PERSISTENT_WIFI,
- SOFT_ON_USAGE_EVENT,
- SOFT_ON_NTP_OPENED,
+ SOFT_FALLBACK,
+ SOFT_WIFI,
COUNT
};
@@ -51,7 +52,7 @@ enum class FetchingInterval {
// the arrays can be overridden using different variation parameters.
const double kDefaultFetchingIntervalHoursRareNtpUser[] = {48.0, 24.0, 12.0,
6.0};
-const double kDefaultFetchingIntervalHoursActiveNtpUser[] = {24.0, 6.0, 2.0,
+const double kDefaultFetchingIntervalHoursActiveNtpUser[] = {24.0, 6.0, 4.0,
Marc Treib 2017/04/04 13:28:16 Any particular reason for this change?
jkrcal 2017/04/05 17:32:56 Yes, for two reasons: - I would like to be cautio
Marc Treib 2017/04/06 08:29:23 Then, arguably, all the changes to the defaults sh
jkrcal 2017/04/06 12:04:07 Acknowledged.
2.0};
const double kDefaultFetchingIntervalHoursActiveSuggestionsConsumer[] = {
24.0, 6.0, 2.0, 1.0};
@@ -61,18 +62,18 @@ const double kDefaultFetchingIntervalHoursActiveSuggestionsConsumer[] = {
const char* kFetchingIntervalParamNameRareNtpUser[] = {
"fetching_interval_hours-fallback-rare_ntp_user",
"fetching_interval_hours-wifi-rare_ntp_user",
- "soft_fetching_interval_hours-active-rare_ntp_user",
- "soft_on_ntp_opened_interval_hours-rare_ntp_user"};
Marc Treib 2017/04/04 13:28:15 Removing the existing params means we'll have to u
jkrcal 2017/04/05 17:32:56 I'll update the current finch configs asap and cre
+ "soft_fetching_interval_hours-fallback-rare_ntp_user",
+ "soft_fetching_interval_hours-wifi-rare_ntp_user"};
const char* kFetchingIntervalParamNameActiveNtpUser[] = {
"fetching_interval_hours-fallback-active_ntp_user",
"fetching_interval_hours-wifi-active_ntp_user",
- "soft_fetching_interval_hours-active-active_ntp_user",
- "soft_on_ntp_opened_interval_hours-active_ntp_user"};
+ "soft_fetching_interval_hours-fallback-active_ntp_user",
+ "soft_fetching_interval_hours-wifi-active_ntp_user"};
const char* kFetchingIntervalParamNameActiveSuggestionsConsumer[] = {
"fetching_interval_hours-fallback-active_suggestions_consumer",
"fetching_interval_hours-wifi-active_suggestions_consumer",
- "soft_fetching_interval_hours-active-active_suggestions_consumer",
- "soft_on_ntp_opened_interval_hours-active_suggestions_consumer"};
+ "soft_fetching_interval_hours-fallback-active_suggestions_consumer",
+ "soft_fetching_interval_hours-wifi-active_suggestions_consumer"};
static_assert(
static_cast<unsigned int>(FetchingInterval::COUNT) ==
@@ -98,6 +99,11 @@ const char* kTriggerTypesParamValueForEmptyList = "-";
const int kBlockBackgroundFetchesMinutesAfterClearingHistory = 30;
+const char kSnippetSoftFetchingIntervalOnUsageEventDeprecated[] =
+ "ntp_snippets.soft_fetching_interval_on_usage_event";
+const char kSnippetSoftFetchingIntervalOnNtpOpenedDeprecated[] =
+ "ntp_snippets.soft_fetching_interval_on_ntp_opened";
Marc Treib 2017/04/04 13:28:15 I recently learned of a good place for that kind o
jkrcal 2017/04/05 17:32:56 Ah, interesting, thanks for the pointer! I'd keep
Marc Treib 2017/04/06 08:29:23 FWIW, bauerb@ and battre@ are both owners, so no t
jkrcal 2017/04/06 12:04:08 Acknowledged.
+
// Returns the time interval to use for scheduling remote suggestion fetches for
// the given interval and user_class.
base::TimeDelta GetDesiredFetchingInterval(
@@ -132,6 +138,16 @@ base::TimeDelta GetDesiredFetchingInterval(
return base::TimeDelta::FromSecondsD(value_hours * 3600.0);
}
+bool IsOnWifi() {
+ net::NetworkChangeNotifier::ConnectionType connection_type =
+ net::NetworkChangeNotifier::GetConnectionType();
+ // Return true for Wi-Fi (and any other likely unmetered connection type).
Marc Treib 2017/04/04 13:28:16 Hm yeah, "wifi" is really a misnomer, also for the
jkrcal 2017/04/05 17:32:56 Yeah, I've updated the comments to explain what we
+ return (connection_type ==
+ net::NetworkChangeNotifier::ConnectionType::CONNECTION_WIFI ||
+ connection_type ==
+ net::NetworkChangeNotifier::ConnectionType::CONNECTION_ETHERNET);
+}
+
} // namespace
class EulaState : public web_resource::EulaAcceptedNotifier::Observer {
@@ -183,8 +199,8 @@ bool RemoteSuggestionsSchedulerImpl::FetchingSchedule::operator==(
const FetchingSchedule& other) const {
return interval_persistent_wifi == other.interval_persistent_wifi &&
interval_persistent_fallback == other.interval_persistent_fallback &&
- interval_soft_on_usage_event == other.interval_soft_on_usage_event &&
- interval_soft_on_ntp_opened == other.interval_soft_on_ntp_opened;
+ interval_soft_wifi == other.interval_soft_wifi &&
+ interval_soft_fallback == other.interval_soft_fallback;
}
bool RemoteSuggestionsSchedulerImpl::FetchingSchedule::operator!=(
@@ -195,8 +211,7 @@ bool RemoteSuggestionsSchedulerImpl::FetchingSchedule::operator!=(
bool RemoteSuggestionsSchedulerImpl::FetchingSchedule::is_empty() const {
return interval_persistent_wifi.is_zero() &&
interval_persistent_fallback.is_zero() &&
- interval_soft_on_usage_event.is_zero() &&
- interval_soft_on_ntp_opened.is_zero();
+ interval_soft_wifi.is_zero() && interval_soft_fallback.is_zero();
}
// The TriggerType enum specifies values for the events that can trigger
@@ -241,6 +256,10 @@ RemoteSuggestionsSchedulerImpl::RemoteSuggestionsSchedulerImpl(
DCHECK(user_classifier);
DCHECK(profile_prefs);
+ // Cleanup procedure in M59. Remove for M60.
Marc Treib 2017/04/04 13:28:16 I'd leave it for a bit longer, maybe M62?
jkrcal 2017/04/05 17:32:56 Done.
+ profile_prefs_->ClearPref(kSnippetSoftFetchingIntervalOnUsageEventDeprecated);
+ profile_prefs_->ClearPref(kSnippetSoftFetchingIntervalOnNtpOpenedDeprecated);
+
LoadLastFetchingSchedule();
}
@@ -252,10 +271,14 @@ void RemoteSuggestionsSchedulerImpl::RegisterProfilePrefs(
registry->RegisterInt64Pref(prefs::kSnippetPersistentFetchingIntervalWifi, 0);
registry->RegisterInt64Pref(prefs::kSnippetPersistentFetchingIntervalFallback,
0);
- registry->RegisterInt64Pref(prefs::kSnippetSoftFetchingIntervalOnUsageEvent,
- 0);
+ registry->RegisterInt64Pref(prefs::kSnippetSoftFetchingIntervalWifi, 0);
+ registry->RegisterInt64Pref(prefs::kSnippetSoftFetchingIntervalFallback, 0);
registry->RegisterInt64Pref(prefs::kSnippetLastFetchAttempt, 0);
- registry->RegisterInt64Pref(prefs::kSnippetSoftFetchingIntervalOnNtpOpened,
+
+ // Cleanup procedure in M59. Remove for M60.
+ registry->RegisterInt64Pref(
+ kSnippetSoftFetchingIntervalOnUsageEventDeprecated, 0);
+ registry->RegisterInt64Pref(kSnippetSoftFetchingIntervalOnNtpOpenedDeprecated,
0);
}
@@ -314,7 +337,7 @@ void RemoteSuggestionsSchedulerImpl::OnPersistentSchedulerWakeUp() {
void RemoteSuggestionsSchedulerImpl::OnBrowserForegrounded() {
// TODO(jkrcal): Consider that this is called whenever we open or return to an
// Activity. Therefore, keep work light for fast start up calls.
- if (!ShouldRefetchInTheBackgroundNow(TriggerType::BROWSER_FOREGROUNDED)) {
+ if (!ShouldRefetchInTheBackgroundNow()) {
Marc Treib 2017/04/04 13:28:16 Doesn't this mean that all triggers will be treate
jkrcal 2017/04/05 17:32:56 I've rewritten the code. Hope the structure is now
Marc Treib 2017/04/06 08:29:23 Yup, much better, thanks!
return;
}
@@ -324,7 +347,7 @@ void RemoteSuggestionsSchedulerImpl::OnBrowserForegrounded() {
void RemoteSuggestionsSchedulerImpl::OnBrowserColdStart() {
// TODO(fhorschig|jkrcal): Consider that work here must be kept light for fast
// cold start ups.
- if (!ShouldRefetchInTheBackgroundNow(TriggerType::BROWSER_COLD_START)) {
+ if (!ShouldRefetchInTheBackgroundNow()) {
return;
}
@@ -332,7 +355,7 @@ void RemoteSuggestionsSchedulerImpl::OnBrowserColdStart() {
}
void RemoteSuggestionsSchedulerImpl::OnNTPOpened() {
- if (!ShouldRefetchInTheBackgroundNow(TriggerType::NTP_OPENED)) {
+ if (!ShouldRefetchInTheBackgroundNow()) {
return;
}
@@ -384,10 +407,10 @@ RemoteSuggestionsSchedulerImpl::GetDesiredFetchingSchedule() const {
GetDesiredFetchingInterval(FetchingInterval::PERSISTENT_WIFI, user_class);
schedule.interval_persistent_fallback = GetDesiredFetchingInterval(
FetchingInterval::PERSISTENT_FALLBACK, user_class);
- schedule.interval_soft_on_usage_event = GetDesiredFetchingInterval(
- FetchingInterval::SOFT_ON_USAGE_EVENT, user_class);
- schedule.interval_soft_on_ntp_opened = GetDesiredFetchingInterval(
- FetchingInterval::SOFT_ON_NTP_OPENED, user_class);
+ schedule.interval_soft_wifi =
+ GetDesiredFetchingInterval(FetchingInterval::SOFT_WIFI, user_class);
+ schedule.interval_soft_fallback =
+ GetDesiredFetchingInterval(FetchingInterval::SOFT_FALLBACK, user_class);
return schedule;
}
@@ -398,11 +421,10 @@ void RemoteSuggestionsSchedulerImpl::LoadLastFetchingSchedule() {
schedule_.interval_persistent_fallback =
base::TimeDelta::FromInternalValue(profile_prefs_->GetInt64(
prefs::kSnippetPersistentFetchingIntervalFallback));
- schedule_.interval_soft_on_usage_event =
- base::TimeDelta::FromInternalValue(profile_prefs_->GetInt64(
- prefs::kSnippetSoftFetchingIntervalOnUsageEvent));
- schedule_.interval_soft_on_ntp_opened = base::TimeDelta::FromInternalValue(
- profile_prefs_->GetInt64(prefs::kSnippetSoftFetchingIntervalOnNtpOpened));
+ schedule_.interval_soft_wifi = base::TimeDelta::FromInternalValue(
+ profile_prefs_->GetInt64(prefs::kSnippetSoftFetchingIntervalWifi));
+ schedule_.interval_soft_fallback = base::TimeDelta::FromInternalValue(
+ profile_prefs_->GetInt64(prefs::kSnippetSoftFetchingIntervalFallback));
}
void RemoteSuggestionsSchedulerImpl::StoreFetchingSchedule() {
@@ -412,12 +434,10 @@ void RemoteSuggestionsSchedulerImpl::StoreFetchingSchedule() {
profile_prefs_->SetInt64(
prefs::kSnippetPersistentFetchingIntervalFallback,
schedule_.interval_persistent_fallback.ToInternalValue());
- profile_prefs_->SetInt64(
- prefs::kSnippetSoftFetchingIntervalOnUsageEvent,
- schedule_.interval_soft_on_usage_event.ToInternalValue());
- profile_prefs_->SetInt64(
- prefs::kSnippetSoftFetchingIntervalOnNtpOpened,
- schedule_.interval_soft_on_ntp_opened.ToInternalValue());
+ profile_prefs_->SetInt64(prefs::kSnippetSoftFetchingIntervalWifi,
+ schedule_.interval_soft_wifi.ToInternalValue());
+ profile_prefs_->SetInt64(prefs::kSnippetSoftFetchingIntervalFallback,
+ schedule_.interval_soft_fallback.ToInternalValue());
}
void RemoteSuggestionsSchedulerImpl::RefetchInTheBackgroundIfEnabled(
@@ -448,28 +468,20 @@ void RemoteSuggestionsSchedulerImpl::RefetchInTheBackground() {
base::Unretained(this)));
}
-bool RemoteSuggestionsSchedulerImpl::ShouldRefetchInTheBackgroundNow(
- TriggerType trigger) {
+bool RemoteSuggestionsSchedulerImpl::ShouldRefetchInTheBackgroundNow() {
const base::Time last_fetch_attempt_time = base::Time::FromInternalValue(
profile_prefs_->GetInt64(prefs::kSnippetLastFetchAttempt));
base::Time first_allowed_fetch_time;
- switch (trigger) {
- case TriggerType::NTP_OPENED:
- first_allowed_fetch_time =
- last_fetch_attempt_time + schedule_.interval_soft_on_ntp_opened;
- break;
- case TriggerType::BROWSER_FOREGROUNDED:
- case TriggerType::BROWSER_COLD_START:
- first_allowed_fetch_time =
- last_fetch_attempt_time + schedule_.interval_soft_on_usage_event;
- break;
- case TriggerType::PERSISTENT_SCHEDULER_WAKE_UP:
- case TriggerType::COUNT:
- NOTREACHED();
- break;
+
+ if (IsOnWifi()) {
Marc Treib 2017/04/04 13:28:15 nit: IMO this would be simpler as an arithmetic if
jkrcal 2017/04/05 17:32:56 Done.
+ first_allowed_fetch_time =
+ last_fetch_attempt_time + schedule_.interval_soft_wifi;
+ } else {
+ first_allowed_fetch_time =
+ last_fetch_attempt_time + schedule_.interval_soft_fallback;
}
- base::Time now = clock_->Now();
+ base::Time now = clock_->Now();
return background_fetches_allowed_after_ <= now &&
first_allowed_fetch_time <= now;
}

Powered by Google App Engine
This is Rietveld 408576698