Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2017-07-29 18:31:36 +0300
committerCampbell Barton <ideasman42@gmail.com>2017-07-29 18:31:36 +0300
commit71388b094fafd9062a3de9157ea5658b76634b36 (patch)
treeda623fb23c856e6c76684489b37fc52b44ef15ff /source/blender/draw
parent913d8ec6082c4b42cd7957912078645af10ad024 (diff)
DwM: add ability to disable the timer
This interferes with benchmarking draw times, so this makes it easy to turn off.
Diffstat (limited to 'source/blender/draw')
-rw-r--r--source/blender/draw/intern/draw_manager.c80
1 files changed, 54 insertions, 26 deletions
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index 00a28f0371a..caf1894dc91 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -69,8 +69,6 @@
#include "IMB_colormanagement.h"
-#include "PIL_time.h"
-
#include "RE_engine.h"
#include "UI_interface.h"
@@ -94,9 +92,39 @@
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_query.h"
-#define MAX_ATTRIB_NAME 32
-#define MAX_PASS_NAME 32
-#define MAX_CLIP_PLANES 6 /* GL_MAX_CLIP_PLANES is at least 6 */
+/* -------------------------------------------------------------------- */
+/** \name Local Features
+ * \{ */
+
+#define USE_PROFILE
+
+#ifdef USE_PROFILE
+#include "PIL_time.h"
+
+#define PROFILE_TIMER_FALLOFF 0.1f
+
+#define PROFILE_START(time_start) \
+ double time_start = PIL_check_seconds_timer();
+
+#define PROFILE_END_ACCUM(time_accum, time_start) { \
+ time_accum += (PIL_check_seconds_timer() - time_start) * 1e3; \
+} ((void)0)
+
+/* exp average */
+#define PROFILE_END_UPDATE(time_update, time_start) { \
+ double _time_delta = (PIL_check_seconds_timer() - time_start) * 1e3; \
+ time_update = (time_update * (1.0f - PROFILE_TIMER_FALLOFF)) + \
+ (_time_delta * PROFILE_TIMER_FALLOFF); \
+} ((void)0)
+
+#else
+
+#define PROFILE_START(time_start) ((void)0)
+#define PROFILE_END_ACCUM(time_accum, time_start) ((void)0)
+#define PROFILE_END_UPDATE(time_update, time_start) ((void)0)
+
+#endif /* USE_PROFILE */
+
/* Use draw manager to call GPU_select, see: DRW_draw_select_loop */
#define USE_GPU_SELECT
@@ -107,6 +135,13 @@
# include "GPU_select.h"
#endif
+/** \} */
+
+
+#define MAX_ATTRIB_NAME 32
+#define MAX_PASS_NAME 32
+#define MAX_CLIP_PLANES 6 /* GL_MAX_CLIP_PLANES is at least 6 */
+
extern char datatoc_gpu_shader_2D_vert_glsl[];
extern char datatoc_gpu_shader_3D_vert_glsl[];
extern char datatoc_gpu_shader_fullscreen_vert_glsl[];
@@ -2511,21 +2546,18 @@ void DRW_lamp_engine_data_free(LampEngineData *led)
/** \name Rendering (DRW_engines)
* \{ */
-#define TIMER_FALLOFF 0.1f
-
static void DRW_engines_init(void)
{
for (LinkData *link = DST.enabled_engines.first; link; link = link->next) {
DrawEngineType *engine = link->data;
ViewportEngineData *data = DRW_viewport_engine_data_get(engine);
- double stime = PIL_check_seconds_timer();
+ PROFILE_START(stime);
if (engine->engine_init) {
engine->engine_init(data);
}
- double ftime = (PIL_check_seconds_timer() - stime) * 1e3;
- data->init_time = data->init_time * (1.0f - TIMER_FALLOFF) + ftime * TIMER_FALLOFF; /* exp average */
+ PROFILE_END_UPDATE(data->init_time, stime);
}
}
@@ -2543,14 +2575,13 @@ static void DRW_engines_cache_init(void)
DST.text_store_p = &data->text_draw_cache;
}
- double stime = PIL_check_seconds_timer();
+ PROFILE_START(stime);
data->cache_time = 0.0;
if (engine->cache_init) {
engine->cache_init(data);
}
-
- data->cache_time += (PIL_check_seconds_timer() - stime) * 1e3;
+ PROFILE_END_ACCUM(data->cache_time, stime);
}
}
@@ -2559,13 +2590,13 @@ static void DRW_engines_cache_populate(Object *ob)
for (LinkData *link = DST.enabled_engines.first; link; link = link->next) {
DrawEngineType *engine = link->data;
ViewportEngineData *data = DRW_viewport_engine_data_get(engine);
- double stime = PIL_check_seconds_timer();
+ PROFILE_START(stime);
if (engine->cache_populate) {
engine->cache_populate(data, ob);
}
- data->cache_time += (PIL_check_seconds_timer() - stime) * 1e3;
+ PROFILE_END_ACCUM(data->cache_time, stime);
}
}
@@ -2574,13 +2605,13 @@ static void DRW_engines_cache_finish(void)
for (LinkData *link = DST.enabled_engines.first; link; link = link->next) {
DrawEngineType *engine = link->data;
ViewportEngineData *data = DRW_viewport_engine_data_get(engine);
- double stime = PIL_check_seconds_timer();
+ PROFILE_START(stime);
if (engine->cache_finish) {
engine->cache_finish(data);
}
- data->cache_time += (PIL_check_seconds_timer() - stime) * 1e3;
+ PROFILE_END_ACCUM(data->cache_time, stime);
}
}
@@ -2591,14 +2622,13 @@ static void DRW_engines_draw_background(void)
ViewportEngineData *data = DRW_viewport_engine_data_get(engine);
if (engine->draw_background) {
- double stime = PIL_check_seconds_timer();
+ PROFILE_START(stime);
DRW_stats_group_start(engine->idname);
engine->draw_background(data);
DRW_stats_group_end();
- double ftime = (PIL_check_seconds_timer() - stime) * 1e3;
- data->background_time = data->background_time * (1.0f - TIMER_FALLOFF) + ftime * TIMER_FALLOFF; /* exp average */
+ PROFILE_END_UPDATE(data->background_time, stime);
return;
}
}
@@ -2612,7 +2642,7 @@ static void DRW_engines_draw_scene(void)
for (LinkData *link = DST.enabled_engines.first; link; link = link->next) {
DrawEngineType *engine = link->data;
ViewportEngineData *data = DRW_viewport_engine_data_get(engine);
- double stime = PIL_check_seconds_timer();
+ PROFILE_START(stime);
if (engine->draw_scene) {
DRW_stats_group_start(engine->idname);
@@ -2620,8 +2650,7 @@ static void DRW_engines_draw_scene(void)
DRW_stats_group_end();
}
- double ftime = (PIL_check_seconds_timer() - stime) * 1e3;
- data->render_time = data->render_time * (1.0f - TIMER_FALLOFF) + ftime * TIMER_FALLOFF; /* exp average */
+ PROFILE_END_UPDATE(data->render_time, stime);
}
}
@@ -2630,14 +2659,13 @@ static void DRW_engines_draw_text(void)
for (LinkData *link = DST.enabled_engines.first; link; link = link->next) {
DrawEngineType *engine = link->data;
ViewportEngineData *data = DRW_viewport_engine_data_get(engine);
- double stime = PIL_check_seconds_timer();
+ PROFILE_START(stime);
if (data->text_draw_cache) {
DRW_text_cache_draw(data->text_draw_cache, DST.draw_ctx.v3d, DST.draw_ctx.ar, false);
}
- double ftime = (PIL_check_seconds_timer() - stime) * 1e3;
- data->render_time = data->render_time * (1.0f - TIMER_FALLOFF) + ftime * TIMER_FALLOFF; /* exp average */
+ PROFILE_END_UPDATE(data->render_time, stime);
}
}