New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 846169 link

Starred by 2 users

Issue metadata

Status: Fixed
Owner:
Last visit > 30 days ago
Closed: Jun 2018
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Chrome
Pri: 1
Type: Bug



Sign in to add a comment

exo composition requests can have a slighly wrong size and be rejected

Project Member Reported by lpique@chromium.org, May 24 2018

Issue description

I traced the reason the viz code would possibly reject an exo frame composition request to the exo surface code generating a render pass with a content size that was one pixel larger than the viz surface size.

The rejected frames are unfortunately preventing buffers from being released at the right time, as what is on the display is not released when new contents are committed.

For a device scale factor of "1.6", the actual floating point value stored is 1.60000002384185791015625. The exo surface code which attempted to convert the content size to pixel coordinates ended up with slightly larger values before truncation to an integer. When scaling a bounding rectangle, the truncation of the maximal edges uses ceil(), which ended up growing the box by an extra pixel.

I'll upload a fix.
 
Project Member

Comment 1 by bugdroid1@chromium.org, May 25 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/070e165a53f1abcb2bd3eeac2d89bdb4c0870049

commit 070e165a53f1abcb2bd3eeac2d89bdb4c0870049
Author: Lloyd Pique <lpique@chromium.org>
Date: Fri May 25 23:58:49 2018

[exo] Set the render pass output rect to a consistent size

The render pass output rectangle needs to be set to a consistent size
that does not change unless the window size also changes.

The prior process involved computing the pixel size output rectangle
affected by each exo surface, and taking the union of all those to get
the render pass output rect.

The window size however is computed by taking the union of the
rectangles in device-independent pixels, and only converting the size of
the resulting rectangle to device pixels at the end.

Rectangle conversions are done to bound the floating-point
intermediates. Size conversions always round down. And with some
interesting device scale factors like "1.6" the intermediate floating
point values did not have a nice conversion from integer values.

This patch alters how the render pass output rectangle is computed so
that a consistent value is calculated.

If the window size does change, then a new surface will be allocated,
and a new surface will be allocated for the new size.

Bug:  846169 
Change-Id: I05b5dff53b7c5c050150571b5334b06c8de2ee32
Reviewed-on: https://chromium-review.googlesource.com/1071118
Commit-Queue: Lloyd Pique <lpique@chromium.org>
Reviewed-by: David Reveman <reveman@chromium.org>
Cr-Commit-Position: refs/heads/master@{#562068}
[modify] https://crrev.com/070e165a53f1abcb2bd3eeac2d89bdb4c0870049/components/exo/surface.cc
[modify] https://crrev.com/070e165a53f1abcb2bd3eeac2d89bdb4c0870049/components/exo/surface_tree_host.cc

Comment 2 by lpique@chromium.org, May 30 2018

Cc: bhthompson@chromium.org alexpau@chromium.org kbleicher@chromium.org
Labels: Merge-Request-67 Merge-Request-68
Status: Started (was: Untriaged)
See b/77167234 where this merge has been effectively approved for 68. It sounds like we also want it in 67.
Project Member

Comment 3 by sheriffbot@chromium.org, May 30 2018

Labels: -Merge-Request-67 Merge-Review-67 Hotlist-Merge-Review
This bug requires manual review: Request affecting a post-stable build
Please contact the milestone owner if you have questions.
Owners: cmasso@(Android), cmasso@(iOS), kbleicher@(ChromeOS), govind@(Desktop)

For more details visit https://www.chromium.org/issue-tracking/autotriage - Your friendly Sheriffbot
Project Member

Comment 4 by sheriffbot@chromium.org, May 31 2018

Labels: -Merge-Request-68 Hotlist-Merge-Approved Merge-Approved-68
Your change meets the bar and is auto-approved for M68. Please go ahead and merge the CL to branch 3440 manually. Please contact milestone owner if you have questions.
Owners: cmasso@(Android), kariahda@(iOS), bhthompson@(ChromeOS), abdulsyed@(Desktop)

For more details visit https://www.chromium.org/issue-tracking/autotriage - Your friendly Sheriffbot

Comment 5 by lpique@chromium.org, May 31 2018

Owner: reve...@chromium.org
Once again I cannot submit as I'm not a chromium-committer.

@reveman, I don't expect you can +cq the review, but I believe you can run the cherry-pick and verify you get the same CL.

The git drover command was:

git drover --branch 3440 --cherry-pick 070e165a53f1abcb2bd3eeac2d89bdb4c0870049


Comment 6 by lpique@chromium.org, May 31 2018

Cc: lpique@chromium.org

Comment 7 by lpique@chromium.org, May 31 2018

Status: Assigned (was: Started)
Project Member

Comment 9 by bugdroid1@chromium.org, Jun 1 2018

Labels: -merge-approved-68 merge-merged-3440
The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/d73101f28d262fc990f460585a0f3bc82db0581c

commit d73101f28d262fc990f460585a0f3bc82db0581c
Author: Lloyd Pique <lpique@chromium.org>
Date: Fri Jun 01 00:54:51 2018

[exo] Set the render pass output rect to a consistent size

The render pass output rectangle needs to be set to a consistent size
that does not change unless the window size also changes.

The prior process involved computing the pixel size output rectangle
affected by each exo surface, and taking the union of all those to get
the render pass output rect.

The window size however is computed by taking the union of the
rectangles in device-independent pixels, and only converting the size of
the resulting rectangle to device pixels at the end.

Rectangle conversions are done to bound the floating-point
intermediates. Size conversions always round down. And with some
interesting device scale factors like "1.6" the intermediate floating
point values did not have a nice conversion from integer values.

This patch alters how the render pass output rectangle is computed so
that a consistent value is calculated.

If the window size does change, then a new surface will be allocated,
and a new surface will be allocated for the new size.

TBR=lpique@chromium.org

(cherry picked from commit 070e165a53f1abcb2bd3eeac2d89bdb4c0870049)

Bug:  846169 
Change-Id: I05b5dff53b7c5c050150571b5334b06c8de2ee32
Reviewed-on: https://chromium-review.googlesource.com/1071118
Commit-Queue: Lloyd Pique <lpique@chromium.org>
Reviewed-by: David Reveman <reveman@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#562068}
Reviewed-on: https://chromium-review.googlesource.com/1080072
Cr-Commit-Position: refs/branch-heads/3440@{#80}
Cr-Branched-From: 010ddcfda246975d194964ccf20038ebbdec6084-refs/heads/master@{#561733}
[modify] https://crrev.com/d73101f28d262fc990f460585a0f3bc82db0581c/components/exo/surface.cc
[modify] https://crrev.com/d73101f28d262fc990f460585a0f3bc82db0581c/components/exo/surface_tree_host.cc

Owner: lpique@chromium.org
Back to me to cherry-pick to 67 if approved.
Per #2 b/77167234 was approved since limited to nautilus.  Similar here?  This is a biggish change this late in M67.  Critical / Impact?
This is the smallest change I could make that fixes the bug. As noted there, it is a launch blocker.
Project Member

Comment 13 by bugdroid1@chromium.org, Jun 5 2018

Labels: merge-merged-3396
The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/b48fd4a05cdb52a1284194f72145b5df29519f0a

commit b48fd4a05cdb52a1284194f72145b5df29519f0a
Author: Lloyd Pique <lpique@chromium.org>
Date: Tue Jun 05 00:31:05 2018

[exo] Set the render pass output rect to a consistent size

The render pass output rectangle needs to be set to a consistent size
that does not change unless the window size also changes.

The prior process involved computing the pixel size output rectangle
affected by each exo surface, and taking the union of all those to get
the render pass output rect.

The window size however is computed by taking the union of the
rectangles in device-independent pixels, and only converting the size of
the resulting rectangle to device pixels at the end.

Rectangle conversions are done to bound the floating-point
intermediates. Size conversions always round down. And with some
interesting device scale factors like "1.6" the intermediate floating
point values did not have a nice conversion from integer values.

This patch alters how the render pass output rectangle is computed so
that a consistent value is calculated.

If the window size does change, then a new surface will be allocated,
and a new surface will be allocated for the new size.

TBR=lpique@chromium.org

(cherry picked from commit 070e165a53f1abcb2bd3eeac2d89bdb4c0870049)

Bug:  846169 
Change-Id: I05b5dff53b7c5c050150571b5334b06c8de2ee32
Reviewed-on: https://chromium-review.googlesource.com/1071118
Commit-Queue: Lloyd Pique <lpique@chromium.org>
Reviewed-by: David Reveman <reveman@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#562068}
Reviewed-on: https://chromium-review.googlesource.com/1086282
Reviewed-by: Bernie Thompson <bhthompson@chromium.org>
Cr-Commit-Position: refs/branch-heads/3396@{#746}
Cr-Branched-From: 9ef2aa869bc7bc0c089e255d698cca6e47d6b038-refs/heads/master@{#550428}
[modify] https://crrev.com/b48fd4a05cdb52a1284194f72145b5df29519f0a/components/exo/surface.cc
[modify] https://crrev.com/b48fd4a05cdb52a1284194f72145b5df29519f0a/components/exo/surface_tree_host.cc

Status: Fixed (was: Assigned)
Noted where as a launch blocker? It this extra change limited to  nautilus?  Please answer all since timing is critical for M67.  Thanks
It was noted in b/77167234. This is in a code path used by ARC++ for all targets, but it is a fix for nautilus in particular.
FYI, With the number of bugs we review it helps to give more context to expedite rather than have us reverse engineer a large bug.   The issue, user impact, etc. may not be readily available otherwise.

Need to IM this with the owner; still not clear to me via the bug comments.



Ping?  Very late in M67 lifecycle.
Oh, sorry, I expected the ping on IM and neglected to follow up when I never got such a ping.

Let me try again to answer your questions.

b/77167234 has the blocks-fsi and Proj-Nautilus, as added by alexpau@ just after comment #27

This change fixes Nautlius, and should not affect other targets, as in the end the computed size should be the same. Nautilus was a problem because of floating point error that was introduced, causing the size computation to be off by one. The scale factor used there of "1.6" cannot be exactly represented.

The change is in a common code path affecting all targets otherwise, so it in that sense it is not a Nautilus specific fix.

The code path is used by ARC++, which is what b/77167234 is about fixing for certain apps on Nautiluis, and perhaps other things I do not know about, but is not used by the browser itself.

Apologies, you're right, I did say I'd IM but time got away from me.

Thanks for the context.  If this has been tested and deemed low risk (and limited to Nautilus) I'll approve the merge.

Thanks again,
I tested it on a Nautilus when I made it, and the fix has been submitted for a while now and I've heard of no more issues elsewhere.

One niggling process detail though is that it has already merged to M67 with the commit recorded here in comment 13 (approved in b/77167234 by #25), unless you were thinking about approving some some other kind of merge I'm not aware about.

Sorry, it may have been confusing since I opened bugs here for the issues I found in Chrome that I felt needed to be resolved.

Labels: -Merge-Review-67 Merge-Approved-67
Spoke to the owner on IM.  We don't believe there is more to merge but I'm approving given the scope (Nautilus).  If there *is* a merge please IM / do it soon.  Thx 

Approving merge to M67 Chrome OS.

Project Member

Comment 23 by sheriffbot@chromium.org, Jun 25 2018

This issue has been approved for a merge. Please merge the fix to any appropriate branches as soon as possible!

If all merges have been completed, please remove any remaining Merge-Approved labels from this issue.

Thanks for your time! To disable nags, add the Disable-Nags label.

For more details visit https://www.chromium.org/issue-tracking/autotriage - Your friendly Sheriffbot
Project Member

Comment 24 by sheriffbot@chromium.org, Jun 28 2018

This issue has been approved for a merge. Please merge the fix to any appropriate branches as soon as possible!

If all merges have been completed, please remove any remaining Merge-Approved labels from this issue.

Thanks for your time! To disable nags, add the Disable-Nags label.

For more details visit https://www.chromium.org/issue-tracking/autotriage - Your friendly Sheriffbot
Labels: -Hotlist-Merge-Review -Hotlist-Merge-Approved -Merge-Approved-67
The change should have been merged to m67 already at #13

Sign in to add a comment