open the test.html.
drag the number of shadowBlur
to left, until shadowBlur=5;
you will see some text get truncated when the value of shadowBlur becomes very small.
drag the numbers inside the translate() until the "ABCEDF" move to left top coner, the lines shown, but not fully shown.
click the save() to disable it, the lines shown.
some problems in savestate?
you may drag the rotate number to see more.

This looks to affect any use of strokeText combined with shadowBlur. I, sadly, have no insight as to how common that is.
Surprisingly, though, this bug shows up on both Cairo and Quartz. It could even be an underlying canvas bug that the Cairo fixes simply exposed.

(In reply to Joe Drew (:JOEDREW! \o/) from comment #4)
> This looks to affect any use of strokeText combined with shadowBlur. I,
> sadly, have no insight as to how common that is.
>
> Surprisingly, though, this bug shows up on both Cairo and Quartz. It could
> even be an underlying canvas bug that the Cairo fixes simply exposed.
Hi Joe - when do you expect to have the time to investigate and fix? Before 4 is going to build tomorrow, and the holidays are coming up.

Comment on attachment 692465[details][diff][review]
detect when we're drawing a shadow correctly
Review of attachment 692465[details][diff][review]:
-----------------------------------------------------------------
Yes, this bool is only used for determining whether to only Redraw the bounding box of the surface as far as I can see. If the operation is a stroke we always invalidate the whole thing using a Redraw() anyway. As such we don't need the bounding box computation so we avoid wasting that time.
Something weird's going on if this fixes it, see the surrounding code, I'd like to know what it is before we r+ this.

(In reply to Bas Schouten (:bas.schouten) from comment #14)
> Yes, this bool is only used for determining whether to only Redraw the
> bounding box of the surface as far as I can see. If the operation is a
> stroke we always invalidate the whole thing using a Redraw() anyway. As such
> we don't need the bounding box computation so we avoid wasting that time.
It's also used, when shadows are involved, to find the size of the temporary surface we're going to draw into so we can then generate a shadow from that surface. That's where the problem comes in.

(In reply to Joe Drew (:JOEDREW! \o/) from comment #20)
> This is pretty safe. It restores a codepath that we had prior to the removal
> of the old canvas implementation. It should have no perf hit other than that
> needed to have correct behaviour.
Thanks for the explanation . I was indeed in favor of taking it to restore the right behavior vs perf hit (if it had caused any). Please provide any pointers you have on testing this to QA(juanb).