- Remove conditional redefine of DPRINT. Wine debug channels at this point, and we have NDEBUG.
- Use TRACE instead of DbgPrint. Gets rid of the "Status 2" spam when no static nameserver is in the registry.
svn path=/trunk/; revision=50384
-Implement closing any dialog that shows and stays visible for some time. This way rosautotest can now continue if a test application crashes or asserts.
svn path=/trunk/; revision=50381
Go back to hiding the cursor with GreMovePointer, instead of setting NULL bitmaps. While MSDN states that psoColor and psoMask can both be NULL in DrvSetPointerShape, it doesn't explicitly say anything about both being NULL at the same time. VBox driver doesn't expect that and will crash, so most likely windows doesn't do this.
svn path=/trunk/; revision=50375
Implement small helper MyLoadString, using FindResource, LoadResource, LockResource and replacing LoadString, so we don't need to link to user32 anymore.
svn path=/trunk/; revision=50372
Remove broken definition of SharedUserdata and use correct SharedUserData instead. Fixes a crash on real Hardware. Patch by Daniel Zimmermann (netzimme at googlemail dot com)
See issue #5650 for more details.
svn path=/trunk/; revision=50369
Open a context menu, when a task is right clicked.
Patch by greenie (greenie__ at hotmail dot com)
See issue #4671 for more details.
svn path=/trunk/; revision=50368
Provide the ability to query version info (needed for task
grouping).
Patch by DavidErceg <dave_154@hotmail.com>
See issue #4386 for more details.
svn path=/trunk/; revision=50367
- In UserSetCursor, return a pointer to the old cursor, not the handle
- really delete the pointer shape when NULL cursor is set, instead of just hiding it.
- Move reference handling completely to NtUserSetCursor
- In UserChangeDisplaySettings, set NULL cursor before change and restore old cursor after change to make sure we have the right color format.
See issue #5722 for more details.
svn path=/trunk/; revision=50365
Don't leak the memory for DIB sections. we set BMF_DONT_FREE in SURFACE_bSetBitmapBits, when the caller provides bits. This needs to be reconsidered.
svn path=/trunk/; revision=50363
Don't trat BI_BITFIELDS as compressed format in DIB_CreateDIBSection. Fixes KSStudio. Why it was introduced by r48359? I don't know. It was broken before. I refrain from making any more comments about that piece of ... code.
See issue #5781 for more details.
svn path=/trunk/; revision=50362
- Add user32_wsprintf library, with all the wsprintf functions, generated from the same codebase
- simplify handling of ll modifier in streamout
svn path=/trunk/; revision=50360
- gather several undocumented definitions for user32 that were defined in several different files, sometimes in the source, sometimes in headers and sometimes defined several times here and there
This file should not contain internal user32 definitions but undocumented public definitions
svn path=/trunk/; revision=50357
- Implement NtGdiCreateMetafileDC.
- Since most of the gdi work I committed is being reverted or if'ed out of existence, this will be the last.
svn path=/trunk/; revision=50351
Complete rewrite reserving and releasing of System PTEs.
The previous algorithm, in a nutshell, worked as follows:
- PTE clusters are in a singly linked list, ordered by their base address.
- All PTEs in the clusters are zeroed (except for cluster list bookkeeping).
- Upon reservation: Walk the list to get the first cluster that's large enough, cut the requested amount of PTEs off its tail and return them.
- Upon release: Create a new cluster using the PTEs to release, and merge it together with possible adjacent clusters.
Problems with the previous algorithm:
- While the idea is that all PTEs in clusters are zeroed, which requesters rely on, cluster bookkeeping isn't zeroed on merges.
The side effect of this was that PTEs that weren't really zeroed were randomly delivered to requesters.
- 99% of the time, allocations are serviced using the first cluster in the list, which is virtually always the first suitable cluster.
This is so because the ordering is based on the base address of the clusters, and allocations are serviced using the cluster tail.
Because the first cluster starts out as the whole pool, and the pool is quite sizable, it can deal with virtually allocations.. for a while.
- A corollary of the previous point is *massive fragmentation* because: as long as an allocation isn't released back into the pool,
the space of previous allocations that have been released isn't reused because the first cluster can't suck them up, and enough allocations remain in use.
- The combined effect of the previous two points: a first cluster that effectively shrinks mostly, with small clusters forming behind it.
Once the first cluster has shrunk far enough (which of course takes a long time), 90% of the space may still be free, scattered in mostly small clusters.
This would make decent sized allocations fail because of the heavy fragmentation.
- An implementation detail that caused the head of the list to be treated as a genuine cluster when the first cluster in the list was too small.
The algorithm (as explained above) made this case quite unlikely until your system has been running for a while, after which it could happily
corrupt list heads of other pools, depending on where the list head is with respect to its own pool.
Empirically obtained data revealed that after just *booting to the desktop*, the pool for System Pte Space entries
contained roughly 70 (unusable) clusters, blocking 15 to 20% of the pool. These figures increased to roughly 100
clusters and 30 to 35% after opening a foxy browser and using it to visit a mathematically inspired search engine.
The same data also showed that over 95% of allocations requested just a single PTE, and a noticable allocation spike
also occured in the range of 65-128 PTEs. It should be clear optimizing for small allocations is a good idea,
and preferably encourage reuse the same PTEs for such allocations.
And the new algorithm was born:
- PTE clusters are in a singly linked list, ordered by increasing cluster size.
- All PTEs in the clusters are zeroed (except for cluster list bookkeeping) .. really this time!
- Upon reservation: Walk the list to get the first cluster that's large enough, cut the requested amount of PTEs off its tail and return them.
- Upon release: Create a new cluster using the PTEs to release, and merge it together with possible adjacent clusters.
- Both in the reservation and release actions, insertions into the list preserve the increasing cluster size order.
Empirically obtained data now revealed that after just booting to the desktop, the pool for System Pte Space entries
contained exactly 2 clusters. This increased to 10 clusters after some minor internet browsing and watching a 5 minute video using a media player.
svn path=/trunk/; revision=50347
In GreCreateBitmapEx handle allocation failure in the rle hack path and set LastError, when failed to allocate bitmap bits.
svn path=/trunk/; revision=50344