Hello,
Could anyone give me some more info on X11DRV_CoerceDIBSection function and the logic behind using 'DIB_Status_GdiMod' and 'DIB_Status_AppMod' stats? I am trying to repair a bug (3902) that has to do with application waiting exccessivly on some locks and i am kind of lost ;( Any help would be greatly appreciated!
Iulian
Marinescu-Ghetau Iulian wrote:
Hello,
Could anyone give me some more info on X11DRV_CoerceDIBSection function and the logic behind using 'DIB_Status_GdiMod' and 'DIB_Status_AppMod' stats? I am trying to repair a bug (3902) that has to do with application waiting exccessivly on some locks and i am kind of lost ;( Any help would be greatly appreciated!
That code is designed to keep DIBs sync'ed between applications and the X server. When the application does a Win32 GDI call then the state of the DIB gets set to DIB_Status_GdiMod and the memory that backs the DIB is set to no-access so that a page fault occurs if the application tries to read it. A handler detects this and downloads the DIB from the X server and sets the state to DIB_Status_None. In this state the DIB memory is set to read-only, so that a page fault occurs if the application tries to write it. The same handler also detects this and consequentially sets the DIB state to DIB_Status_AppMod and allows full access to the DIB memory.
If this doesn't answer help with your bug then you'll have to be more specific.
Hi there,
Thanks alot for all the information, it helped me a great deal in understanding the problem and trying to solve it! I would like to ask you one more thing: if its not too much trouble for you, could you have a look over the few lines i wrote at "http://bugs.winehq.org/show_bug.cgi?id=3902#c4" and tell me what you think ? I found a way to fix the Bug and improve general bitmaps performance and wanted to know if it could work, before i start coding !
Iulian
From: Robert Shearman rob@codeweavers.com To: Marinescu-Ghetau Iulian giulian2003@hotmail.com CC: wine-devel@winehq.org Subject: Re: Please HELP, info required about 'DIB_Status_GdiMod' and 'DIB_Status_AppMod' Date: Tue, 29 Nov 2005 11:25:23 -0600
Marinescu-Ghetau Iulian wrote:
Hello,
Could anyone give me some more info on X11DRV_CoerceDIBSection function and the logic behind using 'DIB_Status_GdiMod' and 'DIB_Status_AppMod' stats? I am trying to repair a bug (3902) that has to do with application waiting exccessivly on some locks and i am kind of lost ;( Any help would be greatly appreciated!
That code is designed to keep DIBs sync'ed between applications and the X server. When the application does a Win32 GDI call then the state of the DIB gets set to DIB_Status_GdiMod and the memory that backs the DIB is set to no-access so that a page fault occurs if the application tries to read it. A handler detects this and downloads the DIB from the X server and sets the state to DIB_Status_None. In this state the DIB memory is set to read-only, so that a page fault occurs if the application tries to write it. The same handler also detects this and consequentially sets the DIB state to DIB_Status_AppMod and allows full access to the DIB memory.
If this doesn't answer help with your bug then you'll have to be more specific.
-- Rob Shearman
Marinescu-Ghetau Iulian wrote:
Hi there,
Thanks alot for all the information, it helped me a great deal in understanding the problem and trying to solve it! I would like to ask you one more thing: if its not too much trouble for you, could you have a look over the few lines i wrote at "http://bugs.winehq.org/show_bug.cgi?id=3902#c4" and tell me what you think ? I found a way to fix the Bug and improve general bitmaps performance and wanted to know if it could work, before i start coding !
You can't really speed up the uploading of bitmaps to the X server when the state has been changed to DIB_Status_AppMod since you can't tell what has changed, but I do think your idea is good for downloading the bitmap from the X server when in the GDI state. I would maybe suggest making the changed rect an argument to the coerce function though so it isn't possible for GDI functions to forget to do it before calling coerce.