Chromium Code Reviews| Index: chrome/browser/favicon/select_favicon_frames.cc |
| diff --git a/chrome/browser/favicon/select_favicon_frames.cc b/chrome/browser/favicon/select_favicon_frames.cc |
| index 52cb6ab880226775b94e8be2b9da0f31be76f003..d77b1d9207281e14a88072317bbdd5e4ad8551f2 100644 |
| --- a/chrome/browser/favicon/select_favicon_frames.cc |
| +++ b/chrome/browser/favicon/select_favicon_frames.cc |
| @@ -60,7 +60,8 @@ SkBitmap SampleNearestNeighbor(SkBitmap contents, int desired_size) { |
| SkBitmap SelectCandidate(const std::vector<SkBitmap>& bitmaps, |
| int desired_size, |
| - ui::ScaleFactor scale_factor) { |
| + ui::ScaleFactor scale_factor, |
| + float* score) { |
| float scale = GetScaleFactorScale(scale_factor); |
| desired_size = static_cast<int>(desired_size * scale + 0.5f); |
| @@ -68,6 +69,7 @@ SkBitmap SelectCandidate(const std::vector<SkBitmap>& bitmaps, |
| for (size_t i = 0; i < bitmaps.size(); ++i) { |
| if (bitmaps[i].width() == desired_size && |
| bitmaps[i].height() == desired_size) { |
| + *score = 1; |
| return bitmaps[i]; |
| } |
| } |
| @@ -80,6 +82,7 @@ SkBitmap SelectCandidate(const std::vector<SkBitmap>& bitmaps, |
| for (size_t i = 0; i < bitmaps.size(); ++i) { |
| if (bitmaps[i].width() == source_size && |
| bitmaps[i].height() == source_size) { |
| + *score = 0.2; |
| return PadWithBorder(bitmaps[i], desired_size, source_size); |
| } |
| } |
| @@ -87,6 +90,7 @@ SkBitmap SelectCandidate(const std::vector<SkBitmap>& bitmaps, |
| for (size_t i = 0; i < bitmaps.size(); ++i) { |
| if (bitmaps[i].width() * scale == source_size && |
| bitmaps[i].height() * scale == source_size) { |
| + *score = 0.15; |
| return PadWithBorder(bitmaps[i], desired_size, source_size); |
| } |
| } |
| @@ -106,9 +110,12 @@ SkBitmap SelectCandidate(const std::vector<SkBitmap>& bitmaps, |
| min_area = area; |
| } |
| } |
| + *score = 0.1; |
| // c) Else, from the biggest smaller variant. |
| - if (candidate == -1) |
| + if (candidate == -1) { |
| + *score = 0; |
| candidate = BiggestCandidate(bitmaps); |
| + } |
| const SkBitmap& bitmap = bitmaps[candidate]; |
| bool is_integer_multiple = desired_size % bitmap.width() == 0 && |
| @@ -125,7 +132,8 @@ SkBitmap SelectCandidate(const std::vector<SkBitmap>& bitmaps, |
| gfx::ImageSkia SelectFaviconFrames( |
| const std::vector<SkBitmap>& bitmaps, |
| const std::vector<ui::ScaleFactor>& scale_factors, |
| - int desired_size) { |
| + int desired_size, |
| + float* match_score) { |
| gfx::ImageSkia multi_image; |
| if (bitmaps.empty()) |
| return multi_image; |
| @@ -135,14 +143,21 @@ gfx::ImageSkia SelectFaviconFrames( |
| size_t max_index = BiggestCandidate(bitmaps); |
| multi_image.AddRepresentation( |
| gfx::ImageSkiaRep(bitmaps[max_index], ui::SCALE_FACTOR_100P)); |
| + if (match_score) |
| + *match_score = 0.8; |
|
pkotwicz
2012/08/15 22:29:09
Shouldn't this be a constant?
|
| return multi_image; |
| } |
| + float total_score = 0; |
| for (size_t i = 0; i < scale_factors.size(); ++i) { |
| + float score; |
| multi_image.AddRepresentation(gfx::ImageSkiaRep( |
| - SelectCandidate(bitmaps, desired_size, scale_factors[i]), |
| + SelectCandidate(bitmaps, desired_size, scale_factors[i], &score), |
| scale_factors[i])); |
| + total_score += score; |
| } |
| + if (match_score) |
| + *match_score = total_score / scale_factors.size(); |
| return multi_image; |
| } |