diff options
author | Joshua Leung <aligorith@gmail.com> | 2018-08-23 02:36:20 +0300 |
---|---|---|
committer | Joshua Leung <aligorith@gmail.com> | 2018-08-23 08:07:38 +0300 |
commit | e5e42b77820999a4fe6de3fde92ac3b741bbe243 (patch) | |
tree | 08d6b7e14498a1d8b8b501c7309bc102d69721bd /source | |
parent | 6bbf6712bb095add22cacd391cc4f10cfb5bfc34 (diff) |
Depsgraph Filtering: WIP more debugging prints
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/depsgraph/intern/depsgraph_query_filter.cc | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/source/blender/depsgraph/intern/depsgraph_query_filter.cc b/source/blender/depsgraph/intern/depsgraph_query_filter.cc index 9bfe8815703..11d8de098b9 100644 --- a/source/blender/depsgraph/intern/depsgraph_query_filter.cc +++ b/source/blender/depsgraph/intern/depsgraph_query_filter.cc @@ -91,7 +91,7 @@ void deg_add_retained_id_cb(ID *id, void *user_data) /* Remove relations pointing to the given OperationDepsNode */ /* TODO: Make this part of OperationDepsNode? */ -void deg_unlink_opnode(OperationDepsNode *op_node) +void deg_unlink_opnode(Depsgraph *graph, OperationDepsNode *op_node) { std::vector<DepsRelation *> all_links; @@ -129,18 +129,22 @@ bool deg_filter_free_idnode(Depsgraph *graph, IDDepsNode *id_node, /* This means builder "stole" ownership of the copy-on-written * datablock for her own dirty needs. */ + printf(" no id_cow "); return false; } else if (!deg_copy_on_write_is_expanded(id_node->id_cow)) { + printf(" id_cow collapsed "); return false; } else { const ID_Type id_type = GS(id_node->id_cow->name); if (filter(id_type)) { + printf(" id_type (T) = %d "); id_node->destroy(); return true; } else { + printf(" id_type (F) = %d "); return false; } } @@ -165,12 +169,14 @@ void deg_filter_clear_ids_conditional( if (deg_filter_free_idnode(graph, id_node, filter)) { /* Node data got destroyed. Remove from collections, and free */ + printf(" culling %s\n", id->name); BLI_ghash_remove(graph->id_hash, id, NULL, NULL); - OBJECT_GUARDED_DELETE(id_node, IDDepsNode); it = graph->id_nodes.erase(it); + OBJECT_GUARDED_DELETE(id_node, IDDepsNode); } else { /* Node wasn't freed. Increment iterator */ + printf(" skipping %s\n", id->name); ++it; } } @@ -189,7 +195,7 @@ void deg_filter_remove_unwanted_ids(Depsgraph *graph, GSet *retained_ids) GHASH_FOREACH_BEGIN(ComponentDepsNode *, comp_node, id_node->components) { foreach (OperationDepsNode *op_node, comp_node->operations) { - deg_unlink_opnode(op_node); + deg_unlink_opnode(graph, op_node); } } GHASH_FOREACH_END(); @@ -215,7 +221,9 @@ void deg_filter_remove_unwanted_ids(Depsgraph *graph, GSet *retained_ids) * NOTE: See clear_id_nodes() for more details about what's happening here * (e.g. regarding the lambdas used for freeing order hacks) */ + printf("Culling ID's scene:\n"); deg_filter_clear_ids_conditional(graph, [](ID_Type id_type) { return id_type == ID_SCE; }); + printf("Culling ID's other:\n"); deg_filter_clear_ids_conditional(graph, [](ID_Type id_type) { return id_type != ID_PA; }); } @@ -268,16 +276,27 @@ Depsgraph *DEG_graph_filter(const Depsgraph *graph_src, Main *bmain, DEG_FilterQ BLI_gset_free(retained_ids, NULL); retained_ids = NULL; + /* Debug - Are the desired targets still in there? */ + printf("Filtered graph sanity check:\n"); + LISTBASE_FOREACH(DEG_FilterTarget *, target, &query->targets) { + printf(" %s -> %d\n", target->id->name, BLI_ghash_haskey(deg_graph_new->id_hash, target->id)); + } + /* Print Stats */ // XXX: Hide behind debug flags size_t s_outer, s_operations, s_relations; + size_t s_ids = deg_graph_src->id_nodes.size(); + unsigned int s_idh = BLI_ghash_len(deg_graph_src->id_hash); + size_t n_outer, n_operations, n_relations; + size_t n_ids = deg_graph_src->id_nodes.size(); + unsigned int n_idh = BLI_ghash_len(deg_graph_new->id_hash); DEG_stats_simple(graph_src, &s_outer, &s_operations, &s_relations); DEG_stats_simple(graph_new, &n_outer, &n_operations, &n_relations); - printf("%s: src = (Out: %u, Op: %u, Rel: %u)\n", __func__, s_outer, s_operations, s_relations); // XXX - printf("%s: new = (Out: %u, Op: %u, Rel: %u)\n", __func__, n_outer, n_operations, n_relations); // XXX + printf("%s: src = (ID's: %u (%u), Out: %u, Op: %u, Rel: %u)\n", __func__, s_ids, s_idh, s_outer, s_operations, s_relations); // XXX + printf("%s: new = (ID's: %u (%u), Out: %u, Op: %u, Rel: %u)\n", __func__, n_ids, n_idh, n_outer, n_operations, n_relations); // XXX /* Return this new graph instance */ return graph_new; |