[Bf-blender-cvs] [801c20cebc0] strand_editmode: Some optional timing for strand data buffer construction.
Lukas Tönne
noreply at git.blender.org
Sun Aug 6 13:44:16 CEST 2017
Commit: 801c20cebc0dc5604745a6b367b1db3bec4de2f1
Author: Lukas Tönne
Date: Fri Aug 4 08:41:20 2017 +0100
Branches: strand_editmode
https://developer.blender.org/rB801c20cebc0dc5604745a6b367b1db3bec4de2f1
Some optional timing for strand data buffer construction.
===================================================================
M source/blender/draw/intern/draw_cache_impl_strands.c
===================================================================
diff --git a/source/blender/draw/intern/draw_cache_impl_strands.c b/source/blender/draw/intern/draw_cache_impl_strands.c
index d3e9406fcfb..eed3c4744a7 100644
--- a/source/blender/draw/intern/draw_cache_impl_strands.c
+++ b/source/blender/draw/intern/draw_cache_impl_strands.c
@@ -47,6 +47,22 @@
#include "draw_cache_impl.h" /* own include */
#include "DRW_render.h"
+// timing
+//#define DEBUG_TIME
+#ifdef DEBUG_TIME
+# include "PIL_time_utildefines.h"
+#else
+# define TIMEIT_START(var)
+# define TIMEIT_VALUE(var)
+# define TIMEIT_VALUE_PRINT(var)
+# define TIMEIT_END(var)
+# define TIMEIT_BENCH(expr, id) (expr)
+# define TIMEIT_BLOCK_INIT(var)
+# define TIMEIT_BLOCK_START(var)
+# define TIMEIT_BLOCK_END(var)
+# define TIMEIT_BLOCK_STATS(var)
+#endif
+
/* ---------------------------------------------------------------------- */
/* Strands Gwn_Batch Cache */
@@ -366,6 +382,8 @@ Gwn_Batch *DRW_editstrands_batch_cache_get_points(BMEditStrands *es)
static void editstrands_batch_cache_ensure_hair_fibers(BMEditStrands *es, StrandsBatchCache *cache, bool use_ribbons, int subdiv)
{
+ TIMEIT_START(editstrands_batch_cache_ensure_hair_fibers);
+
GWN_VERTBUF_DISCARD_SAFE(cache->hair.verts);
GWN_INDEXBUF_DISCARD_SAFE(cache->hair.segments);
@@ -389,6 +407,7 @@ static void editstrands_batch_cache_ensure_hair_fibers(BMEditStrands *es, Strand
Gwn_IndexBufBuilder elb;
{
+ TIMEIT_START(data_alloc);
Gwn_PrimType prim_type;
unsigned prim_ct, vert_ct;
if (use_ribbons) {
@@ -404,8 +423,12 @@ static void editstrands_batch_cache_ensure_hair_fibers(BMEditStrands *es, Strand
GWN_vertbuf_data_alloc(cache->hair.verts, vert_ct);
GWN_indexbuf_init(&elb, prim_type, prim_ct, vert_ct);
+ TIMEIT_END(data_alloc);
}
+ TIMEIT_START(data_fill);
+ TIMEIT_BLOCK_INIT(GWN_vertbuf_attr_set);
+ TIMEIT_BLOCK_INIT(GWN_indexbuf_add_tri_verts);
int vi = 0;
for (int i = 0; i < es->hair_totfibers; ++i) {
const int fiblen = fiber_lengths[i];
@@ -414,14 +437,18 @@ static void editstrands_batch_cache_ensure_hair_fibers(BMEditStrands *es, Strand
float a = 0.0f;
for (int k = 0; k < fiblen; ++k) {
if (use_ribbons) {
+ TIMEIT_BLOCK_START(GWN_vertbuf_attr_set);
GWN_vertbuf_attr_set(cache->hair.verts, fiber_index_id, vi, &i);
GWN_vertbuf_attr_set(cache->hair.verts, curve_param_id, vi, &a);
GWN_vertbuf_attr_set(cache->hair.verts, fiber_index_id, vi+1, &i);
GWN_vertbuf_attr_set(cache->hair.verts, curve_param_id, vi+1, &a);
+ TIMEIT_BLOCK_END(GWN_vertbuf_attr_set);
if (k > 0) {
+ TIMEIT_BLOCK_START(GWN_indexbuf_add_tri_verts);
GWN_indexbuf_add_tri_verts(&elb, vi-2, vi-1, vi+1);
GWN_indexbuf_add_tri_verts(&elb, vi+1, vi, vi-2);
+ TIMEIT_BLOCK_END(GWN_indexbuf_add_tri_verts);
}
vi += 2;
@@ -440,10 +467,19 @@ static void editstrands_batch_cache_ensure_hair_fibers(BMEditStrands *es, Strand
a += da;
}
}
+ TIMEIT_BLOCK_STATS(GWN_vertbuf_attr_set);
+ TIMEIT_BLOCK_STATS(GWN_indexbuf_add_tri_verts);
+#ifdef DEBUG_TIME
+ printf("Total GWN time: %f\n", _timeit_var_GWN_vertbuf_attr_set + _timeit_var_GWN_indexbuf_add_tri_verts);
+#endif
+ fflush(stdout);
+ TIMEIT_END(data_fill);
MEM_freeN(fiber_lengths);
- cache->hair.segments = GWN_indexbuf_build(&elb);
+ TIMEIT_BENCH(cache->hair.segments = GWN_indexbuf_build(&elb), indexbuf_build);
+
+ TIMEIT_END(editstrands_batch_cache_ensure_hair_fibers);
}
static void editstrands_batch_cache_ensure_hair_fiber_texbuffer(BMEditStrands *es, StrandsBatchCache *cache, bool UNUSED(use_ribbons), int subdiv)
@@ -479,22 +515,30 @@ Gwn_Batch *DRW_editstrands_batch_cache_get_hair_fibers(BMEditStrands *es, bool u
{
StrandsBatchCache *cache = editstrands_batch_cache_get(es);
+ TIMEIT_START(DRW_editstrands_batch_cache_get_hair_fibers);
+
if (cache->hair.use_ribbons != use_ribbons) {
- editstrands_batch_cache_clear_hair(es);
+ TIMEIT_BENCH(editstrands_batch_cache_clear_hair(es), editstrands_batch_cache_clear_hair);
}
if (cache->hair.fibers == NULL) {
- editstrands_batch_cache_ensure_hair_fibers(es, cache, use_ribbons, subdiv);
+ TIMEIT_BENCH(editstrands_batch_cache_ensure_hair_fibers(es, cache, use_ribbons, subdiv),
+ editstrands_batch_cache_ensure_hair_fibers);
Gwn_PrimType prim_type = use_ribbons ? GWN_PRIM_TRIS : GWN_PRIM_LINES;
- cache->hair.fibers = GWN_batch_create(prim_type, cache->hair.verts, cache->hair.segments);
+ TIMEIT_BENCH(cache->hair.fibers = GWN_batch_create(prim_type, cache->hair.verts, cache->hair.segments),
+ GWN_batch_create);
cache->hair.use_ribbons = use_ribbons;
- editstrands_batch_cache_ensure_hair_fiber_texbuffer(es, cache, use_ribbons, subdiv);
+ TIMEIT_BENCH(editstrands_batch_cache_ensure_hair_fiber_texbuffer(es, cache, use_ribbons, subdiv),
+ editstrands_batch_cache_ensure_hair_fiber_texbuffer);
}
if (r_buffer) {
*r_buffer = &cache->hair.texbuffer;
}
+
+ TIMEIT_END(DRW_editstrands_batch_cache_get_hair_fibers);
+
return cache->hair.fibers;
}
More information about the Bf-blender-cvs
mailing list