Index: chrome/browser/android/most_visited_sites.cc |
diff --git a/chrome/browser/android/most_visited_sites.cc b/chrome/browser/android/most_visited_sites.cc |
index ae6f1a9b8037d517749edbc9b26b4e9c76b3b577..b281918b1c6618cad015bd9b23413c98ef1c4115 100644 |
--- a/chrome/browser/android/most_visited_sites.cc |
+++ b/chrome/browser/android/most_visited_sites.cc |
@@ -56,18 +56,6 @@ using suggestions::SyncState; |
namespace { |
-// Total number of tiles displayed. |
-const char kNumTilesHistogramName[] = "NewTabPage.NumberOfTiles"; |
-// Tracking thumbnails. |
-const char kNumLocalThumbnailTilesHistogramName[] = |
- "NewTabPage.NumberOfThumbnailTiles"; |
-const char kNumEmptyTilesHistogramName[] = "NewTabPage.NumberOfGrayTiles"; |
-const char kNumServerTilesHistogramName[] = "NewTabPage.NumberOfExternalTiles"; |
- |
-// Format for tile clicks histogram. |
-const char kOpenedItemHistogramFormat[] = "NewTabPage.MostVisited.%s"; |
-// Format for tile impressions histogram. |
-const char kImpressionHistogramFormat[] = "NewTabPage.SuggestionsImpression.%s"; |
// Identifiers for the various tile sources. |
const char kHistogramClientName[] = "client"; |
const char kHistogramServerName[] = "server"; |
@@ -76,6 +64,31 @@ const char kHistogramPopularName[] = "popular"; |
const char kPopularSitesFieldTrialName[] = "NTPPopularSites"; |
+// The visual type of a most visited tile. |
+// |
+// These values must stay in sync with the MostVisitedTileType enum |
+// in histograms.xml. |
+// |
+// A Java counterpart will be generated for this enum. |
+// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.ntp |
+enum MostVisitedTileType { |
+ // The icon or thumbnail hasn't loaded yet. |
+ NONE, |
+ // The item displays a site's actual favicon or touch icon. |
+ ICON_REAL, |
+ // The item displays a color derived from the site's favicon or touch icon. |
+ ICON_COLOR, |
+ // The item displays a default gray box in place of an icon. |
+ ICON_DEFAULT, |
+ // The item displays a locally-captured thumbnail of the site content. |
+ THUMBNAIL_LOCAL, |
+ // The item displays a server-provided thumbnail of the site content. |
+ THUMBNAIL_SERVER, |
+ // The item displays a default graphic in place of a thumbnail. |
+ THUMBNAIL_DEFAULT, |
+ NUM_TILE_TYPES, |
+}; |
+ |
scoped_ptr<SkBitmap> MaybeFetchLocalThumbnail( |
const GURL& url, |
const scoped_refptr<TopSites>& top_sites) { |
@@ -206,7 +219,6 @@ std::string MostVisitedSites::Suggestion::GetSourceHistogramName() const { |
MostVisitedSites::MostVisitedSites(Profile* profile) |
: profile_(profile), num_sites_(0), received_most_visited_sites_(false), |
received_popular_sites_(false), recorded_uma_(false), |
- num_local_thumbs_(0), num_server_thumbs_(0), num_empty_thumbs_(0), |
scoped_observer_(this), weak_ptr_factory_(this) { |
// Register the debugging page for the Suggestions Service and the thumbnails |
// debugging page. |
@@ -234,10 +246,6 @@ void MostVisitedSites::Destroy(JNIEnv* env, jobject obj) { |
delete this; |
} |
-void MostVisitedSites::OnLoadingComplete(JNIEnv* env, jobject obj) { |
- RecordThumbnailUMAMetrics(); |
-} |
- |
void MostVisitedSites::SetMostVisitedURLsObserver(JNIEnv* env, |
jobject obj, |
jobject j_observer, |
@@ -343,18 +351,10 @@ void MostVisitedSites::OnObtainedThumbnail( |
DCHECK_CURRENTLY_ON(BrowserThread::UI); |
JNIEnv* env = AttachCurrentThread(); |
ScopedJavaLocalRef<jobject> j_bitmap; |
- if (bitmap) { |
+ if (bitmap) |
j_bitmap = gfx::ConvertToJavaBitmap(bitmap); |
- if (is_local_thumbnail) { |
- ++num_local_thumbs_; |
- } else { |
- ++num_server_thumbs_; |
- } |
- } else { |
- ++num_empty_thumbs_; |
- } |
Java_ThumbnailCallback_onMostVisitedURLsThumbnailAvailable( |
- env, j_callback->obj(), j_bitmap.obj()); |
+ env, j_callback->obj(), j_bitmap.obj(), is_local_thumbnail); |
} |
void MostVisitedSites::BlacklistUrl(JNIEnv* env, |
@@ -379,15 +379,56 @@ void MostVisitedSites::BlacklistUrl(JNIEnv* env, |
} |
} |
+void MostVisitedSites::RecordTileTypeMetrics(JNIEnv* env, |
+ jobject obj, |
+ jintArray jtile_types, |
+ jboolean is_icon_mode) { |
+ std::vector<int> tile_types; |
+ base::android::JavaIntArrayToIntVector(env, jtile_types, &tile_types); |
+ DCHECK_EQ(current_suggestions_.size(), tile_types.size()); |
+ |
+ int counts_per_type[NUM_TILE_TYPES] = {0}; |
+ for (size_t i = 0; i < tile_types.size(); ++i) { |
+ int tile_type = tile_types[i]; |
+ ++counts_per_type[tile_type]; |
+ std::string histogram = base::StringPrintf( |
+ "NewTabPage.TileType.%s", |
+ current_suggestions_[i]->GetSourceHistogramName().c_str()); |
+ LogHistogramEvent(histogram, tile_type, NUM_TILE_TYPES); |
+ } |
+ |
+ if (is_icon_mode) { |
+ UMA_HISTOGRAM_SPARSE_SLOWLY("NewTabPage.IconsReal", |
+ counts_per_type[ICON_REAL]); |
+ UMA_HISTOGRAM_SPARSE_SLOWLY("NewTabPage.IconsColor", |
+ counts_per_type[ICON_COLOR]); |
+ UMA_HISTOGRAM_SPARSE_SLOWLY("NewTabPage.IconsGray", |
+ counts_per_type[ICON_DEFAULT]); |
+ } else { |
+ UMA_HISTOGRAM_SPARSE_SLOWLY("NewTabPage.NumberOfThumbnailTiles", |
+ counts_per_type[THUMBNAIL_LOCAL]); |
+ UMA_HISTOGRAM_SPARSE_SLOWLY("NewTabPage.NumberOfExternalTiles", |
+ counts_per_type[THUMBNAIL_SERVER]); |
+ UMA_HISTOGRAM_SPARSE_SLOWLY("NewTabPage.NumberOfGrayTiles", |
+ counts_per_type[THUMBNAIL_DEFAULT]); |
+ } |
+} |
+ |
void MostVisitedSites::RecordOpenedMostVisitedItem(JNIEnv* env, |
jobject obj, |
- jint index) { |
+ jint index, |
+ jint tile_type) { |
DCHECK_GE(index, 0); |
DCHECK_LT(index, static_cast<int>(current_suggestions_.size())); |
std::string histogram = base::StringPrintf( |
- kOpenedItemHistogramFormat, |
+ "NewTabPage.MostVisited.%s", |
current_suggestions_[index]->GetSourceHistogramName().c_str()); |
LogHistogramEvent(histogram, index, num_sites_); |
+ |
+ histogram = base::StringPrintf( |
+ "NewTabPage.TileTypeClicked.%s", |
+ current_suggestions_[index]->GetSourceHistogramName().c_str()); |
+ LogHistogramEvent(histogram, tile_type, NUM_TILE_TYPES); |
} |
void MostVisitedSites::OnStateChanged() { |
@@ -667,7 +708,7 @@ void MostVisitedSites::NotifyMostVisitedURLsObserver() { |
if (received_most_visited_sites_ && received_popular_sites_ && |
!recorded_uma_) { |
RecordImpressionUMAMetrics(); |
- UMA_HISTOGRAM_SPARSE_SLOWLY(kNumTilesHistogramName, num_suggestions); |
+ UMA_HISTOGRAM_SPARSE_SLOWLY("NewTabPage.NumberOfTiles", num_suggestions); |
recorded_uma_ = true; |
} |
std::vector<base::string16> titles; |
@@ -710,20 +751,10 @@ void MostVisitedSites::OnPopularSitesAvailable(bool success) { |
QueryMostVisitedURLs(); |
} |
-void MostVisitedSites::RecordThumbnailUMAMetrics() { |
- UMA_HISTOGRAM_SPARSE_SLOWLY(kNumLocalThumbnailTilesHistogramName, |
- num_local_thumbs_); |
- num_local_thumbs_ = 0; |
- UMA_HISTOGRAM_SPARSE_SLOWLY(kNumEmptyTilesHistogramName, num_empty_thumbs_); |
- num_empty_thumbs_ = 0; |
- UMA_HISTOGRAM_SPARSE_SLOWLY(kNumServerTilesHistogramName, num_server_thumbs_); |
- num_server_thumbs_ = 0; |
-} |
- |
void MostVisitedSites::RecordImpressionUMAMetrics() { |
for (size_t i = 0; i < current_suggestions_.size(); i++) { |
std::string histogram = base::StringPrintf( |
- kImpressionHistogramFormat, |
+ "NewTabPage.SuggestionsImpression.%s", |
current_suggestions_[i]->GetSourceHistogramName().c_str()); |
LogHistogramEvent(histogram, static_cast<int>(i), num_sites_); |
} |
@@ -736,7 +767,7 @@ void MostVisitedSites::TopSitesChanged(history::TopSites* top_sites, |
ChangeReason change_reason) { |
if (mv_source_ == TOP_SITES) { |
// The displayed suggestions are invalidated. |
- QueryMostVisitedURLs(); |
+ InitiateTopSitesQuery(); |
} |
} |