New issue
Advanced search Search tips

Issue 693826 link

Starred by 1 user

Issue metadata

Status: Fixed
Owner:
Closed: Mar 2017
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Linux
Pri: 2
Type: Bug-Regression

Blocked on:
issue 606984



Sign in to add a comment

Flickering on Poster Circle

Project Member Reported by vmi...@chromium.org, Feb 18 2017

Issue description

Chrome Version: 56.0.2924.87 (reproduced back in r403559)
OS: Linux

What steps will reproduce the problem?
(1) Open https://webkit.org/blog-files/3d-transforms/poster-circle.html
(2) Observe posters for several seconds.

Occasionally seeing flickering on 1/2 of a poster.

This issue bisects to the following change:

commit	3e9082bfc63be6b304543ee499354fd71ea063ae	[log] [tgz]
author	tobiasjs <tobiasjs@chromium.org>	Fri Jul 01 23:18:38 2016

Perform BSP polygon splitting and orientation selection in a single step.

This eliminates redundant testing of vertices for orientation with
respect to the splitting polygon. Previously, up to 3 sets of tests
were made (once to determine whether the polygon was split, then once
during the split, and then finally to determine the orientation of the
split polygons.

Merging these steps in order to reuse calculated values also eliminates
the possibility that different calculations in testing and splitting
could be inconsistent.

BUG=606984
Review-Url: https://codereview.chromium.org/2043283002
 
I can see this on bot builds, but not on anything I build locally. I presume that's not the case for you, if you were able to bisect. What build args are you using?
Ok, I've found a static repro case:

<html>
  <style type="text/css">
    #stage {
      margin: 150px auto;
      width: 600px;
      height: 400px;
      -webkit-perspective: 800;
    }
    #rotate {
      margin: 0 auto;
      width: 600px;
      height: 400px;
      -webkit-transform-style: preserve-3d;
    }
    .ring {
      margin: 0 auto;
      height: 110px;
      width: 600px;
      -webkit-transform-style: preserve-3d;
    }
    .ring > div {
      background-color: #995C7F;
    }
    .poster {
      position: absolute;
      left: 250px;
      width: 100px;
      height: 100px;
    }
  </style>

  </head>
  <body>
    <div id="stage">
      <div id="rotate" style="transform: rotateX(139.571deg);">
        <div id="ring-1" class="ring" style="transform: rotateY(325.667deg);">
          <div class="poster" style="transform: rotateY(30deg) translateZ(200px);"></div>
        </div>
        <div id="ring-2" class="ring" style="transform: rotateY(-244.25deg);">
          <div class="poster" style="transform: rotateY(240deg) translateZ(200px);"></div>
        </div>
      </div>
    </div>
  </body>
</html>

The vertex_distance array in SplitPolygon has signs [ 0, 0, -, + ]

Which indicates that floating point rounding has ended up creating a polygon that is not flat, which is why the splitting is failing.

Comment 4 by vmi...@chromium.org, Feb 23 2017

#1 I haven't tried on a local build, as I was able to bisect to the one revision with bot builds.
Project Member

Comment 5 by bugdroid1@chromium.org, Mar 1 2017

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

commit 02a3371e8aa5f5ec354509e3625371cbf6f81707
Author: tobiasjs <tobiasjs@chromium.org>
Date: Wed Mar 01 09:01:38 2017

Correct polygon splitting in an almost-coplanar case.

In the case described in the associated bug, the signs of the vertices
of the quad to be split are [ 0 0 + - ], which means that floating
point rounding has resulted in a polygon that is not flat. Originally
one of the two points that lies on the splitting plane was not being
included in either output polygon, which caused the result to be
incorrect.

This corrects the case when two consecutive points are on the splitting
plane.

BUG= 693826 
CQ_INCLUDE_TRYBOTS=master.tryserver.blink:linux_trusty_blink_rel

Review-Url: https://codereview.chromium.org/2714243002
Cr-Commit-Position: refs/heads/master@{#453888}

[modify] https://crrev.com/02a3371e8aa5f5ec354509e3625371cbf6f81707/cc/quads/draw_polygon.cc
[modify] https://crrev.com/02a3371e8aa5f5ec354509e3625371cbf6f81707/cc/quads/draw_polygon_unittest.cc

Status: Fixed (was: Assigned)

Sign in to add a comment