In an AI application I am writing in C++,
I'm reinforcing all answers that say in effect:
What you want to know is:
Some profilers can give you this information indirectly. They need to summarize at the statement level, but exclusive of the time spent in the method itself.
My favorite technique is to just pause it a number of times under a debugger.
If the time spent in the process of virtual function invocations is significant, like say 20%, then on the average 1 out of 5 samples will show, at the bottom of the call stack, in the disassembly window, the instructions for following the virtual function pointer.
If you don't actually see that, it is not a problem.
In the process, you will probably see other things higher up the call stack, that actually are not needed and could save you a lot of time.