Commit 6dfad4c2 authored by Florian Will's avatar Florian Will Committed by Alexandre Julliard

win32u: Only retrieve the dc size if needed.

SetMapMode(.., MM_TEXT) is called a lot in common gdiplus use cases via gdi_transform_acquire(). Querying the size and resolution can be expensive, so skip it when its not needed. When running the "ZusiDisplay" ET423 diagnostic display, which uses gdiplus heavily, this change increases the "indicator blinking speed" from 0.6 per second to 1 per second and probably hits the FPS limit now. Also, CPU usage of the ZusiDisplay.exe process goes down from ~75% to ~42% of one core according to "top", and wineserver CPU usage goes down from ~48% to ~3%. Signed-off-by: 's avatarFlorian Will <florian.will@gmail.com> Signed-off-by: 's avatarHuw Davies <huw@codeweavers.com> Signed-off-by: 's avatarAlexandre Julliard <julliard@winehq.org>
parent 21cf2dd1
......@@ -117,8 +117,6 @@ BOOL set_map_mode( DC *dc, int mode )
if (mode == dc->attr->map_mode && (mode == MM_ISOTROPIC || mode == MM_ANISOTROPIC))
return TRUE;
virtual_size = get_dc_virtual_size( dc );
virtual_res = get_dc_virtual_res( dc );
switch (mode)
{
case MM_TEXT:
......@@ -129,30 +127,40 @@ BOOL set_map_mode( DC *dc, int mode )
break;
case MM_LOMETRIC:
case MM_ISOTROPIC:
virtual_size = get_dc_virtual_size( dc );
virtual_res = get_dc_virtual_res( dc );
dc->attr->wnd_ext.cx = virtual_size.cx * 10;
dc->attr->wnd_ext.cy = virtual_size.cy * 10;
dc->attr->vport_ext.cx = virtual_res.cx;
dc->attr->vport_ext.cy = -virtual_res.cy;
break;
case MM_HIMETRIC:
virtual_size = get_dc_virtual_size( dc );
virtual_res = get_dc_virtual_res( dc );
dc->attr->wnd_ext.cx = virtual_size.cx * 100;
dc->attr->wnd_ext.cy = virtual_size.cy * 100;
dc->attr->vport_ext.cx = virtual_res.cx;
dc->attr->vport_ext.cy = -virtual_res.cy;
break;
case MM_LOENGLISH:
virtual_size = get_dc_virtual_size( dc );
virtual_res = get_dc_virtual_res( dc );
dc->attr->wnd_ext.cx = muldiv(1000, virtual_size.cx, 254);
dc->attr->wnd_ext.cy = muldiv(1000, virtual_size.cy, 254);
dc->attr->vport_ext.cx = virtual_res.cx;
dc->attr->vport_ext.cy = -virtual_res.cy;
break;
case MM_HIENGLISH:
virtual_size = get_dc_virtual_size( dc );
virtual_res = get_dc_virtual_res( dc );
dc->attr->wnd_ext.cx = muldiv(10000, virtual_size.cx, 254);
dc->attr->wnd_ext.cy = muldiv(10000, virtual_size.cy, 254);
dc->attr->vport_ext.cx = virtual_res.cx;
dc->attr->vport_ext.cy = -virtual_res.cy;
break;
case MM_TWIPS:
virtual_size = get_dc_virtual_size( dc );
virtual_res = get_dc_virtual_res( dc );
dc->attr->wnd_ext.cx = muldiv(14400, virtual_size.cx, 254);
dc->attr->wnd_ext.cy = muldiv(14400, virtual_size.cy, 254);
dc->attr->vport_ext.cx = virtual_res.cx;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment