| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/engagement/site_engagement_score.h" | 5 #include "chrome/browser/engagement/site_engagement_score.h" |
| 6 | 6 |
| 7 #include <cmath> | 7 #include <cmath> |
| 8 | 8 |
| 9 #include "base/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
| 10 #include "base/time/clock.h" | 10 #include "base/time/clock.h" |
| 11 #include "base/time/time.h" | 11 #include "base/time/time.h" |
| 12 #include "base/values.h" | 12 #include "base/values.h" |
| 13 #include "chrome/browser/engagement/site_engagement_metrics.h" | 13 #include "chrome/browser/engagement/site_engagement_metrics.h" |
| 14 #include "components/variations/variations_associated_data.h" | 14 #include "components/variations/variations_associated_data.h" |
| 15 | 15 |
| 16 namespace { | 16 namespace { |
| 17 | 17 |
| 18 // The smallest amount by which engagement is incremented. Updated if necessary |
| 19 // in SiteEngagementScore::UpdateFromVariations. |
| 20 double gMinimumEngagementIncrement = 0.01; |
| 21 |
| 18 // Delta within which to consider scores equal. | 22 // Delta within which to consider scores equal. |
| 19 const double kScoreDelta = 0.001; | 23 const double kScoreDelta = 0.001; |
| 20 | 24 |
| 21 // Delta within which to consider internal time values equal. Internal time | 25 // Delta within which to consider internal time values equal. Internal time |
| 22 // values are in microseconds, so this delta comes out at one second. | 26 // values are in microseconds, so this delta comes out at one second. |
| 23 const double kTimeDelta = 1000000; | 27 const double kTimeDelta = 1000000; |
| 24 | 28 |
| 25 // Number of days after the last launch of an origin from an installed shortcut | 29 // Number of days after the last launch of an origin from an installed shortcut |
| 26 // for which WEB_APP_INSTALLED_POINTS will be added to the engagement score. | 30 // for which WEB_APP_INSTALLED_POINTS will be added to the engagement score. |
| 27 const int kMaxDaysSinceShortcutLaunch = 10; | 31 const int kMaxDaysSinceShortcutLaunch = 10; |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 112 } | 116 } |
| 113 | 117 |
| 114 double SiteEngagementScore::GetMediumEngagementBoundary() { | 118 double SiteEngagementScore::GetMediumEngagementBoundary() { |
| 115 return param_values[MEDIUM_ENGAGEMENT_BOUNDARY]; | 119 return param_values[MEDIUM_ENGAGEMENT_BOUNDARY]; |
| 116 } | 120 } |
| 117 | 121 |
| 118 double SiteEngagementScore::GetHighEngagementBoundary() { | 122 double SiteEngagementScore::GetHighEngagementBoundary() { |
| 119 return param_values[HIGH_ENGAGEMENT_BOUNDARY]; | 123 return param_values[HIGH_ENGAGEMENT_BOUNDARY]; |
| 120 } | 124 } |
| 121 | 125 |
| 126 double SiteEngagementScore::GetMinimumEngagementIncrement() { |
| 127 return gMinimumEngagementIncrement; |
| 128 } |
| 129 |
| 122 // static | 130 // static |
| 123 void SiteEngagementScore::UpdateFromVariations(const char* param_name) { | 131 void SiteEngagementScore::UpdateFromVariations(const char* param_name) { |
| 124 double param_vals[MAX_VARIATION]; | 132 double param_vals[MAX_VARIATION]; |
| 125 | 133 |
| 126 for (int i = 0; i < MAX_VARIATION; ++i) { | 134 for (int i = 0; i < MAX_VARIATION; ++i) { |
| 127 std::string param_string = | 135 std::string param_string = |
| 128 variations::GetVariationParamValue(param_name, kVariationNames[i]); | 136 variations::GetVariationParamValue(param_name, kVariationNames[i]); |
| 129 | 137 |
| 130 // Bail out if we didn't get a param string for the key, or if we couldn't | 138 // Bail out if we didn't get a param string for the key, or if we couldn't |
| 131 // convert the param string to a double, or if we get a negative value. | 139 // convert the param string to a double, or if we get a negative value. |
| 132 if (param_string.empty() || | 140 if (param_string.empty() || |
| 133 !base::StringToDouble(param_string, ¶m_vals[i]) || | 141 !base::StringToDouble(param_string, ¶m_vals[i]) || |
| 134 param_vals[i] < 0) { | 142 param_vals[i] < 0) { |
| 135 return; | 143 return; |
| 136 } | 144 } |
| 137 } | 145 } |
| 138 | 146 |
| 139 // Once we're sure everything is valid, assign the variation to the param | 147 // Once we're sure everything is valid, assign the variation to the param |
| 140 // values array. | 148 // values array. Update the minimum engagement increment if it has changed. |
| 141 for (int i = 0; i < MAX_VARIATION; ++i) | 149 for (int i = 0; i < MAX_VARIATION; ++i) { |
| 142 SiteEngagementScore::param_values[i] = param_vals[i]; | 150 SiteEngagementScore::param_values[i] = param_vals[i]; |
| 151 |
| 152 // If the value is one used to increment the site engagement score, update |
| 153 // the minimum engagement increment if necessary. |
| 154 if (i >= POINTS_INCREMENT_FIRST && i <= POINTS_INCREMENT_LAST && |
| 155 param_vals[i] < gMinimumEngagementIncrement) { |
| 156 gMinimumEngagementIncrement = param_vals[i]; |
| 157 } |
| 158 } |
| 143 } | 159 } |
| 144 | 160 |
| 145 SiteEngagementScore::SiteEngagementScore(base::Clock* clock, | 161 SiteEngagementScore::SiteEngagementScore(base::Clock* clock, |
| 146 const base::DictionaryValue& score_dict) | 162 const base::DictionaryValue& score_dict) |
| 147 : SiteEngagementScore(clock) { | 163 : SiteEngagementScore(clock) { |
| 148 score_dict.GetDouble(kRawScoreKey, &raw_score_); | 164 score_dict.GetDouble(kRawScoreKey, &raw_score_); |
| 149 score_dict.GetDouble(kPointsAddedTodayKey, &points_added_today_); | 165 score_dict.GetDouble(kPointsAddedTodayKey, &points_added_today_); |
| 150 | 166 |
| 151 double internal_time; | 167 double internal_time; |
| 152 if (score_dict.GetDouble(kLastEngagementTimeKey, &internal_time)) | 168 if (score_dict.GetDouble(kLastEngagementTimeKey, &internal_time)) |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 296 param_values[HIDDEN_MEDIA_POINTS] = 0.01; | 312 param_values[HIDDEN_MEDIA_POINTS] = 0.01; |
| 297 param_values[WEB_APP_INSTALLED_POINTS] = 5; | 313 param_values[WEB_APP_INSTALLED_POINTS] = 5; |
| 298 param_values[BOOTSTRAP_POINTS] = 8; | 314 param_values[BOOTSTRAP_POINTS] = 8; |
| 299 param_values[MEDIUM_ENGAGEMENT_BOUNDARY] = 5; | 315 param_values[MEDIUM_ENGAGEMENT_BOUNDARY] = 5; |
| 300 param_values[HIGH_ENGAGEMENT_BOUNDARY] = 50; | 316 param_values[HIGH_ENGAGEMENT_BOUNDARY] = 50; |
| 301 | 317 |
| 302 // This is set to zero to avoid interference with tests and is set when | 318 // This is set to zero to avoid interference with tests and is set when |
| 303 // testing this functionality. | 319 // testing this functionality. |
| 304 param_values[FIRST_DAILY_ENGAGEMENT] = 0; | 320 param_values[FIRST_DAILY_ENGAGEMENT] = 0; |
| 305 } | 321 } |
| OLD | NEW |