exo composition requests can have a slighly wrong size and be rejected |
|||||||||||||
Issue descriptionI 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.
,
May 30 2018
See b/77167234 where this merge has been effectively approved for 68. It sounds like we also want it in 67.
,
May 30 2018
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
,
May 31 2018
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
,
May 31 2018
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
,
May 31 2018
,
May 31 2018
,
Jun 1 2018
pushed the change https://chromium-review.googlesource.com/c/chromium/src/+/1080072 into M68
,
Jun 1 2018
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
,
Jun 1 2018
Back to me to cherry-pick to 67 if approved.
,
Jun 4 2018
Per #2 b/77167234 was approved since limited to nautilus. Similar here? This is a biggish change this late in M67. Critical / Impact?
,
Jun 4 2018
This is the smallest change I could make that fixes the bug. As noted there, it is a launch blocker.
,
Jun 5 2018
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
,
Jun 5 2018
,
Jun 5 2018
Noted where as a launch blocker? It this extra change limited to nautilus? Please answer all since timing is critical for M67. Thanks
,
Jun 5 2018
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.
,
Jun 13 2018
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.
,
Jun 19 2018
Ping? Very late in M67 lifecycle.
,
Jun 19 2018
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.
,
Jun 20 2018
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,
,
Jun 21 2018
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.
,
Jun 21 2018
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.
,
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
,
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
,
Jul 2
The change should have been merged to m67 already at #13 |
|||||||||||||
►
Sign in to add a comment |
|||||||||||||
Comment 1 by bugdroid1@chromium.org
, May 25 2018