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

Unified Diff: telemetry/telemetry/internal/actions/gesture_common.js

Issue 3017493002: Fix coordinate calculations under pinch-zoom
Patch Set: Add comments Created 3 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 side-by-side diff with in-line comments
Download patch
Index: telemetry/telemetry/internal/actions/gesture_common.js
diff --git a/telemetry/telemetry/internal/actions/gesture_common.js b/telemetry/telemetry/internal/actions/gesture_common.js
index ec76ebaedb258ba8a7a2db3eec455dd3baee7273..8ff2eccb230699d5c2be6d7b46f8a8e4c7d6465b 100644
--- a/telemetry/telemetry/internal/actions/gesture_common.js
+++ b/telemetry/telemetry/internal/actions/gesture_common.js
@@ -11,7 +11,7 @@
if (window.__GestureCommon_GetBoundingVisibleRect)
return;
- // Returns the bounding rectangle wrt to the top-most document.
+ // Returns the bounding rectangle wrt to the layout viewport.
function getBoundingRect(el) {
var clientRect = el.getBoundingClientRect();
var bound = { left: clientRect.left,
@@ -32,35 +32,46 @@
return bound;
}
- // TODO(ulan): Remove this function once
- // chrome.gpuBenchmarking.pageScaleFactor is available in reference builds.
- function getPageScaleFactor() {
- if (chrome.gpuBenchmarking.pageScaleFactor)
- return chrome.gpuBenchmarking.pageScaleFactor();
- return 1;
- }
-
// Zoom-independent window height. See crbug.com/627123 for more details.
function getWindowHeight() {
- return getPageScaleFactor() * chrome.gpuBenchmarking.visualViewportHeight();
+ return chrome.gpuBenchmarking.pageScaleFactor() *
+ chrome.gpuBenchmarking.visualViewportHeight();
}
// Zoom-independent window width. See crbug.com/627123 for more details.
function getWindowWidth() {
- return getPageScaleFactor() * chrome.gpuBenchmarking.visualViewportWidth();
+ return chrome.gpuBenchmarking.pageScaleFactor() *
+ chrome.gpuBenchmarking.visualViewportWidth();
}
function clamp(min, value, max) {
return Math.min(Math.max(min, value), max);
}
+ // Returns the bounding rect in the visual viewport's coordinates.
function getBoundingVisibleRect(el) {
// Get the element bounding rect.
var rect = getBoundingRect(el);
+ // TODO(bokan): Remove this once gpuBenchmarking is changed to take all
+ // coordinates in viewport space. crbug.com/610021.
+ if ('gesturesExpectedInViewportCoordinates' in chrome.gpuBenchmarking) {
+ // Apply the visual viewport transform (i.e. pinch-zoom) to the bounding
+ // rect. The viewportX|Y values are in CSS pixels so they don't change
+ // with page scale. We first translate so that the viewport offset is
+ // at the origin and then we apply the scaling factor.
+ const scale = chrome.gpuBenchmarking.pageScaleFactor();
+ const visualViewportX = chrome.gpuBenchmarking.visualViewportX();
+ const visualViewportY = chrome.gpuBenchmarking.visualViewportY();
+ rect.top = (rect.top - visualViewportY) * scale;
+ rect.left = (rect.left - visualViewportX) * scale;
+ rect.width *= scale;
+ rect.height *= scale;
+ }
+
// Get the window dimensions.
- var windowHeight = getWindowHeight();
- var windowWidth = getWindowWidth();
+ const windowHeight = getWindowHeight();
+ const windowWidth = getWindowWidth();
// Then clip the rect to the screen size.
rect.top = clamp(0, rect.top, windowHeight);
« no previous file with comments | « telemetry/telemetry/internal/actions/action_runner.py ('k') | telemetry/telemetry/internal/actions/pinch.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698