Created attachment 609569 [details] [diff] [review] Force invalidation When we attempt to paint a surface, with an nsDisplayBorder starting from the first pixel that *isn't* visible on the surface, we end up drawing single bit difference to the edge pixels of the surface. Attached is an existing reftest, modified to invalidate that reproduces this on OSX with GL layers. Not sure what other platforms are affected by this, running tryserver builds now. See https://tbpl.mozilla.org/php/getParsedLog.php?id=10379707&tree=Try&full=1 for an example failure. Try server: https://tbpl.mozilla.org/?tree=Tryfirstname.lastname@example.org This is affecting DLBI since changes to paint timing make this reftest (and others) fail, without the MozReftestInvalidate change. Ideas here would be appreciated
Odd. This is Mac-only?
Oh, you said in comment #0 you don't know yet.
Thinking about it, this might only fail on mac (opengl), even if it isn't necessarily limited to that. It appears to be related to drawing around the edge of the surface, since modifying the test and removing the modifications to the last row of text moves the broken border painting up to the second to last line instead. OpenGL layers are the only backend (I believe) that creates a separate surface for modifications and then uploads, other backend are drawing directly into the existing surface.
Should we work around it by giving the temporary surface a 1px extra margin?
Created attachment 609603 [details] [diff] [review] Pad temporary surfaces with OpenGL layers on mac This feels like pretty bad wallpapering :( Fixes the bug though.
Comment on attachment 609603 [details] [diff] [review] Pad temporary surfaces with OpenGL layers on mac Review of attachment 609603 [details] [diff] [review]: ----------------------------------------------------------------- Does the problem not occur on the top and left edges?
BTW, please add a big comment explaining why you're adding 1 there!
> Does the problem not occur on the top and left edges? It doesn't appear to, no.