The calls to generate UsageEvents in the XMLUI are in the addBody() method, which never get called when the request is satisfied out of cocoon's cache. In a quiescent test environment this resulted in only one usage event for each distinct Collection, Community, and Item, no matter whether it was requested by different logged-in users or from different IP addresses. Even in a busy production environment, it would probably miss counting many of the requests for a popular Item.
The patch moves UsageEvent calls up to the getValidity method, which also calls the system log that seems to reflect activity accurately. Someone who really knows the XMLUI internals ought to check it over, though.
Also, the UsageEvent in CommunityViewer.java was incorrectly identifying the object type as an ITEM; the patch fixes that too.