office-gobmx/vcl/osx
Patrick Luby 0807fe3628 Improve rendering speed for native controls when using Skia/Metal
While debugging tdf#163945, Xcode's Instruments application uncovered
the following performance bottlenecks when using Skia/Metal:

1. Very slow rendering an NSBox:
   Many system colors have the NSColorTypeCatalog color type. For
   some unkown reason, setting the NSBox's fill color to a color set
   to NSColorTypeCatalog causes drawing to take at least twice as
   long as when the fill color is set to NSColorTypeComponentBased.
   So, only draw with a fill color set to NSColorTypeComponentBased.

2. Excessively large offscreen buffers when drawing native controls:
   The temporary bitmap was set to the control region expanded by
   50 * mScaling (e.g. both width and height were increased by 200
   pixels when running on a Retina display). This caused temporary
   bitmaps to be up to several times larger than needed. Also,
   drawing NSBox objects to a CGBitmapContext is noticeably slow
   so filling all that unneeded temporary bitmap area can slow down
   performance when a large number of NSBox objects like the status
   bar are redrawn in quick succession.
   Using getNativeControlRegion() isn't perfect, but it does try to
   account for the focus ring as well as the minimum width and/or
   height of the native control so union the two regions set by
   getNativeControlRegion() and add double the focus ring width on
   each side just to be safe. In most cases, this should ensure
   that the temporary bitmap is large enough to draw the entire
   native control and a focus ring.

3. Unncessary copying of bitmap buffer when drawing native controls:
   Let Skia own the CGBitmapContext's buffer so that an SkImage
   can be created without Skia making a copy of the buffer.

Change-Id: Ibd3abb4b9d7045c47268319772fe97a5c4dba3c6
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177225
Tested-by: Jenkins
Reviewed-by: Patrick Luby <guibomacdev@gmail.com>
2024-11-25 19:30:21 +01:00
..
res/MainMenu.nib
a11yactionwrapper.h
a11yactionwrapper.mm
a11ycomponentwrapper.h
a11ycomponentwrapper.mm
a11yfactory.mm
a11yfocuslistener.cxx
a11yfocuslistener.hxx
a11yfocustracker.cxx
a11ylistener.cxx
a11yrolehelper.h
a11yrolehelper.mm
a11yselectionwrapper.h
a11yselectionwrapper.mm
a11ytablewrapper.h
a11ytablewrapper.mm
a11ytextattributeswrapper.h
a11ytextattributeswrapper.mm
a11ytextwrapper.h
a11ytextwrapper.mm
a11yutil.h
a11yutil.mm
a11yvaluewrapper.h
a11yvaluewrapper.mm
a11ywrapper.mm
a11ywrapperbutton.h
a11ywrapperbutton.mm
a11ywrappercheckbox.h
a11ywrappercheckbox.mm
a11ywrappercombobox.h
a11ywrappercombobox.mm
a11ywrappergroup.h
a11ywrappergroup.mm
a11ywrapperlist.h
a11ywrapperlist.mm
a11ywrapperradiobutton.h
a11ywrapperradiobutton.mm
a11ywrapperradiogroup.h
a11ywrapperradiogroup.mm
a11ywrapperrow.h
a11ywrapperrow.mm
a11ywrapperscrollarea.h
a11ywrapperscrollarea.mm
a11ywrapperscrollbar.h
a11ywrapperscrollbar.mm
a11ywrappersplitter.h
a11ywrappersplitter.mm
a11ywrapperstatictext.h
a11ywrapperstatictext.mm
a11ywrappertabgroup.h
a11ywrappertabgroup.mm
a11ywrappertextarea.h
a11ywrappertextarea.mm
a11ywrappertoolbar.h
a11ywrappertoolbar.mm
clipboard.cxx
clipboard.hxx
cuidraw.hxx
DataFlavorMapping.cxx
DataFlavorMapping.hxx
documentfocuslistener.cxx
documentfocuslistener.hxx
DragActionConversion.cxx
DragActionConversion.hxx
DragSource.cxx
DragSource.hxx
DragSourceContext.cxx
DragSourceContext.hxx
DropTarget.cxx
DropTarget.hxx
HtmlFmtFlt.cxx
HtmlFmtFlt.hxx
OSXTransferable.cxx
OSXTransferable.hxx
PictToBmpFlt.cxx
PictToBmpFlt.hxx
printaccessoryview.mm
printview.mm
README.a11y
saldata.cxx
salframe.cxx
salframeview.mm tdf#157312 and tdf#163945 Lower Skia flush timer priority on macOS 2024-11-24 14:45:24 +01:00
salgdiutils.cxx
salinst.cxx tdf#163764 Force pending timers to run after marked text changes 2024-11-11 01:17:25 +01:00
salmacos.cxx
salmenu.cxx
salnativewidgets.cxx Improve rendering speed for native controls when using Skia/Metal 2024-11-25 19:30:21 +01:00
salnsmenu.mm
salnstimer.mm
salobj.cxx
salprn.cxx
salsys.cxx
saltimer.cxx tdf#163764 Force pending timers to run after marked text changes 2024-11-11 01:17:25 +01:00
service_entry.cxx
vclnsapp.mm

Naming scheme:

a11yXYZhelper:           Helper class providing static methods

a11yXYZwrapper:          Wrapper around one (or two) UNO-interfaces

a11ywrapperXYZ:          Subclass of a11ywrapper for a specific AXRole