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/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetArticleViewHolder.java

Issue 2865963003: [Suggestions UI] Drop Bitmap references from articles under memory pressure. (Closed)
Patch Set: comment Created 3 years, 7 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 package org.chromium.chrome.browser.ntp.snippets; 5 package org.chromium.chrome.browser.ntp.snippets;
6 6
7 import android.annotation.SuppressLint; 7 import android.annotation.SuppressLint;
8 import android.content.res.ColorStateList; 8 import android.content.res.ColorStateList;
9 import android.content.res.Resources; 9 import android.content.res.Resources;
10 import android.graphics.Bitmap; 10 import android.graphics.Bitmap;
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 347
348 if (fileType != DownloadFilter.FILTER_IMAGE) return; 348 if (fileType != DownloadFilter.FILTER_IMAGE) return;
349 if (mImageCallback != null) { 349 if (mImageCallback != null) {
350 mThumbnailProvider.cancelRetrieval(mImageCallback); 350 mThumbnailProvider.cancelRetrieval(mImageCallback);
351 mImageCallback = null; 351 mImageCallback = null;
352 } 352 }
353 mImageCallback = new FetchImageCallback(this, mArticle); 353 mImageCallback = new FetchImageCallback(this, mArticle);
354 mArticle.setThumbnailBitmap(null); 354 mArticle.setThumbnailBitmap(null);
355 Bitmap thumbnail = mThumbnailProvider.getThumbnail(mImageCallback); 355 Bitmap thumbnail = mThumbnailProvider.getThumbnail(mImageCallback);
356 if (thumbnail == null || thumbnail.isRecycled()) return; 356 if (thumbnail == null || thumbnail.isRecycled()) return;
357 mArticle.setThumbnailBitmap(thumbnail); 357 mArticle.setThumbnailBitmap(mUiDelegate.getReferencePool().put(thumb nail));
358 setThumbnailFromBitmap(thumbnail); 358 setThumbnailFromBitmap(thumbnail);
359 359
360 return; 360 return;
361 } 361 }
362 362
363 setThumbnailFromFileType(DownloadFilter.FILTER_PAGE); 363 setThumbnailFromFileType(DownloadFilter.FILTER_PAGE);
364 } 364 }
365 365
366 private void setThumbnail() { 366 private void setThumbnail() {
367 // If there's still a pending thumbnail fetch, cancel it. 367 // If there's still a pending thumbnail fetch, cancel it.
368 cancelImageFetch(); 368 cancelImageFetch();
369 369
370 // mThumbnailView's visibility is modified in updateLayout(). 370 // mThumbnailView's visibility is modified in updateLayout().
371 if (mThumbnailView.getVisibility() != View.VISIBLE) return; 371 if (mThumbnailView.getVisibility() != View.VISIBLE) return;
372 if (mArticle.getThumbnailBitmap() != null && !mArticle.getThumbnailBitma p().isRecycled()) { 372 Bitmap thumbnail = mArticle.getThumbnailBitmap();
373 setThumbnailFromBitmap(mArticle.getThumbnailBitmap()); 373 if (thumbnail != null && !thumbnail.isRecycled()) {
374 setThumbnailFromBitmap(thumbnail);
374 return; 375 return;
375 } 376 }
376 377
377 if (mArticle.isDownload()) { 378 if (mArticle.isDownload()) {
378 setDownloadThumbnail(); 379 setDownloadThumbnail();
379 return; 380 return;
380 } 381 }
381 382
382 // Temporarily set placeholder and then fetch the thumbnail from a provi der. 383 // Temporarily set placeholder and then fetch the thumbnail from a provi der.
383 mThumbnailView.setBackground(null); 384 mThumbnailView.setBackground(null);
(...skipping 25 matching lines...) Expand all
409 410
410 // We need to crop and scale the downloaded bitmap, as the ImageView we set it on won't be 411 // We need to crop and scale the downloaded bitmap, as the ImageView we set it on won't be
411 // able to do so when using a TransitionDrawable (as opposed to the stra ight bitmap). 412 // able to do so when using a TransitionDrawable (as opposed to the stra ight bitmap).
412 // That's a limitation of TransitionDrawable, which doesn't handle layer s of varying sizes. 413 // That's a limitation of TransitionDrawable, which doesn't handle layer s of varying sizes.
413 Resources res = mThumbnailView.getResources(); 414 Resources res = mThumbnailView.getResources();
414 int targetSize = res.getDimensionPixelSize(R.dimen.snippets_thumbnail_si ze); 415 int targetSize = res.getDimensionPixelSize(R.dimen.snippets_thumbnail_si ze);
415 Bitmap scaledThumbnail = ThumbnailUtils.extractThumbnail( 416 Bitmap scaledThumbnail = ThumbnailUtils.extractThumbnail(
416 thumbnail, targetSize, targetSize, ThumbnailUtils.OPTIONS_RECYCL E_INPUT); 417 thumbnail, targetSize, targetSize, ThumbnailUtils.OPTIONS_RECYCL E_INPUT);
417 418
418 // Store the bitmap to skip the download task next time we display this snippet. 419 // Store the bitmap to skip the download task next time we display this snippet.
419 snippet.setThumbnailBitmap(scaledThumbnail); 420 snippet.setThumbnailBitmap(mUiDelegate.getReferencePool().put(scaledThum bnail));
420 421
421 // Cross-fade between the placeholder and the thumbnail. We cross-fade b ecause the incoming 422 // Cross-fade between the placeholder and the thumbnail. We cross-fade b ecause the incoming
422 // image may have transparency and we don't want the previous image show ing up behind. 423 // image may have transparency and we don't want the previous image show ing up behind.
423 Drawable[] layers = {mThumbnailView.getDrawable(), 424 Drawable[] layers = {mThumbnailView.getDrawable(),
424 new BitmapDrawable(mThumbnailView.getResources(), scaledThumbnai l)}; 425 new BitmapDrawable(mThumbnailView.getResources(), scaledThumbnai l)};
425 TransitionDrawable transitionDrawable = new TransitionDrawable(layers); 426 TransitionDrawable transitionDrawable = new TransitionDrawable(layers);
426 mThumbnailView.setScaleType(ImageView.ScaleType.CENTER_CROP); 427 mThumbnailView.setScaleType(ImageView.ScaleType.CENTER_CROP);
427 mThumbnailView.setBackground(null); 428 mThumbnailView.setBackground(null);
428 mThumbnailView.setImageDrawable(transitionDrawable); 429 mThumbnailView.setImageDrawable(transitionDrawable);
429 mThumbnailView.setTint(null); 430 mThumbnailView.setTint(null);
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
583 * Callback to refresh the offline badge visibility. 584 * Callback to refresh the offline badge visibility.
584 */ 585 */
585 public static class RefreshOfflineBadgeVisibilityCallback extends PartialBin dCallback { 586 public static class RefreshOfflineBadgeVisibilityCallback extends PartialBin dCallback {
586 @Override 587 @Override
587 public void onResult(NewTabPageViewHolder holder) { 588 public void onResult(NewTabPageViewHolder holder) {
588 assert holder instanceof SnippetArticleViewHolder; 589 assert holder instanceof SnippetArticleViewHolder;
589 ((SnippetArticleViewHolder) holder).refreshOfflineBadgeVisibility(); 590 ((SnippetArticleViewHolder) holder).refreshOfflineBadgeVisibility();
590 } 591 }
591 } 592 }
592 } 593 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698