[Bf-blender-cvs] [6c499c6ea50] profiler-editor: support profiling ranges more efficiently
Jacques Lucke
noreply at git.blender.org
Sat May 1 13:30:33 CEST 2021
Commit: 6c499c6ea508b87ee3d1460ce4c5c4c724fdc744
Author: Jacques Lucke
Date: Sat May 1 13:11:01 2021 +0200
Branches: profiler-editor
https://developer.blender.org/rB6c499c6ea508b87ee3d1460ce4c5c4c724fdc744
support profiling ranges more efficiently
===================================================================
M source/blender/blenkernel/intern/modifier.c
M source/blender/blenlib/BLI_profile.h
M source/blender/blenlib/BLI_profile.hh
M source/blender/blenlib/BLI_profile_manage.hh
M source/blender/blenlib/intern/profile.cc
M source/blender/depsgraph/intern/eval/deg_eval.cc
M source/blender/editors/space_profiler/profiler_layout.cc
M source/blender/nodes/geometry/nodes/node_geo_attribute_randomize.cc
M source/blender/windowmanager/intern/wm_event_system.c
===================================================================
diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c
index 0fc3ac32040..0ec0b7f0177 100644
--- a/source/blender/blenkernel/intern/modifier.c
+++ b/source/blender/blenkernel/intern/modifier.c
@@ -1054,7 +1054,7 @@ struct Mesh *BKE_modifier_modify_mesh(ModifierData *md,
modwrap_dependsOnNormals(me);
}
BLI_ProfileTask profile_task;
- BLI_profile_task_begin(&profile_task, md->name);
+ BLI_profile_task_begin_named(&profile_task, md->name);
Mesh *new_mesh = mti->modifyMesh(md, ctx, me);
BLI_profile_task_end(&profile_task);
return new_mesh;
@@ -1073,7 +1073,7 @@ void BKE_modifier_deform_verts(ModifierData *md,
modwrap_dependsOnNormals(me);
}
BLI_ProfileTask profile_task;
- BLI_profile_task_begin(&profile_task, md->name);
+ BLI_profile_task_begin_named(&profile_task, md->name);
mti->deformVerts(md, ctx, me, vertexCos, numVerts);
BLI_profile_task_end(&profile_task);
}
diff --git a/source/blender/blenlib/BLI_profile.h b/source/blender/blenlib/BLI_profile.h
index d5929dcae08..fb812356b81 100644
--- a/source/blender/blenlib/BLI_profile.h
+++ b/source/blender/blenlib/BLI_profile.h
@@ -35,28 +35,45 @@ BLI_INLINE bool BLI_profile_is_enabled(void)
return bli_profiling_is_enabled;
}
-void _bli_profile_task_begin(BLI_ProfileTask *task, const char *name);
-void _bli_profile_task_begin_subtask(BLI_ProfileTask *task,
- const char *name,
- const BLI_ProfileTask *parent_task);
+void _bli_profile_task_begin_named(BLI_ProfileTask *task, const char *name);
+void _bli_profile_task_begin_named_subtask(BLI_ProfileTask *task,
+ const char *name,
+ const BLI_ProfileTask *parent_task);
+void _bli_profile_task_begin_range(BLI_ProfileTask *task,
+ const BLI_ProfileTask *parent_task,
+ int64_t start,
+ int64_t one_after_last);
void _bli_profile_task_end(BLI_ProfileTask *task);
-BLI_INLINE void BLI_profile_task_begin(BLI_ProfileTask *task, const char *name)
+BLI_INLINE void BLI_profile_task_begin_named(BLI_ProfileTask *task, const char *name)
{
if (bli_profiling_is_enabled) {
- _bli_profile_task_begin(task, name);
+ _bli_profile_task_begin_named(task, name);
}
else {
task->id = BLI_PROFILE_DUMMY_ID;
}
}
-BLI_INLINE void BLI_profile_task_begin_subtask(BLI_ProfileTask *task,
- const char *name,
- const BLI_ProfileTask *parent_task)
+BLI_INLINE void BLI_profile_task_begin_named_subtask(BLI_ProfileTask *task,
+ const char *name,
+ const BLI_ProfileTask *parent_task)
{
if (bli_profiling_is_enabled) {
- _bli_profile_task_begin_subtask(task, name, parent_task);
+ _bli_profile_task_begin_named_subtask(task, name, parent_task);
+ }
+ else {
+ task->id = BLI_PROFILE_DUMMY_ID;
+ }
+}
+
+BLI_INLINE void BLI_profile_task_begin_range(BLI_ProfileTask *task,
+ const BLI_ProfileTask *parent_task,
+ const int64_t start,
+ const int64_t one_after_last)
+{
+ if (bli_profiling_is_enabled) {
+ _bli_profile_task_begin_range(task, parent_task, start, one_after_last);
}
else {
task->id = BLI_PROFILE_DUMMY_ID;
diff --git a/source/blender/blenlib/BLI_profile.hh b/source/blender/blenlib/BLI_profile.hh
index 2e52c8f1447..89005cb705c 100644
--- a/source/blender/blenlib/BLI_profile.hh
+++ b/source/blender/blenlib/BLI_profile.hh
@@ -27,12 +27,12 @@ class ProfileTask {
public:
ProfileTask(const char *name)
{
- BLI_profile_task_begin(&task_, name);
+ BLI_profile_task_begin_named(&task_, name);
}
ProfileTask(const char *name, const BLI_ProfileTask *parent_task)
{
- BLI_profile_task_begin_subtask(&task_, name, parent_task);
+ BLI_profile_task_begin_named_subtask(&task_, name, parent_task);
}
~ProfileTask()
diff --git a/source/blender/blenlib/BLI_profile_manage.hh b/source/blender/blenlib/BLI_profile_manage.hh
index 5ceb4429d04..5f93c733f6f 100644
--- a/source/blender/blenlib/BLI_profile_manage.hh
+++ b/source/blender/blenlib/BLI_profile_manage.hh
@@ -29,20 +29,29 @@ using TimePoint = Clock::time_point;
using Nanoseconds = std::chrono::nanoseconds;
struct ProfileTaskBegin {
- const char *name;
TimePoint time;
uint64_t id;
uint64_t parent_id;
uint64_t thread_id;
};
+struct ProfileTaskBeginNamed : public ProfileTaskBegin {
+ const char *name;
+};
+
+struct ProfileTaskBeginRange : public ProfileTaskBegin {
+ int64_t start;
+ int64_t one_after_last;
+};
+
struct ProfileTaskEnd {
TimePoint time;
uint64_t begin_id;
};
struct RecordedProfile {
- RawVector<ProfileTaskBegin> task_begins;
+ RawVector<ProfileTaskBeginNamed> task_begins_named;
+ RawVector<ProfileTaskBeginRange> task_begins_range;
RawVector<ProfileTaskEnd> task_ends;
};
diff --git a/source/blender/blenlib/intern/profile.cc b/source/blender/blenlib/intern/profile.cc
index 13ee5274c0a..ea341f00658 100644
--- a/source/blender/blenlib/intern/profile.cc
+++ b/source/blender/blenlib/intern/profile.cc
@@ -62,9 +62,8 @@ static std::shared_ptr<ProfileRegistry> &ensure_registry()
return registry;
}
-template<typename T>
-using ProfileDataQueue =
- SingleProducerChunkConsumerQueue<T, RawAllocator, LinearAllocator<RawAllocator>>;
+template<typename T, typename UserData = void>
+using ProfileDataQueue = SingleProducerChunkConsumerQueue<T, RawAllocator, UserData>;
struct ThreadLocalProfileData {
ThreadLocalProfileData()
@@ -82,7 +81,8 @@ struct ThreadLocalProfileData {
}
uint64_t thread_id;
- ProfileDataQueue<ProfileTaskBegin> queue_begins;
+ ProfileDataQueue<ProfileTaskBeginNamed, LinearAllocator<RawAllocator>> queue_begins_named;
+ ProfileDataQueue<ProfileTaskBeginRange> queue_begins_range;
ProfileDataQueue<ProfileTaskEnd> queue_ends;
RawStack<uint64_t> id_stack;
@@ -150,8 +150,12 @@ void ProfileListener::flush_to_all()
}
RecordedProfile recorded_profile;
for (ThreadLocalProfileData *data : registry->threadlocals) {
- data->queue_begins.consume(
- [&](Span<ProfileTaskBegin> data) { recorded_profile.task_begins.extend(data); });
+ data->queue_begins_named.consume([&](Span<ProfileTaskBeginNamed> data) {
+ recorded_profile.task_begins_named.extend(data);
+ });
+ data->queue_begins_range.consume([&](Span<ProfileTaskBeginRange> data) {
+ recorded_profile.task_begins_range.extend(data);
+ });
data->queue_ends.consume(
[&](Span<ProfileTaskEnd> data) { recorded_profile.task_ends.extend(data); });
}
@@ -162,7 +166,7 @@ void ProfileListener::flush_to_all()
} // namespace blender::profile
-static void profile_task_begin(BLI_ProfileTask *task, const char *name, uint64_t parent_id)
+static void profile_task_begin_named(BLI_ProfileTask *task, const char *name, uint64_t parent_id)
{
ThreadLocalProfileData &local_data = threadlocal_profile_data;
@@ -170,9 +174,9 @@ static void profile_task_begin(BLI_ProfileTask *task, const char *name, uint64_t
local_data.id_stack.push(id);
task->id = id;
- ProfileTaskBegin *task_begin = local_data.queue_begins.prepare_append();
+ ProfileTaskBeginNamed *task_begin = local_data.queue_begins_named.prepare_append();
LinearAllocator<RawAllocator> *allocator =
- local_data.queue_begins.user_data_for_current_append();
+ local_data.queue_begins_named.user_data_for_current_append();
StringRefNull name_copy = allocator->copy_string(name);
task_begin->id = id;
@@ -181,21 +185,43 @@ static void profile_task_begin(BLI_ProfileTask *task, const char *name, uint64_t
task_begin->thread_id = local_data.thread_id;
task_begin->time = Clock::now();
- local_data.queue_begins.commit_append();
+ local_data.queue_begins_named.commit_append();
}
-void _bli_profile_task_begin(BLI_ProfileTask *task, const char *name)
+void _bli_profile_task_begin_named(BLI_ProfileTask *task, const char *name)
{
ThreadLocalProfileData &local_data = threadlocal_profile_data;
const uint64_t parent_id = local_data.id_stack.peek_default(0);
- profile_task_begin(task, name, parent_id);
+ profile_task_begin_named(task, name, parent_id);
}
-void _bli_profile_task_begin_subtask(BLI_ProfileTask *task,
- const char *name,
- const BLI_ProfileTask *parent_task)
+void _bli_profile_task_begin_named_subtask(BLI_ProfileTask *task,
+ const char *name,
+ const BLI_ProfileTask *parent_task)
{
- profile_task_begin(task, name, parent_task->id);
+ profile_task_begin_named(task, name, parent_task->id);
+}
+
+void _bli_profile_task_begin_range(BLI_ProfileTask *task,
+ const BLI_ProfileTask *parent_task,
+ int64_t start,
+ int64_t one_after_last)
+{
+ ThreadLocalProfileData &local_data = threadlocal_profile_data;
+
+ const uint64_t id = local_data.get_next_unique_id();
+ local_data.id_stack.push(id);
+ task->id = id;
+
+ ProfileTaskBeginRange *task_begin = local_data.queue_begins_range.prepare_append();
+ task_begin->id = id;
+ task_begin->parent_id = parent_task->id;
+ task_begin->thread_id = local_data.thread_id;
+ task_begin->start = start;
+ task_begin->one_after_last = one_after_last;
+ task_begin->time = Clock::now();
+
+ local_data.queue_begins_range.commit_append();
}
void _bli_profile_task_end(BLI_ProfileTask *task)
diff --git a/source/blender/depsgraph/intern/eval/deg_eval.cc b/source/blender/depsgraph/intern/eval/deg_eval.cc
index 2b6727c67c1..b085e3e3902 100644
--- a/source/blender/depsgraph/intern/eval/deg_eval.cc
+++ b/source/blender/depsgraph/intern/eval/deg_eval.cc
@@ -
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list