> On Jun 13, 2015, at 12:03 PM, Jim Dishaw <j...@dishaw.org> wrote:
> 
> 
>> On Jun 11, 2015, at 12:29 AM, Jim Dishaw <j...@dishaw.org 
>> <mailto:j...@dishaw.org>> wrote:
>> 
>>> 
>>> On Jun 10, 2015, at 11:30 PM, Alan W. Irwin <ir...@beluga.phys.uvic.ca 
>>> <mailto:ir...@beluga.phys.uvic.ca>> wrote:
>  <snip>
>>> Just to confirm that I just now played a lot with resizing of
>>> 
>>> examples/c/x01c -dev xwin
>>> 
>>> for 5.10.0, 5.11.0, and git master tip (including your recent commit),
>>> and I found no specific string issues for any of those cases.  So it
>>> appears hard (at least with this example) to demonstrate a rendering
>>> bug due to this issue that you just fixed, but your fix seems logical
>>> to me (now) and certainly does not introduce any bad string rendering
>>> that I can spot.
>>> 
>>> However, when doing those checks I did notice other resizing issues
>>> that do need to be addressed.
>>> 
>>> 1. As a resize is occurring (typically by dragging one edge or one
>>> corner of the GUI to make the whole thing smaller or larger) sometimes
>>> the displayed GUI is a scaled plot and sometimes it is black (which is
>>> OK).  But on some occasions when I stop resizing (by releasing the
>>> mouse button) the result remains black for 5.11.0 and the master tip
>>> version (which is not OK).  But 5.10.0 is fine in this regard. So this
>>> issue is a regression introduced into PLplot between 5.10.0 and 5.11.0
>>> and probably due to the flurry of changes you and Phil made in plbuf
>>> before we released 5.11.0.
>> 
>>> 
>>> Please verify the good result for 5.10.0 and bad result for 5.11.0,
>>> git bisect to figure out what commit has caused the issue, and then
>>> make the appropriate plbuf fix to get rid of this regression.
>>> 
>> 
>> I think this problem is the plP_eop() that was inserted in the 
>> plRemakePlot() to make sure the BOP would perform as expected.  For the GUI 
>> drivers this will trigger another wait for input, which ends up blocking 
>> redraw messages.  I will verify by using git bisect.
> 
> I ran git bisect and the regression was introduced in the commit 
> 1e402417c1f3e87c391fe428f936153c2a10e8cc
> 
> Author: Phil Rosenberg <p.d.rosenb...@gmail.com 
> <mailto:p.d.rosenb...@gmail.com>>
> Date:   Fri Feb 27 17:12:03 2015 +0000
> 
>     Fixed bug in rdbuf_di.
>     
>     Save cursubpage on replot
>     call plP_eop() on replot which ensures that the first plP_bop() call 
> actually does something.
> 
> If I comment out the plP_eop() that was added to plbuf.c in that commit, the 
> xwin driver does not exhibit the problematic behavior.  I will investigate 
> further on working on a patch.  I know why it is causing a problem, but it 
> isn’t obvious to me how it gets to that point.
> 

I found the cause of the problem and the plP_eop() is not acting in a way that 
neither Phil nor I expected.  Phil put the plP_eop() in to make sure that the 
BOP will do something and I thought that will always to lead to the keypress 
bug.  In reality the plP_eop() does something only half the time.

1) Plot starts
2) At BOP, the page_status is set to AT_BOP
3) While drawing, the page_status is set to DRAWING
4) At EOP, the page_status is set to AT_EOP  (the EOP is not put into the 
buffer)
5) The driver enters into a loop waiting for messages
6) Driver receives a resize message
7) plRemakePlot is called
8) plRemakPlot() calls plP_eop()
9) plP_eop() does nothing because it exits immediately because the page_status 
is AT_EOP
10) The plot buffer is replayed
11) At BOP, the page_status is set to AT_BOP
12) While drawing, the page_status is set to DRAWING
13) No EOP is generated because it is not in the buffer, thus the page_status 
is unchanged
14) Control returns the message loop
15) Another resize message is received
16) plRemakePlot is called
17) plRemakePlot() calls plP_eop()
18) plP_eop() does not exit immediately this time because page_state is DRAWING
19) plP_eop() calls the driver EOP handler
20) The driver enters into a new loop waiting for messages
21) User has to do an action (e.g. keypress) to exit the new message loop.  
This blocks many messages because the windowing system still considers the 
window to be processing a resize.
22) Once the new message loop exits, the driver EOP handler exits.
23) Goto step 10.

Just putting the EOP into the plot buffer won’t fix the problem because a new 
message loop will be called, which will block messages.  

I agree with Phil’s point about the need to call plP_eop().  Some drivers may 
need the EOP handler to work correctly (e.g. double buffering). The way the 
code is structured, the plP_eop() is only doing something 50% of the time. 

I’m not sure the best way to fix this.  I think the interactive GUI drivers 
might need to be modified to check if they are already waiting.  One thing that 
makes this tricky is the strip chart function.  As it is currently written, it 
does not generate an EOP until the end.  Thus, it cannot be resized while 
plotting.  Plus, when resized, the entire strip chart is replayed (though I see 
Phil has made some commits so wxWidgets might be smarter).

I’m going to experiment on some different approaches and see what works best.

------------------------------------------------------------------------------
_______________________________________________
Plplot-devel mailing list
Plplot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/plplot-devel

Reply via email to