WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
106047
RenderGeometryMap and TransformState disagree with sub-pixel layout and translations
https://bugs.webkit.org/show_bug.cgi?id=106047
Summary
RenderGeometryMap and TransformState disagree with sub-pixel layout and trans...
Levi Weintraub
Reported
2013-01-03 15:00:59 PST
RenderGeometryMap has an optimized code path for integer transforms that merely translate (such as the all-too-common translatez(0) ) that applies the translate as an offset. This leads to pixel snapping occurring later in the RenderGeometryMap case. I think this should carry over to the TransformState case (this could be argued) and propose mirroring that optimization there. This should also be a performance win.
Attachments
Patch
(4.03 KB, patch)
2013-01-03 15:48 PST
,
Levi Weintraub
no flags
Details
Formatted Diff
Diff
Patch
(5.38 KB, patch)
2013-01-07 13:32 PST
,
Levi Weintraub
no flags
Details
Formatted Diff
Diff
Patch
(5.40 KB, patch)
2013-01-07 15:48 PST
,
Levi Weintraub
no flags
Details
Formatted Diff
Diff
Patch for landing
(5.42 KB, patch)
2013-01-11 11:17 PST
,
Levi Weintraub
no flags
Details
Formatted Diff
Diff
Show Obsolete
(3)
View All
Add attachment
proposed patch, testcase, etc.
Levi Weintraub
Comment 1
2013-01-03 15:48:37 PST
Created
attachment 181240
[details]
Patch
Levi Weintraub
Comment 2
2013-01-03 16:10:14 PST
Comment on
attachment 181240
[details]
Patch TY.
WebKit Review Bot
Comment 3
2013-01-03 16:48:57 PST
Comment on
attachment 181240
[details]
Patch
Attachment 181240
[details]
did not pass chromium-ews (chromium-xvfb): Output:
http://queues.webkit.org/results/15656596
New failing tests: fast/layers/geometry-map-transform-state-translation-mismatch.html
Build Bot
Comment 4
2013-01-03 22:41:22 PST
Comment on
attachment 181240
[details]
Patch
Attachment 181240
[details]
did not pass mac-ews (mac): Output:
http://queues.webkit.org/results/15686050
New failing tests: compositing/visible-rect/3d-transform-style.html compositing/visible-rect/nested-transform.html svg/as-image/img-preserveAspectRatio-support-2.html compositing/visible-rect/iframe-and-layers.html compositing/visible-rect/clipped-visible-rect.html fast/layers/geometry-map-transform-state-translation-mismatch.html compositing/visible-rect/2d-transformed.html compositing/visible-rect/animated.html compositing/visible-rect/3d-transformed.html compositing/visible-rect/animated-from-none.html
Levi Weintraub
Comment 5
2013-01-04 10:34:00 PST
(In reply to
comment #4
)
> (From update of
attachment 181240
[details]
) >
Attachment 181240
[details]
did not pass mac-ews (mac): > Output:
http://queues.webkit.org/results/15686050
> > New failing tests: > compositing/visible-rect/3d-transform-style.html > compositing/visible-rect/nested-transform.html > svg/as-image/img-preserveAspectRatio-support-2.html > compositing/visible-rect/iframe-and-layers.html > compositing/visible-rect/clipped-visible-rect.html > fast/layers/geometry-map-transform-state-translation-mismatch.html > compositing/visible-rect/2d-transformed.html > compositing/visible-rect/animated.html > compositing/visible-rect/3d-transformed.html > compositing/visible-rect/animated-from-none.html
It looks like we may do the wrong thing in GraphicsLayerCA::computeVisibleRect with this change. I'm taking a look.
Levi Weintraub
Comment 6
2013-01-07 13:32:48 PST
Created
attachment 181550
[details]
Patch
Build Bot
Comment 7
2013-01-07 15:29:51 PST
Comment on
attachment 181550
[details]
Patch
Attachment 181550
[details]
did not pass mac-ews (mac): Output:
http://queues.webkit.org/results/15740837
New failing tests: fast/layers/geometry-map-transform-state-translation-mismatch.html
Levi Weintraub
Comment 8
2013-01-07 15:48:56 PST
Created
attachment 181582
[details]
Patch
Simon Fraser (smfr)
Comment 9
2013-01-07 16:24:49 PST
Comment on
attachment 181582
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=181582&action=review
> Source/WebCore/platform/graphics/transforms/TransformState.h:81 > + // We need to clear the accumulated offset when resetting the quad or we'll incorrectly apply the > + // accumulated offset to this new quad. This only works if we're not also mapping a point, otherwise > + // we'd lose the accumulated offset for that point. > + ASSERT(!m_mapPoint);
This is weird. Isn't blowing away m_accumulatedOffset the wrong thing to do here?
Levi Weintraub
Comment 10
2013-01-09 15:23:40 PST
Comment on
attachment 181582
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=181582&action=review
>> Source/WebCore/platform/graphics/transforms/TransformState.h:81 >> + ASSERT(!m_mapPoint); > > This is weird. Isn't blowing away m_accumulatedOffset the wrong thing to do here?
Sorry for the delayed response. Because we only use m_accumulatedOffset when we're flattening or don't have a transform, it's guaranteed to only be a translate. Prior to m_accumulatedOffset, these translates would have been applied directly to the point/quad and then forgotten, so when you set a new Quad, they wouldn't get applied.
Levi Weintraub
Comment 11
2013-01-11 10:20:34 PST
(In reply to
comment #10
)
> (From update of
attachment 181582
[details]
) > View in context:
https://bugs.webkit.org/attachment.cgi?id=181582&action=review
> > >> Source/WebCore/platform/graphics/transforms/TransformState.h:81 > >> + ASSERT(!m_mapPoint); > > > > This is weird. Isn't blowing away m_accumulatedOffset the wrong thing to do here? > > Sorry for the delayed response. Because we only use m_accumulatedOffset when we're flattening or don't have a transform, it's guaranteed to only be a translate. Prior to m_accumulatedOffset, these translates would have been applied directly to the point/quad and then forgotten, so when you set a new Quad, they wouldn't get applied.
It seemed weird to me as well until I dug into why we started failing tests on Mac. Let me know if you have any more questions or don't like the approach. I'd love to fix this last source of assertions!
Simon Fraser (smfr)
Comment 12
2013-01-11 10:51:49 PST
(In reply to
comment #11
)
> (In reply to
comment #10
) > > (From update of
attachment 181582
[details]
[details]) > > View in context:
https://bugs.webkit.org/attachment.cgi?id=181582&action=review
> > > > >> Source/WebCore/platform/graphics/transforms/TransformState.h:81 > > >> + ASSERT(!m_mapPoint); > > > > > > This is weird. Isn't blowing away m_accumulatedOffset the wrong thing to do here? > > > > Sorry for the delayed response. Because we only use m_accumulatedOffset when we're flattening or don't have a transform, it's guaranteed to only be a translate. Prior to m_accumulatedOffset, these translates would have been applied directly to the point/quad and then forgotten, so when you set a new Quad, they wouldn't get applied. > > It seemed weird to me as well until I dug into why we started failing tests on Mac. Let me know if you have any more questions or don't like the approach. I'd love to fix this last source of assertions!
So before m_accumulatedOffset existed, moving would just offset the point and/or the quad.
http://trac.webkit.org/changeset/137847/trunk/Source/WebCore/platform/graphics/transforms/TransformState.cpp
changed this to accumulate into the LayoutSize if flattening, or otherwise apply any existing offset, zero m_accumulatedOffset, then move the point/quad/transform, I think? I think the key here is that setQuad() implicitly assumes that the q
Simon Fraser (smfr)
Comment 13
2013-01-11 10:53:42 PST
Trying again: I think the key here is that setQuad() implicitly assumes that the quad is in the coordinate system of the current state (so it's OK to throw away the accumulated offset), and that in turn requires that no point is being mapped. So I think the comment could be improved but the change is sound.
Levi Weintraub
Comment 14
2013-01-11 11:17:48 PST
Created
attachment 182379
[details]
Patch for landing
WebKit Review Bot
Comment 15
2013-01-11 12:01:12 PST
Comment on
attachment 182379
[details]
Patch for landing Clearing flags on attachment: 182379 Committed
r139479
: <
http://trac.webkit.org/changeset/139479
>
WebKit Review Bot
Comment 16
2013-01-11 12:01:17 PST
All reviewed patches have been landed. Closing bug.
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug