Index: chrome/common/thumbnail_score.cc |
diff --git a/chrome/common/thumbnail_score.cc b/chrome/common/thumbnail_score.cc |
index dc7856d101be598c7bfc4bbf2a0a5c415a8f5e46..f878e3100d0f9dea9b766b37dca7cb30be3e22f6 100644 |
--- a/chrome/common/thumbnail_score.cc |
+++ b/chrome/common/thumbnail_score.cc |
@@ -5,12 +5,15 @@ |
#include "chrome/common/thumbnail_score.h" |
#include "base/logging.h" |
+#include "base/stringprintf.h" |
using base::Time; |
using base::TimeDelta; |
const TimeDelta ThumbnailScore::kUpdateThumbnailTime = TimeDelta::FromDays(1); |
const double ThumbnailScore::kThumbnailMaximumBoringness = 0.94; |
+// Per crbug.com/65936#c4, 91.83% of thumbnail scores are less than 0.70. |
+const double ThumbnailScore::kThumbnailInterestingEnoughBoringness = 0.70; |
const double ThumbnailScore::kThumbnailDegradePerHour = 0.01; |
// Calculates a numeric score from traits about where a snapshot was |
@@ -70,6 +73,16 @@ bool ThumbnailScore::Equals(const ThumbnailScore& rhs) const { |
redirect_hops_from_dest == rhs.redirect_hops_from_dest; |
} |
+std::string ThumbnailScore::ToString() const { |
+ return StringPrintf("boring_score: %f, at_top %d, good_clipping %d, " |
+ "time_at_snapshot: %f, redirect_hops_from_dest: %d", |
+ boring_score, |
+ at_top, |
+ good_clipping, |
+ time_at_snapshot.ToDoubleT(), |
+ redirect_hops_from_dest); |
+} |
+ |
bool ShouldReplaceThumbnailWith(const ThumbnailScore& current, |
const ThumbnailScore& replacement) { |
int current_type = GetThumbnailType(current.good_clipping, current.at_top); |
@@ -116,3 +129,16 @@ bool ShouldReplaceThumbnailWith(const ThumbnailScore& current, |
return current.boring_score >= ThumbnailScore::kThumbnailMaximumBoringness && |
replacement.boring_score < ThumbnailScore::kThumbnailMaximumBoringness; |
} |
+ |
+bool ThumbnailScore::ShouldConsiderUpdating() { |
+ const TimeDelta time_elapsed = Time::Now() - time_at_snapshot; |
+ // Consider the current thumbnail to be new and interesting enough if |
+ // the following critera are met. |
+ const bool new_and_interesting_enough = |
+ (time_elapsed < kUpdateThumbnailTime && |
+ good_clipping && at_top && |
+ boring_score < kThumbnailInterestingEnoughBoringness); |
+ // We want to generate a new thumbnail when the current thumbnail is |
+ // sufficiently old or uninteresting. |
+ return !new_and_interesting_enough; |
+} |