It's not true that hasHints() get called for every key stroke (or every typed character). It is called if there is no hinting session, but when there is a session CHM just calls getHints() to update the hint. The new code for exclusion may have several lines in there, but the code is not really doing some expensive operation; it is just checking tagInfo to see whether we still have the same exclusion.