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

Side by Side Diff: content/public/android/java/src/org/chromium/content/browser/PopupZoomer.java

Issue 549163002: Improve performance in onDraw() by creating RectF object only once. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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 package org.chromium.content.browser; 5 package org.chromium.content.browser;
6 6
7 import android.content.Context; 7 import android.content.Context;
8 import android.content.res.Resources; 8 import android.content.res.Resources;
9 import android.graphics.Bitmap; 9 import android.graphics.Bitmap;
10 import android.graphics.Canvas; 10 import android.graphics.Canvas;
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 115
116 // Since we sometimes overflow the bounds of the mViewClipRect, we need to a llow scrolling. 116 // Since we sometimes overflow the bounds of the mViewClipRect, we need to a llow scrolling.
117 // Current scroll position. 117 // Current scroll position.
118 private float mPopupScrollX, mPopupScrollY; 118 private float mPopupScrollX, mPopupScrollY;
119 // Scroll bounds. 119 // Scroll bounds.
120 private float mMinScrollX, mMaxScrollX; 120 private float mMinScrollX, mMaxScrollX;
121 private float mMinScrollY, mMaxScrollY; 121 private float mMinScrollY, mMaxScrollY;
122 122
123 private GestureDetector mGestureDetector; 123 private GestureDetector mGestureDetector;
124 124
125 // These bounds are computed in onDraw().
Yaron 2014/09/10 01:37:16 perhaps update to say: // These bounds are compute
wajahat 2014/09/10 11:34:52 Done.
126 private RectF mDrawRect;
127
125 private static float getOverlayCornerRadius(Context context) { 128 private static float getOverlayCornerRadius(Context context) {
126 if (sOverlayCornerRadius == 0) { 129 if (sOverlayCornerRadius == 0) {
127 try { 130 try {
128 sOverlayCornerRadius = context.getResources().getDimension( 131 sOverlayCornerRadius = context.getResources().getDimension(
129 R.dimen.link_preview_overlay_radius); 132 R.dimen.link_preview_overlay_radius);
130 } catch (Resources.NotFoundException e) { 133 } catch (Resources.NotFoundException e) {
131 Log.w(LOGTAG, "No corner radius resource for PopupZoomer overlay found."); 134 Log.w(LOGTAG, "No corner radius resource for PopupZoomer overlay found.");
132 sOverlayCornerRadius = 1.0f; 135 sOverlayCornerRadius = 1.0f;
133 } 136 }
134 } 137 }
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after
455 // i.e. scale grows from 1/mScale to 1. Note that extrusion values are a lready zoomed 458 // i.e. scale grows from 1/mScale to 1. Note that extrusion values are a lready zoomed
456 // with mScale. 459 // with mScale.
457 float scale = fractionAnimation * (mScale - 1.0f) / mScale + 1.0f / mSca le; 460 float scale = fractionAnimation * (mScale - 1.0f) / mScale + 1.0f / mSca le;
458 461
459 // Since we want the content to appear directly above its counterpart on the 462 // Since we want the content to appear directly above its counterpart on the
460 // page, we need to remove the mShiftX/Y effect at the beginning of the animation. 463 // page, we need to remove the mShiftX/Y effect at the beginning of the animation.
461 // The unshifting decreases with the animation. 464 // The unshifting decreases with the animation.
462 float unshiftX = -mShiftX * (1.0f - fractionAnimation) / mScale; 465 float unshiftX = -mShiftX * (1.0f - fractionAnimation) / mScale;
463 float unshiftY = -mShiftY * (1.0f - fractionAnimation) / mScale; 466 float unshiftY = -mShiftY * (1.0f - fractionAnimation) / mScale;
464 467
465 // Compute the rect to show. 468 // Compute the |mDrawRect| to show.
466 RectF rect = new RectF(); 469 mDrawRect.left = mTouch.x - mLeftExtrusion * scale + unshiftX;
467 rect.left = mTouch.x - mLeftExtrusion * scale + unshiftX; 470 mDrawRect.top = mTouch.y - mTopExtrusion * scale + unshiftY;
468 rect.top = mTouch.y - mTopExtrusion * scale + unshiftY; 471 mDrawRect.right = mTouch.x + mRightExtrusion * scale + unshiftX;
469 rect.right = mTouch.x + mRightExtrusion * scale + unshiftX; 472 mDrawRect.bottom = mTouch.y + mBottomExtrusion * scale + unshiftY;
470 rect.bottom = mTouch.y + mBottomExtrusion * scale + unshiftY; 473 canvas.clipRect(mDrawRect);
471 canvas.clipRect(rect);
472 474
473 // Since the canvas transform APIs all pre-concat the transformations, t his is done in 475 // Since the canvas transform APIs all pre-concat the transformations, t his is done in
474 // reverse order. The canvas is first scaled up, then shifted the approp riate amount of 476 // reverse order. The canvas is first scaled up, then shifted the approp riate amount of
475 // pixels. 477 // pixels.
476 canvas.scale(scale, scale, rect.left, rect.top); 478 canvas.scale(scale, scale, mDrawRect.left, mDrawRect.top);
477 canvas.translate(mPopupScrollX, mPopupScrollY); 479 canvas.translate(mPopupScrollX, mPopupScrollY);
478 canvas.drawBitmap(mZoomedBitmap, rect.left, rect.top, null); 480 canvas.drawBitmap(mZoomedBitmap, mDrawRect.left, mDrawRect.top, null);
479 canvas.restore(); 481 canvas.restore();
480 Drawable overlayNineTile = getOverlayDrawable(getContext()); 482 Drawable overlayNineTile = getOverlayDrawable(getContext());
481 overlayNineTile.setBounds((int) rect.left - sOverlayPadding.left, 483 overlayNineTile.setBounds((int) mDrawRect.left - sOverlayPadding.left,
482 (int) rect.top - sOverlayPadding.top, 484 (int) mDrawRect.top - sOverlayPadding.top,
483 (int) rect.right + sOverlayPadding.right, 485 (int) mDrawRect.right + sOverlayPadding.right,
484 (int) rect.bottom + sOverlayPadding.bottom); 486 (int) mDrawRect.bottom + sOverlayPadding.bottom);
485 // TODO(nileshagrawal): We should use time here instead of fractionAnima tion 487 // TODO(nileshagrawal): We should use time here instead of fractionAnima tion
486 // as fractionAnimaton is interpolated and can go over 1. 488 // as fractionAnimaton is interpolated and can go over 1.
487 int alpha = constrain((int) (fractionAnimation * 255), 0, 255); 489 int alpha = constrain((int) (fractionAnimation * 255), 0, 255);
488 overlayNineTile.setAlpha(alpha); 490 overlayNineTile.setAlpha(alpha);
489 overlayNineTile.draw(canvas); 491 overlayNineTile.draw(canvas);
490 canvas.restore(); 492 canvas.restore();
491 } 493 }
492 494
493 /** 495 /**
494 * Show the PopupZoomer view with given target bounds. 496 * Show the PopupZoomer view with given target bounds.
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
546 } 548 }
547 549
548 @Override 550 @Override
549 public float getInterpolation(float input) { 551 public float getInterpolation(float input) {
550 input = 1.0f - input; 552 input = 1.0f - input;
551 if (mInterpolator == null) return input; 553 if (mInterpolator == null) return input;
552 return mInterpolator.getInterpolation(input); 554 return mInterpolator.getInterpolation(input);
553 } 555 }
554 } 556 }
555 } 557 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698