Commit: 90e16022bd924f5063078ede17a6978d88ee0022
Author: Sergey Sharybin
Date:   Mon Jan 5 22:04:11 2015 +0500
Branches: depsgraph_refactor
https://developer.blender.org/rB90e16022bd924f5063078ede17a6978d88ee0022

Depsgraph: Use spin lock in DepsgraphDebug

Amount of oepration was really small so using mutex was a total overkill.

On the other hand, this code didn't really run on normal scene update
(which i understood after doing the changes..) so it's not like you can
expect any visible changes from this. More like "nice to have".

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

M       source/blender/depsgraph/intern/depsgraph_debug.cpp
M       source/blender/depsgraph/intern/depsgraph_debug.h
M       source/blender/depsgraph/intern/depsgraph_eval.cpp

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

diff --git a/source/blender/depsgraph/intern/depsgraph_debug.cpp 
b/source/blender/depsgraph/intern/depsgraph_debug.cpp
index 807d00e..5abeb99 100644
--- a/source/blender/depsgraph/intern/depsgraph_debug.cpp
+++ b/source/blender/depsgraph/intern/depsgraph_debug.cpp
@@ -51,9 +51,11 @@ extern "C" {
 #include "depsgraph_types.h"
 #include "depsgraph_intern.h"
 
-/* ************************************************ */
+/* ****************** */
 /* Graphviz Debugging */
 
+static SpinLock lock;
+
 #define NL "\r\n"
 
 static const char *deg_debug_graphviz_fontname = "helvetica";
@@ -771,10 +773,11 @@ void DepsgraphDebug::eval_step(const EvaluationContext 
*eval_ctx,
 #endif
 }
 
-void DepsgraphDebug::task_started(const OperationDepsNode *node)
+void DepsgraphDebug::task_started(Depsgraph *graph,
+                                  const OperationDepsNode *node)
 {
        if (stats) {
-               BLI_mutex_lock(&stats_mutex);
+               BLI_spin_lock(&graph->lock);
 
                ComponentDepsNode *comp = node->owner;
                ID *id = comp->owner->id;
@@ -789,14 +792,16 @@ void DepsgraphDebug::task_started(const OperationDepsNode 
*node)
                        times_clear(comp_stats->times);
                }
 
-               BLI_mutex_unlock(&stats_mutex);
+               BLI_spin_unlock(&graph->lock);
        }
 }
 
-void DepsgraphDebug::task_completed(const OperationDepsNode *node, double time)
+void DepsgraphDebug::task_completed(Depsgraph *graph,
+                                    const OperationDepsNode *node,
+                                    double time)
 {
        if (stats) {
-               BLI_mutex_lock(&stats_mutex);
+               BLI_spin_lock(&graph->lock);
 
                ComponentDepsNode *comp = node->owner;
                ID *id = comp->owner->id;
@@ -811,15 +816,14 @@ void DepsgraphDebug::task_completed(const 
OperationDepsNode *node, double time)
                        times_add(comp_stats->times, time);
                }
 
-               BLI_mutex_unlock(&stats_mutex);
+               BLI_spin_unlock(&graph->lock);
        }
 }
 
-/* ************************************************ */
+/* ********** */
 /* Statistics */
 
 DepsgraphStats *DepsgraphDebug::stats = NULL;
-ThreadMutex DepsgraphDebug::stats_mutex;
 
 /* GHash callback */
 static void deg_id_stats_free(void *val)
@@ -837,16 +841,12 @@ void DepsgraphDebug::stats_init()
        if (!stats) {
                stats = (DepsgraphStats *)MEM_callocN(sizeof(DepsgraphStats), 
"Depsgraph Stats");
                stats->id_stats = BLI_ghash_new(BLI_ghashutil_ptrhash, 
BLI_ghashutil_ptrcmp, "Depsgraph ID Stats Hash");
-
-               BLI_mutex_init(&stats_mutex);
        }
 }
 
 void DepsgraphDebug::stats_free()
 {
        if (stats) {
-               BLI_mutex_end(&stats_mutex);
-
                BLI_ghash_free(stats->id_stats, NULL, deg_id_stats_free);
                MEM_freeN(stats);
                stats = NULL;
diff --git a/source/blender/depsgraph/intern/depsgraph_debug.h 
b/source/blender/depsgraph/intern/depsgraph_debug.h
index c95aa90..9878ff6 100644
--- a/source/blender/depsgraph/intern/depsgraph_debug.h
+++ b/source/blender/depsgraph/intern/depsgraph_debug.h
@@ -27,10 +27,6 @@
 #ifndef __DEPSGRAPH_DEBUG_H__
 #define __DEPSGRAPH_DEBUG_H__
 
-extern "C" {
-#include "BLI_threads.h"
-}
-
 #include "depsgraph_types.h"
 
 struct DepsgraphStats;
@@ -56,8 +52,10 @@ struct DepsgraphDebug {
        static void eval_step(const EvaluationContext *eval_ctx,
                              const char *message);
 
-       static void task_started(const OperationDepsNode *node);
-       static void task_completed(const OperationDepsNode *node, double time);
+       static void task_started(Depsgraph *graph, const OperationDepsNode 
*node);
+       static void task_completed(Depsgraph *graph,
+                                  const OperationDepsNode *node,
+                                  double time);
 
        static DepsgraphStatsID *get_id_stats(ID *id, bool create);
        static DepsgraphStatsComponent *get_component_stats(DepsgraphStatsID 
*id_stats,
@@ -69,9 +67,6 @@ struct DepsgraphDebug {
        {
                return get_component_stats(get_id_stats(id, create), name, 
create);
        }
-
-protected:
-       static ThreadMutex stats_mutex;
 };
 
 #endif  /* __DEPSGRAPH_DEBUG_H__ */
diff --git a/source/blender/depsgraph/intern/depsgraph_eval.cpp 
b/source/blender/depsgraph/intern/depsgraph_eval.cpp
index 81533e6..80c0a66 100644
--- a/source/blender/depsgraph/intern/depsgraph_eval.cpp
+++ b/source/blender/depsgraph/intern/depsgraph_eval.cpp
@@ -137,7 +137,7 @@ static void deg_task_run_func(TaskPool *pool,
 
                /* Take note of current time. */
                double start_time = PIL_check_seconds_timer();
-               DepsgraphDebug::task_started(node);
+               DepsgraphDebug::task_started(state->graph, node);
 
                /* Should only be the case for NOOPs, which never get to this 
point. */
                BLI_assert(node->evaluate != NULL);
@@ -147,7 +147,9 @@ static void deg_task_run_func(TaskPool *pool,
 
                /* Note how long this took. */
                double end_time = PIL_check_seconds_timer();
-               DepsgraphDebug::task_completed(node, end_time - start_time);
+               DepsgraphDebug::task_completed(state->graph,
+                                              node,
+                                              end_time - start_time);
        }
 
        schedule_children(pool, state->eval_ctx, state->graph, node, 
state->layers);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to