Index: chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetArticleViewHolder.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetArticleViewHolder.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetArticleViewHolder.java |
index 2dad1b217748cba66943d746ed405674f9201c46..9d4c600b658f34c89e990e6718297b4cdbeeb737 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetArticleViewHolder.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetArticleViewHolder.java |
@@ -93,6 +93,7 @@ public class SnippetArticleViewHolder extends CardViewHolder implements Impressi |
private SnippetArticle mArticle; |
private SuggestionsCategoryInfo mCategoryInfo; |
private int mPublisherFaviconSizePx; |
+ private long mFaviconFetchStartTime; |
Michael van Ouwerkerk
2017/04/12 13:20:30
nit: rename to mFaviconFetchStartTimeMs
jkrcal
2017/04/13 08:10:45
Done.
|
/** |
* Constructs a {@link SnippetArticleViewHolder} item used to display snippets. |
@@ -205,6 +206,7 @@ public class SnippetArticleViewHolder extends CardViewHolder implements Impressi |
// from moving later. |
setDefaultFaviconOnView(); |
try { |
+ mFaviconFetchStartTime = SystemClock.elapsedRealtime(); |
Michael van Ouwerkerk
2017/04/12 13:20:31
As onBindViewHolder can be called more than once,
jkrcal
2017/04/13 08:10:46
Thanks for spotting this! Done.
The parameter is
|
URI pageUrl = new URI(mArticle.mUrl); |
if (!article.isArticle() || !SnippetsConfig.isFaviconsFromNewServerEnabled()) { |
// The old code path. Remove when the experiment is successful. |
@@ -408,12 +410,28 @@ public class SnippetArticleViewHolder extends CardViewHolder implements Impressi |
PUBLISHER_FAVICON_MINIMUM_SIZE_PX, /* desiredSizePx */ 0, new Callback<Bitmap>() { |
@Override |
public void onResult(Bitmap image) { |
+ recordFaviconFetchTime(); |
Michael van Ouwerkerk
2017/04/12 13:20:31
This will record the time for all results, whether
jkrcal
2017/04/13 08:10:46
I believe that the simple solution is here good en
|
if (image == null) return; |
setFaviconOnView(image); |
} |
}); |
} |
+ private void recordFaviconFetchTime() { |
+ RecordHistogram.recordTimesHistogram( |
Michael van Ouwerkerk
2017/04/12 13:20:31
recordTimesHistogram maxes out at 10 seconds, I th
jkrcal
2017/04/13 08:10:45
Done.
|
+ "NewTabPage.ContentSuggestions.ArticleFaviconFetchTime", |
+ SystemClock.elapsedRealtime() - mFaviconFetchStartTime, TimeUnit.MILLISECONDS); |
+ } |
+ |
+ private void recordFaviconFetchResult(@FaviconFetchResult int result) { |
+ // Record the histogram for articles only to have a fair comparision. |
+ if (!mArticle.isArticle()) return; |
+ RecordHistogram.recordEnumeratedHistogram( |
+ "NewTabPage.ContentSuggestions.ArticleFaviconFetchResult", result, |
+ FaviconFetchResult.RESULT_MAX); |
+ recordFaviconFetchTime(); |
+ } |
+ |
private void fetchFaviconFromLocalCache(final URI snippetUri, final boolean fallbackToService) { |
mUiDelegate.getLocalFaviconImageForURL( |
getSnippetDomain(snippetUri), mPublisherFaviconSizePx, new FaviconImageCallback() { |
@@ -421,8 +439,13 @@ public class SnippetArticleViewHolder extends CardViewHolder implements Impressi |
public void onFaviconAvailable(Bitmap image, String iconUrl) { |
if (image != null) { |
setFaviconOnView(image); |
+ recordFaviconFetchResult(fallbackToService |
+ ? FaviconFetchResult.SUCCESS_CACHED |
+ : FaviconFetchResult.SUCCESS_FETCHED); |
} else if (fallbackToService) { |
- fetchFaviconFromService(snippetUri); |
+ if (!fetchFaviconFromService(snippetUri)) { |
+ recordFaviconFetchResult(FaviconFetchResult.FAILURE); |
+ } |
} |
// Else do nothing, we already have the placeholder set. |
} |
@@ -431,10 +454,10 @@ public class SnippetArticleViewHolder extends CardViewHolder implements Impressi |
// TODO(crbug.com/635567): Fix this properly. |
@SuppressLint("DefaultLocale") |
- private void fetchFaviconFromService(final URI snippetUri) { |
- if (!mUseFaviconService) return; |
+ private boolean fetchFaviconFromService(final URI snippetUri) { |
+ if (!mUseFaviconService) return false; |
int sizePx = getFaviconServiceSupportedSize(); |
- if (sizePx == 0) return; |
+ if (sizePx == 0) return false; |
// Replace the default icon by another one from the service when it is fetched. |
mUiDelegate.ensureIconIsAvailable( |
@@ -443,11 +466,15 @@ public class SnippetArticleViewHolder extends CardViewHolder implements Impressi |
/*useLargeIcon=*/false, /*isTemporary=*/true, new IconAvailabilityCallback() { |
@Override |
public void onIconAvailabilityChecked(boolean newlyAvailable) { |
- if (!newlyAvailable) return; |
+ if (!newlyAvailable) { |
+ recordFaviconFetchResult(FaviconFetchResult.FAILURE); |
+ return; |
+ } |
// The download succeeded, the favicon is in the cache; fetch it. |
fetchFaviconFromLocalCache(snippetUri, /*fallbackToService=*/false); |
} |
}); |
+ return true; |
} |
private int getFaviconServiceSupportedSize() { |