These are all great ways to measure time, but that is only a very indirect way to find bottleneck(s).
The most direct way to find a bottneck in a thread is to get it running, and while it is doing whatever makes you wait, halt it with a pause or break key. Do this several times. If your bottleneck takes X% of time, X% is the probability that you will catch it in the act on each snapshot.
Here's a more complete explanation of how and why it works