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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java

Issue 2524833002: Revert of CompositorViewHolder is source of truth for viewports (Closed)
Patch Set: Created 4 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManager.java » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java
index 86e046e8e68befe1b5724cffebb4c1d8ac95ba9f..4fab61f8e2a2e3e558ddc8d7a75ae0436bafe269 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java
@@ -118,6 +118,7 @@
// Cache objects that should not be created frequently.
private final RectF mCacheViewport = new RectF();
+ private final RectF mCacheVisibleViewport = new RectF();
private DrawingInfo mProgressBarDrawingInfo;
// If we've drawn at least one frame.
@@ -203,7 +204,7 @@
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom,
int oldLeft, int oldTop, int oldRight, int oldBottom) {
- onViewportChanged();
+ propagateViewportToLayouts(right - left, bottom - top);
// If there's an event that needs to occur after the keyboard is hidden, post
// it as a delayed event. Otherwise this happens in the midst of the
@@ -229,7 +230,7 @@
*/
public void setLayoutManager(LayoutManager layoutManager) {
mLayoutManager = layoutManager;
- onViewportChanged();
+ propagateViewportToLayouts(getWidth(), getHeight());
}
/**
@@ -452,13 +453,13 @@
@Override
public void onContentOffsetChanged(float offset) {
mLastContentOffset = offset;
- onViewportChanged();
+ propagateViewportToLayouts(getWidth(), getHeight());
}
@Override
public void onVisibleContentOffsetChanged(float offset, boolean needsAnimate) {
mLastVisibleContentOffset = offset;
- onViewportChanged();
+ propagateViewportToLayouts(getWidth(), getHeight());
if (needsAnimate) requestRender();
}
@@ -493,12 +494,27 @@
}
}
- private void onViewportChanged() {
+ private void propagateViewportToLayouts(int contentWidth, int contentHeight) {
+ int heightMinusBrowserControls = contentHeight
+ - (getTopControlsHeightPixels() + getBottomControlsHeightPixels());
+ int bottomControlOffset = mFullscreenManager != null
+ ? (int) mFullscreenManager.getBottomControlOffset() : 0;
+ int viewportBottom =
+ contentHeight - (getBottomControlsHeightPixels() - bottomControlOffset);
+
+ // The only time that mCacheViewport and mCacheVisibleViewport are different is when the
+ // browser has manipulated the browser controls offset.
+ mCacheViewport.set(0, (int) mLastContentOffset, contentWidth, viewportBottom);
+ mCacheVisibleViewport.set(0, (int) mLastVisibleContentOffset, contentWidth, viewportBottom);
// TODO(changwan): check if this can be merged with setContentMotionEventOffsets.
if (mTabVisible != null && mTabVisible.getContentViewCore() != null) {
- mTabVisible.getContentViewCore().setSmartClipOffsets(0, (int) -mLastContentOffset);
- }
- if (mLayoutManager != null) mLayoutManager.onViewportChanged();
+ mTabVisible.getContentViewCore().setSmartClipOffsets(
+ (int) -mCacheViewport.left, (int) -mCacheViewport.top);
+ }
+ if (mLayoutManager != null) {
+ mLayoutManager.pushNewViewport(
+ mCacheViewport, mCacheVisibleViewport, heightMinusBrowserControls);
+ }
}
/**
@@ -522,32 +538,6 @@
}
TraceEvent.end("CompositorViewHolder:layout");
- }
-
- @Override
- public void getWindowViewport(RectF outRect) {
- outRect.set(0, 0, getWidth(), getHeight());
- }
-
- @Override
- public void getVisibleViewport(RectF outRect) {
- // All of these values are in pixels.
- float viewportTop = 0;
- float bottomControlOffset = 0;
- if (mFullscreenManager != null) {
- viewportTop = mFullscreenManager.getTopVisibleContentOffset();
- bottomControlOffset = mFullscreenManager.getBottomControlOffset();
- }
- float viewportBottom =
- getHeight() - (getBottomControlsHeightPixels() - bottomControlOffset);
-
- outRect.set(0, viewportTop, getWidth(), viewportBottom);
- }
-
- @Override
- public float getHeightMinusBrowserControls() {
- return getHeight() - (getTopControlsHeightPixels() + getBottomControlsHeightPixels());
-
}
@Override
@@ -624,7 +614,7 @@
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
if (changed) {
- onViewportChanged();
+ propagateViewportToLayouts(r - l, b - t);
}
super.onLayout(changed, l, t, r, b);
@@ -654,7 +644,7 @@
mLastVisibleContentOffset = mFullscreenManager.getTopVisibleContentOffset();
mFullscreenManager.addListener(this);
}
- onViewportChanged();
+ propagateViewportToLayouts(getWidth(), getHeight());
}
@Override
@@ -691,7 +681,7 @@
public float getOverlayTranslateY() {
return areBrowserControlsPermanentlyHidden()
? getTopControlsHeightPixels()
- : mLastVisibleContentOffset;
+ : mCacheVisibleViewport.top;
}
/**
« no previous file with comments | « no previous file | chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManager.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698