Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

oddities when rebuilding pngs #101

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open

oddities when rebuilding pngs #101

wants to merge 1 commit into from

Conversation

bukzor
Copy link

@bukzor bukzor commented Dec 21, 2014

This isn't actually a pull request, but the easiest way to show my results.

When rebuilding the doc pngs, I got the below results.
Some came out find, but quite a few are blank, and some are slightly wrong.
Do you have any clues what I'm doing wrong?
Or, is there some regression that happened between the last regeneration and now?
A neat integreation test suite of sorts would be to rebuild the pngs during CI and assert there's no pixel-diffs.

@ulidtko ulidtko self-assigned this Apr 5, 2019
@ulidtko ulidtko added bug docs Issues related to documentation in progress labels Apr 5, 2019
@ulidtko
Copy link
Collaborator

ulidtko commented Aug 29, 2019

So, for the most part, this is a rather simple race. See commit messages (coming shortly).

ulidtko added a commit that referenced this pull request Aug 29, 2019
Almost completely fixes #101 and #102.

The issue is rather simple:
 * we run an example in a virtual X display,
 * we send events to the example via xdotool,
 * immediately after, we take a screenshot (with ImageMagick).

We don't ever (and can't!) synchronize to a point "all X11 events have
been pumped, handled, and the example has redrawn" -- so there's an
obvious race happening. A little 50ms sleep should bias the race hard
enough so that we always win it.
ulidtko added a commit that referenced this pull request Jul 12, 2022
Fixes #101 and #102.

The issue is rather simple:
 * we run an example in a virtual X display,
 * we send events to an example via xdotool,
 * immediately after, we take a screenshot (with ImageMagick).

We don't ever synchronize to a point "all X11 events have
been pumped, handled, and the example has redrawn" -- so there's an
obvious race happening.

Fix the race by locating the PID of the example interpreter process,
(it'll be the only child of our urxvt instance),
and polling its process status (running or not). When we detect it's
not running N times in a row -- conclude it's done and went idling.
With increasing N, the total probability of misdetection drops
exponentially.

N=10 should suffice as a rough 1st guess; if the race reappears --
simply increase it a couple of points, say to 15 or 16.
ulidtko added a commit that referenced this pull request Jul 12, 2022
Fixes #101 and #102.

The issue is rather simple:
 * we run an example in a virtual X display,
 * we send events to an example via xdotool,
 * immediately after, we take a screenshot (with ImageMagick).

We don't ever synchronize to a point "all X11 events have
been pumped, handled, and the example has redrawn" -- so there's an
obvious race happening.

Fix the race by locating the PID of the example interpreter process,
(it'll be the only child of our urxvt instance),
and polling its process status (running or not). When we detect it's
not running N times in a row -- conclude it's done and went idling.
With increasing N, the total probability of misdetection drops
exponentially.

N=10 should suffice as a rough 1st guess; if the race reappears --
simply increase it a couple of points, say to 15 or 16.
penguinolog pushed a commit that referenced this pull request Sep 28, 2023
Fixes #101 and #102.

The issue is rather simple:
 * we run an example in a virtual X display,
 * we send events to an example via xdotool,
 * immediately after, we take a screenshot (with ImageMagick).

We don't ever synchronize to a point "all X11 events have
been pumped, handled, and the example has redrawn" -- so there's an
obvious race happening.

Fix the race by locating the PID of the example interpreter process,
(it'll be the only child of our urxvt instance),
and polling its process status (running or not). When we detect it's
not running N times in a row -- conclude it's done and went idling.
With increasing N, the total probability of misdetection drops
exponentially.

N=10 should suffice as a rough 1st guess; if the race reappears --
simply increase it a couple of points, say to 15 or 16.
penguinolog pushed a commit that referenced this pull request Sep 29, 2023
Fixes #101 and #102.

The issue is rather simple:
 * we run an example in a virtual X display,
 * we send events to an example via xdotool,
 * immediately after, we take a screenshot (with ImageMagick).

We don't ever synchronize to a point "all X11 events have
been pumped, handled, and the example has redrawn" -- so there's an
obvious race happening.

Fix the race by locating the PID of the example interpreter process,
(it'll be the only child of our urxvt instance),
and polling its process status (running or not). When we detect it's
not running N times in a row -- conclude it's done and went idling.
With increasing N, the total probability of misdetection drops
exponentially.

N=10 should suffice as a rough 1st guess; if the race reappears --
simply increase it a couple of points, say to 15 or 16.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug docs Issues related to documentation in progress
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants