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

Unified Diff: components/favicon_base/select_favicon_frames.cc

Issue 2739173002: Always select best favicon bitmap (Closed)
Patch Set: Minor changes. Created 3 years, 9 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/favicon_base/select_favicon_frames.cc
diff --git a/components/favicon_base/select_favicon_frames.cc b/components/favicon_base/select_favicon_frames.cc
index 82b44baa6f607c6d641784d9a8fc91d6759ad438..9e66071c831573b0a1ba5886ff82feec3d9c7e39 100644
--- a/components/favicon_base/select_favicon_frames.cc
+++ b/components/favicon_base/select_favicon_frames.cc
@@ -55,40 +55,11 @@ size_t GetCandidateIndexWithBestScore(
float* score) {
DCHECK_NE(desired_size, 0);
- // Try to find an exact match.
- for (size_t i = 0; i < candidate_sizes.size(); ++i) {
- if (candidate_sizes[i].width() == desired_size &&
- candidate_sizes[i].height() == desired_size) {
- *score = 1;
- return i;
- }
- }
-
- // Huge favicon bitmaps often have a completely different visual style from
- // smaller favicon bitmaps. Avoid them.
- const int kHugeEdgeSize = desired_size * 8;
-
- // Order of preference:
- // 1) Bitmaps with width and height smaller than |kHugeEdgeSize|.
- // 2) Bitmaps which need to be scaled down instead of up.
- // 3) Bitmaps which do not need to be scaled as much.
size_t candidate_index = std::numeric_limits<size_t>::max();
float candidate_score = 0;
- for (size_t i = 0; i < candidate_sizes.size(); ++i) {
- float average_edge =
- (candidate_sizes[i].width() + candidate_sizes[i].height()) / 2.0f;
-
- float score = 0;
- if (candidate_sizes[i].width() >= kHugeEdgeSize ||
- candidate_sizes[i].height() >= kHugeEdgeSize) {
- score = std::min(1.0f, desired_size / average_edge) * 0.01f;
- } else if (candidate_sizes[i].width() >= desired_size &&
- candidate_sizes[i].height() >= desired_size) {
- score = desired_size / average_edge * 0.01f + 0.15f;
- } else {
- score = std::min(1.0f, average_edge / desired_size) * 0.01f + 0.1f;
- }
-
+ for (size_t i = 0; i < candidate_sizes.size() && candidate_score != 1.0f;
+ ++i) {
+ float score = GetFaviconCandidateScore(candidate_sizes[i], desired_size);
if (candidate_index == std::numeric_limits<size_t>::max() ||
score > candidate_score) {
candidate_index = i;
@@ -278,3 +249,25 @@ void SelectFaviconFrameIndices(const std::vector<gfx::Size>& frame_pixel_sizes,
}
}
}
+
+float GetFaviconCandidateScore(const gfx::Size& candidate_size,
+ int desired_size) {
+ // Huge favicon bitmaps often have a completely different visual style from
+ // smaller favicon bitmaps. Avoid them.
+ const int kHugeEdgeSize = desired_size * 8;
+
+ float average_edge =
+ (candidate_size.width() + candidate_size.height()) / 2.0f;
+ if (candidate_size.width() == desired_size &&
+ candidate_size.height() == desired_size) {
+ return 1.0f;
+ } else if (candidate_size.width() >= kHugeEdgeSize ||
+ candidate_size.height() >= kHugeEdgeSize) {
+ return std::min(1.0f, desired_size / average_edge) * 0.01f;
+ } else if (candidate_size.width() >= desired_size &&
+ candidate_size.height() >= desired_size) {
+ return desired_size / average_edge * 0.01f + 0.15f;
+ } else {
+ return std::min(1.0f, average_edge / desired_size) * 0.01f + 0.1f;
+ }
+}
« components/favicon/core/favicon_handler.cc ('K') | « components/favicon_base/select_favicon_frames.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698