ProtocolLib

3M Downloads

WrappedDataWatcher#hasIndex too slow because of try/catch

MeGysssTaa opened this issue ยท 2 comments

commented

Describe the bug
The current implementation of WrappedDataWatcher#hasIndex makes use of method public Object getObject(WrappedDataWatcher.WrappedDataWatcherObject object). In order for this method to return null, or, in other words, in order for hasIndex to return false, a NullPointerException or an InvocationTargetException must be thrown and handled:

(see screenshot 1)

This solution is slow in scenarios where hasIndex is called very often (for example, when using a custom data watcher to create cross-compatible packet NPCs):

(see screenshot 2)

To Reproduce
Steps to reproduce the behavior:

  1. Use method hasIndex of WrappedDataWatcher often enough, e.g. in a custom data watcher for cross-compatible packet NPCs.
  2. Create a Java Flight Recording.
  3. Enjoy a ton of NullPointerExceptions and even more InvocationTargetExceptions in the exceptions tab.

Expected behavior
I would really appreciate it if this method was faster and avoided use of any try/catch statements and exception handlers, so that it may be called very frequently without negative performance consequences.

Screenshots
code snippet of getObject

exception call stack snippet from JFR

Version Info
https://pastebin.com/7bi3qARm

Additional context
High load.

commented

@MeGysssTaa I appreciate the thoroughness. Give the latest dev build a try and let me know if it helps

commented

Works perfectly now, thank you and sorry for the delay in response!