Full Version: profiling
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2
Yeah, that's line 836 in graphics_renderers.cpp. Probably only really needs to be done once, however it should only get called in the non-shader path.
Have been profiling cardynamics changes lately and noticed that we are spending a lot of time in DRAWABLE_CONTAINER_HELPER::AccumulateSize::operator(). I wonder if we are missing an optimization opportunity here.

13.75      1.76     1.76 _mcount_private
12.11      3.31     1.55 16467397     0.00     0.00  void DRAWABLE_CONTAINER_HELPER::AccumulateSize::operator()<keyed_container<DRAWABLE> >(keyed_container<DRAWABLE> const&)
  7.73      4.30     0.99    30452     0.00     0.00  void SCENENODE::Traverse<PTRVECTOR>(DRAWABLE_CONTAINER<PTRVECTOR>&, MATRIX4<float> const&)
  3.75      4.78     0.48    16986     0.00     0.00  void AABB_SPACE_PARTITIONING_NODE<DRAWABLE*, 1u>::Query<FRUSTUM, std::vector<DRAWABLE*, std::allocator<DRAWABLE*> > >(FRUSTUM const&, std::vector<DRAWABLE*, std::allocator<DRAWABLE*> >&) const
  2.58      5.11     0.33  1333989     0.00     0.00  RENDER_INPUT_SCENE::SelectTexturing(DRAWABLE&, GLSTATEMANAGER&)
  2.34      5.41     0.30  1333964     0.00     0.00  RENDER_INPUT_SCENE::SelectTransformStart(DRAWABLE&, GLSTATEMANAGER&)
Good catch. It was happening because the scenenode was doing an early out if its drawlist was empty, and empty() was calling size() which is more expensive than I realized. Traverse() is so fast (it just seems slow because it's called so frequently) that it's actually better to skip the early-out check entirely.
We need a wiki page on how to profile VDrift. If anyone would like to start one, they could probably use some of the information in this thread.
OK, I put something really simple there.
Pages: 1 2