Index: chrome/common/thumbnail_score.cc |
diff --git a/chrome/common/thumbnail_score.cc b/chrome/common/thumbnail_score.cc |
deleted file mode 100644 |
index 5d3d698f1a8c23e2ea412eeac2aa0b70e5712a73..0000000000000000000000000000000000000000 |
--- a/chrome/common/thumbnail_score.cc |
+++ /dev/null |
@@ -1,140 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/common/thumbnail_score.h" |
- |
-#include "base/logging.h" |
-#include "base/strings/stringprintf.h" |
- |
-using base::Time; |
-using base::TimeDelta; |
- |
-const int64 ThumbnailScore::kUpdateThumbnailTimeDays = 1; |
-const double ThumbnailScore::kThumbnailMaximumBoringness = 0.94; |
-const double ThumbnailScore::kThumbnailDegradePerHour = 0.01; |
-const double ThumbnailScore::kTooWideAspectRatio = 2.0; |
- |
-// Calculates a numeric score from traits about where a snapshot was |
-// taken. The lower the better. We store the raw components in the |
-// database because I'm sure this will evolve and I don't want to break |
-// databases. |
-static int GetThumbnailType(const ThumbnailScore& score) { |
- int type = 0; |
- if (!score.at_top) |
- type += 1; |
- if (!score.good_clipping) |
- type += 2; |
- if (!score.load_completed) |
- type += 3; |
- return type; |
-} |
- |
-ThumbnailScore::ThumbnailScore() |
- : boring_score(1.0), |
- good_clipping(false), |
- at_top(false), |
- load_completed(false), |
- time_at_snapshot(Time::Now()), |
- redirect_hops_from_dest(0) { |
-} |
- |
-ThumbnailScore::ThumbnailScore(double score, bool clipping, bool top) |
- : boring_score(score), |
- good_clipping(clipping), |
- at_top(top), |
- load_completed(false), |
- time_at_snapshot(Time::Now()), |
- redirect_hops_from_dest(0) { |
-} |
- |
-ThumbnailScore::ThumbnailScore(double score, bool clipping, bool top, |
- const Time& time) |
- : boring_score(score), |
- good_clipping(clipping), |
- at_top(top), |
- load_completed(false), |
- time_at_snapshot(time), |
- redirect_hops_from_dest(0) { |
-} |
- |
-ThumbnailScore::~ThumbnailScore() { |
-} |
- |
-bool ThumbnailScore::Equals(const ThumbnailScore& rhs) const { |
- return boring_score == rhs.boring_score && |
- good_clipping == rhs.good_clipping && |
- at_top == rhs.at_top && |
- time_at_snapshot == rhs.time_at_snapshot && |
- redirect_hops_from_dest == rhs.redirect_hops_from_dest; |
-} |
- |
-std::string ThumbnailScore::ToString() const { |
- return base::StringPrintf( |
- "boring_score: %f, at_top %d, good_clipping %d, " |
- "load_completed: %d, " |
- "time_at_snapshot: %f, redirect_hops_from_dest: %d", |
- boring_score, |
- at_top, |
- good_clipping, |
- load_completed, |
- time_at_snapshot.ToDoubleT(), |
- redirect_hops_from_dest); |
-} |
- |
-bool ShouldReplaceThumbnailWith(const ThumbnailScore& current, |
- const ThumbnailScore& replacement) { |
- int current_type = GetThumbnailType(current); |
- int replacement_type = GetThumbnailType(replacement); |
- if (replacement_type < current_type) { |
- // If we have a better class of thumbnail, add it if it meets |
- // certain minimum boringness. |
- return replacement.boring_score < |
- ThumbnailScore::kThumbnailMaximumBoringness; |
- } else if (replacement_type == current_type) { |
- // It's much easier to do the scaling below when we're dealing with "higher |
- // is better." Then we can decrease the score by dividing by a fraction. |
- const double kThumbnailMinimumInterestingness = |
- 1.0 - ThumbnailScore::kThumbnailMaximumBoringness; |
- double current_interesting_score = 1.0 - current.boring_score; |
- double replacement_interesting_score = 1.0 - replacement.boring_score; |
- |
- // Degrade the score of each thumbnail to account for how many redirects |
- // they are away from the destination. 1/(x+1) gives a scaling factor of |
- // one for x = 0, and asymptotically approaches 0 for larger values of x. |
- current_interesting_score *= |
- 1.0 / (current.redirect_hops_from_dest + 1); |
- replacement_interesting_score *= |
- 1.0 / (replacement.redirect_hops_from_dest + 1); |
- |
- // Degrade the score and prefer the newer one based on how long apart the |
- // two thumbnails were taken. This means we'll eventually replace an old |
- // good one with a new worse one assuming enough time has passed. |
- TimeDelta time_between_thumbnails = |
- replacement.time_at_snapshot - current.time_at_snapshot; |
- current_interesting_score -= time_between_thumbnails.InHours() * |
- ThumbnailScore::kThumbnailDegradePerHour; |
- |
- if (current_interesting_score < kThumbnailMinimumInterestingness) |
- current_interesting_score = kThumbnailMinimumInterestingness; |
- if (replacement_interesting_score > current_interesting_score) |
- return true; |
- } |
- |
- // If the current thumbnail doesn't meet basic boringness |
- // requirements, but the replacement does, always replace the |
- // current one even if we're using a worse thumbnail type. |
- return current.boring_score >= ThumbnailScore::kThumbnailMaximumBoringness && |
- replacement.boring_score < ThumbnailScore::kThumbnailMaximumBoringness; |
-} |
- |
-bool ThumbnailScore::ShouldConsiderUpdating() { |
- const TimeDelta time_elapsed = Time::Now() - time_at_snapshot; |
- if (time_elapsed < TimeDelta::FromDays(kUpdateThumbnailTimeDays) && |
- good_clipping && at_top && load_completed) { |
- // The current thumbnail is new and has good properties. |
- return false; |
- } |
- // The current thumbnail should be updated. |
- return true; |
-} |