Closed Bug 456163 Opened 16 years ago Closed 16 years ago

Singular matrices with -moz-transform hangs reftests


(Core :: Layout, defect)

Not set





(Reporter: kschwarz, Assigned: kschwarz)




(2 files)

When running reftests where one of the reference images has the -moz-transform property specifying a transform that has a singular matrix (e.g. skewing both X and Y by 45 degrees, specifying a matrix of all 1s, etc.), the reftest hangs with the following error:

WARNING: NS_ENSURE_SUCCESS(rv, rv) failed with result 0x80004005: file
line 396
JavaScript error: , line 0: uncaught exception: [Exception... "Component
returned failure code: 0x80004005 (NS_ERROR_FAILURE)
[nsIDOMHTMLCanvasElement.toDataURL]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"
 location: "JS frame :: chrome://reftest/content/reftest.js :: DocumentLoaded
:: line 469"  data: no]

There is no malfunctioning behavior when viewing the page regularly, though.  The problems only appear when the page is viewed in a reftest.
(In reply to comment #0)
> The problems only appear when the page is viewed in a reftest.

Ah, that makes sense -- it's an exception in reftest.js, which is only run during reftests.

The line referenced is:
   dump("REFTEST   IMAGE 1 (TEST): " + gCanvas1.toDataURL() + "\n");

So, looks like something is failing within toDataURL()... maybe we could reproduce the problem a non-reftest testcase by adding some similar JS to the testcase inside some <script> tags.

Could you attach a sample testcase that demonstrates the problem, when used as a reftest?
Attached file testcase
While trying to come up with a testcase here, I got this.
This page somehow causes the complete window to not paint anything at all. Related to this, right?
I'm willing to wager that there's a similarity here.  I'm also getting a weird assertion from nsStyleTransformMatrix.cpp saying that somehow we ended up inheriting a value, which makes no sense since nothing in there is inherited.  I'll take a look at this one and see what comes up.
Fixes the bug by having nsDisplayTransform::Paint abort early if the underlying matrix is singular.  This seems to eliminate all of the problems (reftests no longer hang, testcase now actually renders a page, etc.), but I'm not completely sure I understand why it works.  I've requested r/sr on the patch, even though there might be a better fix for the problem, since whether or not it's the best fix it's still a good check to have.
Assignee: nobody → keith
Attachment #339612 - Flags: superreview?(roc)
Attachment #339612 - Flags: review?(roc)
Comment on attachment 339612 [details] [diff] [review]
Potential Patch #1
[Checkin: Comment 6]

I guess setting a singular CTM triggers cairo to put the context in an error state, which persists and basically throws away all subsequent drawing.
Attachment #339612 - Flags: superreview?(roc)
Attachment #339612 - Flags: superreview+
Attachment #339612 - Flags: review?(roc)
Attachment #339612 - Flags: review+
Keywords: checkin-needed
Comment on attachment 339612 [details] [diff] [review]
Potential Patch #1
[Checkin: Comment 6]

I fixed
patching file layout/reftests/transform/reftest.list
Hunk #1 FAILED at 0
1 out of 1 hunk FAILED
Attachment #339612 - Attachment description: Potential Patch #1 → Potential Patch #1 [Checkin: Comment 6]
Closed: 16 years ago
Flags: in-testsuite+
Keywords: checkin-needed
OS: Windows Vista → All
Hardware: PC → All
Resolution: --- → FIXED
Target Milestone: --- → mozilla1.9.1b1
You need to log in before you can comment on or make changes to this bug.