if(($ACT == 'edit' || $ACT == 'preview') && $INFO['editable']){ ?> } else { ?> } ?>
This shows you the differences between two versions of the page.
wiki:ardour_windows_gdk_and_cairo [26.10.2014 15:34] rgareus [Other Findings] |
wiki:ardour_windows_gdk_and_cairo [28.10.2014 15:24] (current) 81.57.94.90 [Ardour, Windows, Gdk/GTK and Cairo] |
||
---|---|---|---|
Line 2: | Line 2: | ||
Lab Notes.\\ | Lab Notes.\\ | ||
- | Analysis the //slowness// and high CPU-usage of the [http://ardour.org|Ardour3]] GUI on the Windows platform. | + | Analysis the //slowness// and high CPU-usage of the [[http://ardour.org|Ardour3]] GUI on the Windows platform. |
===== Findings ===== | ===== Findings ===== | ||
Line 93: | Line 93: | ||
Various hacks would be possible to address the issue. | Various hacks would be possible to address the issue. | ||
- | However there's not a single simple point to easily work around this. | + | <del>However there's not a single simple point to easily work around this</del>. |
Probably the easiest way to mitigate the performance hog is to provide a custom GdkDrawable implementation for the main canvas (which does not use a hardware backed surface) and keep using default GdkDrawable for all other widgets. A similar solution would be to make the backing-store of GdkWindow persistent and access it directly. | Probably the easiest way to mitigate the performance hog is to provide a custom GdkDrawable implementation for the main canvas (which does not use a hardware backed surface) and keep using default GdkDrawable for all other widgets. A similar solution would be to make the backing-store of GdkWindow persistent and access it directly. | ||
- | Yet, in either case an invalidation strategy will have to be provided. | + | |
+ | A quick hack has been prototyped. The cairo-surface user-data API is used to flag select cairo/win surfaces to not BitBlt (ardour's main canvas & meters): [[https://gist.github.com/x42/ef0b0f6e70d416b3af17|patch for ardour, libcairo]] ((In this case a dedicated user-data key - known to ardour and libcairo - is used to tunnel the information though gdk/gtk which remains unchanged.)). | ||
Still, while performance on Linux & OSX is OKish, the expose and invalidation strategy (see B -> F above) is abysmal and unsuitable for Ardour in general. It only works because CPUs are fast :) | Still, while performance on Linux & OSX is OKish, the expose and invalidation strategy (see B -> F above) is abysmal and unsuitable for Ardour in general. It only works because CPUs are fast :) |