diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2016-09-16 18:09:28 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2016-09-16 18:09:28 +0300 |
commit | d96b8e168f3c809cd79f6028dbf99eeeebb71302 (patch) | |
tree | 75ee78ee75ea602c2c698f4b4ec8494093b949c7 /source/blender/depsgraph | |
parent | 76c99f361f58752eff8054f5cff52cad9ce57145 (diff) | |
parent | 4b39069908c88099860c04a3b7d3b4aae0a272f5 (diff) |
Merge branch 'master' into blender2.8
Diffstat (limited to 'source/blender/depsgraph')
-rw-r--r-- | source/blender/depsgraph/intern/builder/deg_builder_relations.cc | 30 | ||||
-rw-r--r-- | source/blender/depsgraph/intern/eval/deg_eval.cc | 2 |
2 files changed, 30 insertions, 2 deletions
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc index f016b379327..232c801563e 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc @@ -113,6 +113,32 @@ namespace DEG { /* ***************** */ /* Relations Builder */ +/* TODO(sergey): This is somewhat weak, but we don't want neither false-positive + * time dependencies nor special exceptions in the depsgraph evaluation. + */ +static bool python_driver_depends_on_time(ChannelDriver *driver) +{ + if (driver->expression[0] == '\0') { + /* Empty expression depends on nothing. */ + return false; + } + if (strchr(driver->expression, '(') != NULL) { + /* Function calls are considered dependent on a time. */ + return true; + } + if (strstr(driver->expression, "time") != NULL) { + /* Variable `time` depends on time. */ + /* TODO(sergey): This is a bit weak, but not sure about better way of + * handling this. + */ + return true; + } + /* Possible indirect time relation s should be handled via variable + * targets. + */ + return false; +} + /* **** General purpose functions **** */ RNAPathKey::RNAPathKey(ID *id, const char *path) : @@ -994,7 +1020,9 @@ void DepsgraphRelationBuilder::build_driver(ID *id, FCurve *fcu) * so for now we'll be quite conservative here about optimization and consider * all python drivers to be depending on time. */ - if (driver->type == DRIVER_TYPE_PYTHON) { + if ((driver->type == DRIVER_TYPE_PYTHON) && + python_driver_depends_on_time(driver)) + { TimeSourceKey time_src_key; add_relation(time_src_key, driver_key, DEPSREL_TYPE_TIME, "[TimeSrc -> Driver]"); } diff --git a/source/blender/depsgraph/intern/eval/deg_eval.cc b/source/blender/depsgraph/intern/eval/deg_eval.cc index f8cca5393e2..c3fd202d832 100644 --- a/source/blender/depsgraph/intern/eval/deg_eval.cc +++ b/source/blender/depsgraph/intern/eval/deg_eval.cc @@ -304,7 +304,7 @@ static void schedule_node(TaskPool *pool, Depsgraph *graph, unsigned int layers, deg_task_run_func, node, false, - TASK_PRIORITY_HIGH, + TASK_PRIORITY_LOW, thread_id); } } |