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

Side by Side Diff: chrome/browser/history/history_backend.cc

Issue 336423006: Pass in a set of requested favicon pixel sizes to the HistoryService (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/history/history_backend.h" 5 #include "chrome/browser/history/history_backend.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <functional> 8 #include <functional>
9 #include <list> 9 #include <list>
10 #include <map> 10 #include <map>
(...skipping 1548 matching lines...) Expand 10 before | Expand all | Expand 10 after
1559 if (sql::Connection::Delete(current_file)) 1559 if (sql::Connection::Delete(current_file))
1560 num_databases_deleted++; 1560 num_databases_deleted++;
1561 } 1561 }
1562 UMA_HISTOGRAM_COUNTS("History.DeleteFTSIndexDatabases", 1562 UMA_HISTOGRAM_COUNTS("History.DeleteFTSIndexDatabases",
1563 num_databases_deleted); 1563 num_databases_deleted);
1564 } 1564 }
1565 1565
1566 void HistoryBackend::GetFavicons( 1566 void HistoryBackend::GetFavicons(
1567 const std::vector<GURL>& icon_urls, 1567 const std::vector<GURL>& icon_urls,
1568 int icon_types, 1568 int icon_types,
1569 int desired_size_in_dip, 1569 const std::vector<int>& desired_sizes,
1570 const std::vector<ui::ScaleFactor>& desired_scale_factors,
1571 std::vector<favicon_base::FaviconRawBitmapResult>* bitmap_results) { 1570 std::vector<favicon_base::FaviconRawBitmapResult>* bitmap_results) {
1572 UpdateFaviconMappingsAndFetchImpl(NULL, icon_urls, icon_types, 1571 UpdateFaviconMappingsAndFetchImpl(NULL, icon_urls, icon_types, desired_sizes,
1573 desired_size_in_dip, desired_scale_factors,
1574 bitmap_results); 1572 bitmap_results);
1575 } 1573 }
1576 1574
1577 void HistoryBackend::GetLargestFaviconForURL( 1575 void HistoryBackend::GetLargestFaviconForURL(
1578 const GURL& page_url, 1576 const GURL& page_url,
1579 const std::vector<int>& icon_types, 1577 const std::vector<int>& icon_types,
1580 int minimum_size_in_pixels, 1578 int minimum_size_in_pixels,
1581 favicon_base::FaviconRawBitmapResult* favicon_bitmap_result) { 1579 favicon_base::FaviconRawBitmapResult* favicon_bitmap_result) {
1582 DCHECK(favicon_bitmap_result); 1580 DCHECK(favicon_bitmap_result);
1583 1581
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
1665 if (bitmap_result.is_valid()) 1663 if (bitmap_result.is_valid())
1666 *favicon_bitmap_result = bitmap_result; 1664 *favicon_bitmap_result = bitmap_result;
1667 1665
1668 HISTOGRAM_TIMES("History.GetLargestFaviconForURL", 1666 HISTOGRAM_TIMES("History.GetLargestFaviconForURL",
1669 TimeTicks::Now() - beginning_time); 1667 TimeTicks::Now() - beginning_time);
1670 } 1668 }
1671 1669
1672 void HistoryBackend::GetFaviconsForURL( 1670 void HistoryBackend::GetFaviconsForURL(
1673 const GURL& page_url, 1671 const GURL& page_url,
1674 int icon_types, 1672 int icon_types,
1675 int desired_size_in_dip, 1673 const std::vector<int>& desired_sizes,
1676 const std::vector<ui::ScaleFactor>& desired_scale_factors,
1677 std::vector<favicon_base::FaviconRawBitmapResult>* bitmap_results) { 1674 std::vector<favicon_base::FaviconRawBitmapResult>* bitmap_results) {
1678 DCHECK(bitmap_results); 1675 DCHECK(bitmap_results);
1679 GetFaviconsFromDB(page_url, icon_types, desired_size_in_dip, 1676 GetFaviconsFromDB(page_url, icon_types, desired_sizes, bitmap_results);
1680 desired_scale_factors, bitmap_results);
1681 } 1677 }
1682 1678
1683 void HistoryBackend::GetFaviconForID( 1679 void HistoryBackend::GetFaviconForID(
1684 favicon_base::FaviconID favicon_id, 1680 favicon_base::FaviconID favicon_id,
1685 int desired_size_in_dip, 1681 int desired_size,
1686 ui::ScaleFactor desired_scale_factor,
1687 std::vector<favicon_base::FaviconRawBitmapResult>* bitmap_results) { 1682 std::vector<favicon_base::FaviconRawBitmapResult>* bitmap_results) {
1688 std::vector<favicon_base::FaviconID> favicon_ids; 1683 std::vector<favicon_base::FaviconID> favicon_ids;
1689 favicon_ids.push_back(favicon_id); 1684 favicon_ids.push_back(favicon_id);
1690 std::vector<ui::ScaleFactor> desired_scale_factors; 1685 std::vector<int> desired_sizes;
1691 desired_scale_factors.push_back(desired_scale_factor); 1686 desired_sizes.push_back(desired_size);
1692 1687
1693 // Get results from DB. 1688 // Get results from DB.
1694 GetFaviconBitmapResultsForBestMatch(favicon_ids, 1689 GetFaviconBitmapResultsForBestMatch(favicon_ids,
1695 desired_size_in_dip, 1690 desired_sizes,
1696 desired_scale_factors,
1697 bitmap_results); 1691 bitmap_results);
1698 } 1692 }
1699 1693
1700 void HistoryBackend::UpdateFaviconMappingsAndFetch( 1694 void HistoryBackend::UpdateFaviconMappingsAndFetch(
1701 const GURL& page_url, 1695 const GURL& page_url,
1702 const std::vector<GURL>& icon_urls, 1696 const std::vector<GURL>& icon_urls,
1703 int icon_types, 1697 int icon_types,
1704 int desired_size_in_dip, 1698 const std::vector<int>& desired_sizes,
1705 const std::vector<ui::ScaleFactor>& desired_scale_factors,
1706 std::vector<favicon_base::FaviconRawBitmapResult>* bitmap_results) { 1699 std::vector<favicon_base::FaviconRawBitmapResult>* bitmap_results) {
1707 UpdateFaviconMappingsAndFetchImpl(&page_url, icon_urls, icon_types, 1700 UpdateFaviconMappingsAndFetchImpl(&page_url, icon_urls, icon_types,
1708 desired_size_in_dip, desired_scale_factors, 1701 desired_sizes, bitmap_results);
1709 bitmap_results);
1710 } 1702 }
1711 1703
1712 void HistoryBackend::MergeFavicon( 1704 void HistoryBackend::MergeFavicon(
1713 const GURL& page_url, 1705 const GURL& page_url,
1714 const GURL& icon_url, 1706 const GURL& icon_url,
1715 favicon_base::IconType icon_type, 1707 favicon_base::IconType icon_type,
1716 scoped_refptr<base::RefCountedMemory> bitmap_data, 1708 scoped_refptr<base::RefCountedMemory> bitmap_data,
1717 const gfx::Size& pixel_size) { 1709 const gfx::Size& pixel_size) {
1718 if (!thumbnail_db_ || !db_) 1710 if (!thumbnail_db_ || !db_)
1719 return; 1711 return;
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
1998 changed_details->urls.swap(favicons_changed); 1990 changed_details->urls.swap(favicons_changed);
1999 BroadcastNotifications(chrome::NOTIFICATION_FAVICON_CHANGED, 1991 BroadcastNotifications(chrome::NOTIFICATION_FAVICON_CHANGED,
2000 changed_details.PassAs<HistoryDetails>()); 1992 changed_details.PassAs<HistoryDetails>());
2001 } 1993 }
2002 } 1994 }
2003 1995
2004 void HistoryBackend::UpdateFaviconMappingsAndFetchImpl( 1996 void HistoryBackend::UpdateFaviconMappingsAndFetchImpl(
2005 const GURL* page_url, 1997 const GURL* page_url,
2006 const std::vector<GURL>& icon_urls, 1998 const std::vector<GURL>& icon_urls,
2007 int icon_types, 1999 int icon_types,
2008 int desired_size_in_dip, 2000 const std::vector<int>& desired_sizes,
2009 const std::vector<ui::ScaleFactor>& desired_scale_factors,
2010 std::vector<favicon_base::FaviconRawBitmapResult>* bitmap_results) { 2001 std::vector<favicon_base::FaviconRawBitmapResult>* bitmap_results) {
2011 // If |page_url| is specified, |icon_types| must be either a single icon 2002 // If |page_url| is specified, |icon_types| must be either a single icon
2012 // type or icon types which are equivalent. 2003 // type or icon types which are equivalent.
2013 DCHECK(!page_url || icon_types == favicon_base::FAVICON || 2004 DCHECK(!page_url || icon_types == favicon_base::FAVICON ||
2014 icon_types == favicon_base::TOUCH_ICON || 2005 icon_types == favicon_base::TOUCH_ICON ||
2015 icon_types == favicon_base::TOUCH_PRECOMPOSED_ICON || 2006 icon_types == favicon_base::TOUCH_PRECOMPOSED_ICON ||
2016 icon_types == 2007 icon_types ==
2017 (favicon_base::TOUCH_ICON | favicon_base::TOUCH_PRECOMPOSED_ICON)); 2008 (favicon_base::TOUCH_ICON | favicon_base::TOUCH_PRECOMPOSED_ICON));
2018 bitmap_results->clear(); 2009 bitmap_results->clear();
2019 2010
(...skipping 30 matching lines...) Expand all
2050 if (page_url && !favicon_ids.empty()) { 2041 if (page_url && !favicon_ids.empty()) {
2051 bool mappings_updated = 2042 bool mappings_updated =
2052 SetFaviconMappingsForPageAndRedirects(*page_url, selected_icon_type, 2043 SetFaviconMappingsForPageAndRedirects(*page_url, selected_icon_type,
2053 favicon_ids); 2044 favicon_ids);
2054 if (mappings_updated) { 2045 if (mappings_updated) {
2055 SendFaviconChangedNotificationForPageAndRedirects(*page_url); 2046 SendFaviconChangedNotificationForPageAndRedirects(*page_url);
2056 ScheduleCommit(); 2047 ScheduleCommit();
2057 } 2048 }
2058 } 2049 }
2059 2050
2060 GetFaviconBitmapResultsForBestMatch(favicon_ids, desired_size_in_dip, 2051 GetFaviconBitmapResultsForBestMatch(favicon_ids, desired_sizes,
2061 desired_scale_factors, bitmap_results); 2052 bitmap_results);
2062 } 2053 }
2063 2054
2064 void HistoryBackend::SetFaviconBitmaps( 2055 void HistoryBackend::SetFaviconBitmaps(
2065 favicon_base::FaviconID icon_id, 2056 favicon_base::FaviconID icon_id,
2066 const std::vector<favicon_base::FaviconRawBitmapData>& favicon_bitmap_data, 2057 const std::vector<favicon_base::FaviconRawBitmapData>& favicon_bitmap_data,
2067 bool* favicon_bitmaps_changed) { 2058 bool* favicon_bitmaps_changed) {
2068 if (favicon_bitmaps_changed) 2059 if (favicon_bitmaps_changed)
2069 *favicon_bitmaps_changed = false; 2060 *favicon_bitmaps_changed = false;
2070 2061
2071 std::vector<FaviconBitmapIDSize> bitmap_id_sizes; 2062 std::vector<FaviconBitmapIDSize> bitmap_id_sizes;
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
2155 thumbnail_db_->GetFaviconBitmap(bitmap_id, 2146 thumbnail_db_->GetFaviconBitmap(bitmap_id,
2156 NULL, 2147 NULL,
2157 &original_bitmap_data, 2148 &original_bitmap_data,
2158 NULL); 2149 NULL);
2159 return new_bitmap_data->Equals(original_bitmap_data); 2150 return new_bitmap_data->Equals(original_bitmap_data);
2160 } 2151 }
2161 2152
2162 bool HistoryBackend::GetFaviconsFromDB( 2153 bool HistoryBackend::GetFaviconsFromDB(
2163 const GURL& page_url, 2154 const GURL& page_url,
2164 int icon_types, 2155 int icon_types,
2165 int desired_size_in_dip, 2156 const std::vector<int>& desired_sizes,
2166 const std::vector<ui::ScaleFactor>& desired_scale_factors,
2167 std::vector<favicon_base::FaviconRawBitmapResult>* favicon_bitmap_results) { 2157 std::vector<favicon_base::FaviconRawBitmapResult>* favicon_bitmap_results) {
2168 DCHECK(favicon_bitmap_results); 2158 DCHECK(favicon_bitmap_results);
2169 favicon_bitmap_results->clear(); 2159 favicon_bitmap_results->clear();
2170 2160
2171 if (!db_ || !thumbnail_db_) 2161 if (!db_ || !thumbnail_db_)
2172 return false; 2162 return false;
2173 2163
2174 // Time the query. 2164 // Time the query.
2175 TimeTicks beginning_time = TimeTicks::Now(); 2165 TimeTicks beginning_time = TimeTicks::Now();
2176 2166
2177 // Get FaviconIDs for |page_url| and one of |icon_types|. 2167 // Get FaviconIDs for |page_url| and one of |icon_types|.
2178 std::vector<IconMapping> icon_mappings; 2168 std::vector<IconMapping> icon_mappings;
2179 thumbnail_db_->GetIconMappingsForPageURL(page_url, icon_types, 2169 thumbnail_db_->GetIconMappingsForPageURL(page_url, icon_types,
2180 &icon_mappings); 2170 &icon_mappings);
2181 std::vector<favicon_base::FaviconID> favicon_ids; 2171 std::vector<favicon_base::FaviconID> favicon_ids;
2182 for (size_t i = 0; i < icon_mappings.size(); ++i) 2172 for (size_t i = 0; i < icon_mappings.size(); ++i)
2183 favicon_ids.push_back(icon_mappings[i].icon_id); 2173 favicon_ids.push_back(icon_mappings[i].icon_id);
2184 2174
2185 // Populate |favicon_bitmap_results| and |icon_url_sizes|. 2175 // Populate |favicon_bitmap_results| and |icon_url_sizes|.
2186 bool success = GetFaviconBitmapResultsForBestMatch(favicon_ids, 2176 bool success = GetFaviconBitmapResultsForBestMatch(favicon_ids,
2187 desired_size_in_dip, desired_scale_factors, favicon_bitmap_results); 2177 desired_sizes, favicon_bitmap_results);
2188 UMA_HISTOGRAM_TIMES("History.GetFavIconFromDB", // historical name 2178 UMA_HISTOGRAM_TIMES("History.GetFavIconFromDB", // historical name
2189 TimeTicks::Now() - beginning_time); 2179 TimeTicks::Now() - beginning_time);
2190 return success && !favicon_bitmap_results->empty(); 2180 return success && !favicon_bitmap_results->empty();
2191 } 2181 }
2192 2182
2193 bool HistoryBackend::GetFaviconBitmapResultsForBestMatch( 2183 bool HistoryBackend::GetFaviconBitmapResultsForBestMatch(
2194 const std::vector<favicon_base::FaviconID>& candidate_favicon_ids, 2184 const std::vector<favicon_base::FaviconID>& candidate_favicon_ids,
2195 int desired_size_in_dip, 2185 const std::vector<int>& desired_sizes,
2196 const std::vector<ui::ScaleFactor>& desired_scale_factors,
2197 std::vector<favicon_base::FaviconRawBitmapResult>* favicon_bitmap_results) { 2186 std::vector<favicon_base::FaviconRawBitmapResult>* favicon_bitmap_results) {
2198 favicon_bitmap_results->clear(); 2187 favicon_bitmap_results->clear();
2199 2188
2200 if (candidate_favicon_ids.empty()) 2189 if (candidate_favicon_ids.empty())
2201 return true; 2190 return true;
2202 2191
2203 // Find the FaviconID and the FaviconBitmapIDs which best match 2192 // Find the FaviconID and the FaviconBitmapIDs which best match
2204 // |desired_size_in_dip| and |desired_scale_factors|. 2193 // |desired_size_in_dip| and |desired_scale_factors|.
2205 // TODO(pkotwicz): Select bitmap results from multiple favicons once 2194 // TODO(pkotwicz): Select bitmap results from multiple favicons once
2206 // content::FaviconStatus supports multiple icon URLs. 2195 // content::FaviconStatus supports multiple icon URLs.
2207 favicon_base::FaviconID best_favicon_id = 0; 2196 favicon_base::FaviconID best_favicon_id = 0;
2208 std::vector<FaviconBitmapID> best_bitmap_ids; 2197 std::vector<FaviconBitmapID> best_bitmap_ids;
2209 float highest_score = kSelectFaviconFramesInvalidScore; 2198 float highest_score = kSelectFaviconFramesInvalidScore;
2210 for (size_t i = 0; i < candidate_favicon_ids.size(); ++i) { 2199 for (size_t i = 0; i < candidate_favicon_ids.size(); ++i) {
2211 std::vector<FaviconBitmapIDSize> bitmap_id_sizes; 2200 std::vector<FaviconBitmapIDSize> bitmap_id_sizes;
2212 thumbnail_db_->GetFaviconBitmapIDSizes(candidate_favicon_ids[i], 2201 thumbnail_db_->GetFaviconBitmapIDSizes(candidate_favicon_ids[i],
2213 &bitmap_id_sizes); 2202 &bitmap_id_sizes);
2214 2203
2215 // Build vector of gfx::Size from |bitmap_id_sizes|. 2204 // Build vector of gfx::Size from |bitmap_id_sizes|.
2216 std::vector<gfx::Size> sizes; 2205 std::vector<gfx::Size> sizes;
2217 for (size_t j = 0; j < bitmap_id_sizes.size(); ++j) 2206 for (size_t j = 0; j < bitmap_id_sizes.size(); ++j)
2218 sizes.push_back(bitmap_id_sizes[j].pixel_size); 2207 sizes.push_back(bitmap_id_sizes[j].pixel_size);
2219 2208
2220 std::vector<size_t> candidate_bitmap_indices; 2209 std::vector<size_t> candidate_bitmap_indices;
2221 float score = 0; 2210 float score = 0;
2222 SelectFaviconFrameIndices(sizes, 2211 SelectFaviconFrameIndices(sizes,
2223 desired_scale_factors, 2212 desired_sizes,
2224 desired_size_in_dip,
2225 &candidate_bitmap_indices, 2213 &candidate_bitmap_indices,
2226 &score); 2214 &score);
2227 if (score > highest_score) { 2215 if (score > highest_score) {
2228 highest_score = score; 2216 highest_score = score;
2229 best_favicon_id = candidate_favicon_ids[i], 2217 best_favicon_id = candidate_favicon_ids[i],
2230 best_bitmap_ids.clear(); 2218 best_bitmap_ids.clear();
2231 for (size_t j = 0; j < candidate_bitmap_indices.size(); ++j) { 2219 for (size_t j = 0; j < candidate_bitmap_indices.size(); ++j) {
2232 size_t candidate_index = candidate_bitmap_indices[j]; 2220 size_t candidate_index = candidate_bitmap_indices[j];
2233 best_bitmap_ids.push_back( 2221 best_bitmap_ids.push_back(
2234 bitmap_id_sizes[candidate_index].bitmap_id); 2222 bitmap_id_sizes[candidate_index].bitmap_id);
(...skipping 608 matching lines...) Expand 10 before | Expand all | Expand 10 after
2843 int rank = kPageVisitStatsMaxTopSites; 2831 int rank = kPageVisitStatsMaxTopSites;
2844 std::map<GURL, int>::const_iterator it = most_visited_urls_map_.find(url); 2832 std::map<GURL, int>::const_iterator it = most_visited_urls_map_.find(url);
2845 if (it != most_visited_urls_map_.end()) 2833 if (it != most_visited_urls_map_.end())
2846 rank = (*it).second; 2834 rank = (*it).second;
2847 UMA_HISTOGRAM_ENUMERATION("History.TopSitesVisitsByRank", 2835 UMA_HISTOGRAM_ENUMERATION("History.TopSitesVisitsByRank",
2848 rank, kPageVisitStatsMaxTopSites + 1); 2836 rank, kPageVisitStatsMaxTopSites + 1);
2849 } 2837 }
2850 #endif 2838 #endif
2851 2839
2852 } // namespace history 2840 } // namespace history
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698