Here's a sample profile trace from profiling our bug tracking and issue management application, JIRA:
[250ms] - /atlassian/jira/secure/views/dashboard.jsp <-- jsp profiling
[0ms] - Dashboard.getApplicationTitle() <-- WW profiling
[0ms] - JiraWebActionSupport.getRemoteUser()
[50ms] - Dashboard.getLeftCol()
[20ms] - PortletManager.getPortalPageConfiguration() <-- factory object
[0ms] - PortalPageConfiguration.isDefault()
[0ms] - PortalPageConfiguration.getLeftPortletConfigs()
[0ms] - List.iterator()
[0ms] - List.iterator() <-- even profiling Lists!
[0ms] - Iterator.hasNext()
[0ms] - Iterator.hasNext()
[0ms] - Iterator.next()
[0ms] - Iterator.next()
As you can see from above - it profiles more than one layer of your application, and it nests the results - so you can pin down exactly which methods are causing your problems. If any of your methods have a return value that is an interface, then that return object can also be profiled (as seen above where we profile java.util.List).
You can profile: