Having a centralized way to register timers is probably a good thing. But tying it to the engine is questionable for the interactivity reasons I mentioned. I think the GUI timer should be separate from the engine and just use more fine-grained timing than Qt provides.

Also, I think this should be a singleton that objects in Mixxx call a method on to register a slot to be called every N milliseconds rather than making a CO for every frequency that is needed somewhere in Mixxx. It could even be a thread that just sleeps the exact number of milliseconds necessary until its next time to call a slot. Making a dedicated "50ms" CO seems hacky. 

Places that could use GuiTick if it were more general like this:
* ControllerManager polling (1ms or 5ms)
* WTime (configurable)
* WaveformWidgetFactory / waveform rendering (configurable)
* PlayerInfo playing deck update (2s)
* ControllerManager (configurable) though it supports oneshot timers
* DlgPrefControls waveform FPS display (100ms)
* vinyl control signal widget (20ms)

Even timer-driven things in the engine (vumeters, playposition, bpm, rate) that are updated at UPDATE_RATE could be migrated to something like this. I have always disliked how the control system was used to control the update of the GUI in those cases.