My opinion is that tipping should be based on performance only.   If service is sub-par, the provider should not be tipped except if there are circumstances out of their control