[Bf-blender-cvs] [fd19b0123cb] profiler-editor: show duration percentages in tooltip

Jacques Lucke noreply at git.blender.org
Thu Apr 29 11:30:51 CEST 2021


Commit: fd19b0123cbb4b239a07cbfb35ad0db1c0c26d8e
Author: Jacques Lucke
Date:   Thu Apr 29 11:13:48 2021 +0200
Branches: profiler-editor
https://developer.blender.org/rBfd19b0123cbb4b239a07cbfb35ad0db1c0c26d8e

show duration percentages in tooltip

===================================================================

M	source/blender/editors/space_profiler/profiler_draw.cc
M	source/blender/editors/space_profiler/profiler_layout.hh

===================================================================

diff --git a/source/blender/editors/space_profiler/profiler_draw.cc b/source/blender/editors/space_profiler/profiler_draw.cc
index c555869588e..f12488b15a3 100644
--- a/source/blender/editors/space_profiler/profiler_draw.cc
+++ b/source/blender/editors/space_profiler/profiler_draw.cc
@@ -14,6 +14,8 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
+#include <iomanip>
+
 #include "UI_interface.h"
 #include "UI_resources.h"
 #include "UI_view2d.h"
@@ -29,6 +31,7 @@
 #include "BLI_color.hh"
 #include "BLI_hash.h"
 #include "BLI_math_color.h"
+#include "BLI_profile.hh"
 #include "BLI_rect.h"
 
 #include "profiler_draw.hh"
@@ -74,8 +77,11 @@ class ProfilerDrawer {
 
     ui_block_ = UI_block_begin(C, region_, __func__, UI_EMBOSS_NONE);
     this->draw_all_nodes();
-    UI_block_end(C, ui_block_);
-    UI_block_draw(C, ui_block_);
+    {
+      BLI_PROFILE_SCOPE("end/draw block");
+      UI_block_end(C, ui_block_);
+      UI_block_draw(C, ui_block_);
+    }
 
     this->update_view2d_bounds();
   }
@@ -94,6 +100,7 @@ class ProfilerDrawer {
 
   void compute_vertical_extends_of_all_nodes()
   {
+    BLI_PROFILE_SCOPE(__func__);
     int top_y = region_->winy - region_->v2d.cur.ymax;
     for (Span<ProfileNode *> nodes : profiler_layout_->root_nodes()) {
       top_y = this->compute_vertical_extends_of_nodes(nodes, top_y);
@@ -126,6 +133,7 @@ class ProfilerDrawer {
 
   void draw_all_nodes()
   {
+    BLI_PROFILE_SCOPE(__func__);
     for (Span<ProfileNode *> nodes : profiler_layout_->root_nodes()) {
       this->draw_nodes(nodes);
     }
@@ -200,8 +208,16 @@ class ProfilerDrawer {
   {
     NodeTooltipArg &arg = *(NodeTooltipArg *)argN;
     ProfileNode &node = *arg.node;
+    const Duration duration = node.duration();
     std::stringstream ss;
-    ss << "Duration: " << duration_to_ms(node.end_time() - node.begin_time()) << " ms";
+    ss << std::setprecision(2) << std::fixed;
+    for (const ProfileNode *parent = node.parent(); parent != nullptr; parent = parent->parent()) {
+      const Duration parent_duration = parent->duration();
+      const float percentage = (duration.count() / (float)parent_duration.count()) * 100.0f;
+      ss << percentage << "% of " << parent->name() << "\n";
+    }
+    ss << "\n";
+    ss << "Duration: " << duration_to_ms(duration) << " ms";
     return BLI_strdup(ss.str().c_str());
   }
 
@@ -249,6 +265,7 @@ class ProfilerDrawer {
 
 void draw_profiler(const bContext *C, ARegion *region)
 {
+  BLI_PROFILE_SCOPE(__func__);
   ProfilerDrawer drawer{C, region};
   drawer.draw();
 }
diff --git a/source/blender/editors/space_profiler/profiler_layout.hh b/source/blender/editors/space_profiler/profiler_layout.hh
index 57a91d15e40..9672230901f 100644
--- a/source/blender/editors/space_profiler/profiler_layout.hh
+++ b/source/blender/editors/space_profiler/profiler_layout.hh
@@ -23,6 +23,7 @@
 
 namespace blender::ed::profiler {
 
+using profile::Duration;
 using profile::RecordedProfile;
 using profile::TimePoint;
 
@@ -67,6 +68,11 @@ class ProfileNode {
     return end_time_;
   }
 
+  Duration duration() const
+  {
+    return end_time_ - begin_time_;
+  }
+
   ProfileNode *parent()
   {
     return parent_;



More information about the Bf-blender-cvs mailing list