diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index 3c21acd3a02b075d3dd864e46927801a4a357c00..dbcfa02c555713346f0f44285e19a30a0c223c99 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -1143,7 +1143,11 @@ void DRW_draw_render_loop_ex(
 		drw_engines_cache_finish();
 
 		DRW_render_instance_buffer_finish();
-		PROFILE_END_ACCUM(DST.cache_time, stime);
+
+#ifdef USE_PROFILE
+		double *cache_time = GPU_viewport_cache_time_get(DST.viewport);
+		PROFILE_END_UPDATE(*cache_time, stime);
+#endif
 	}
 
 	DRW_stats_begin();
diff --git a/source/blender/draw/intern/draw_manager.h b/source/blender/draw/intern/draw_manager.h
index 6d4eee08ad69c24a545d456f3e82ef430c07f5d0..c7e9b3dc08de3bd1f69197fee1ae21960d338538 100644
--- a/source/blender/draw/intern/draw_manager.h
+++ b/source/blender/draw/intern/draw_manager.h
@@ -52,7 +52,7 @@
 #ifdef USE_PROFILE
 #  include "PIL_time.h"
 
-#  define PROFILE_TIMER_FALLOFF 0.1
+#  define PROFILE_TIMER_FALLOFF 0.04
 
 #  define PROFILE_START(time_start) \
 	double time_start = PIL_check_seconds_timer();
@@ -304,9 +304,6 @@ typedef struct DRWManager {
 
 	bool buffer_finish_called; /* Avoid bad usage of DRW_render_instance_buffer_finish */
 
-	/* Profiling */
-	double cache_time;
-
 	/* View dependant uniforms. */
 	DRWMatrixState original_mat; /* Original rv3d matrices. */
 	int override_mat;            /* Bitflag of which matrices are overriden. */
diff --git a/source/blender/draw/intern/draw_manager_profiling.c b/source/blender/draw/intern/draw_manager_profiling.c
index 8e5f98b5a49a7f70e3d4d947a85a158d01e3ae25..47769b1fb18382ccfaa4bb654e5cbbd76b12349e 100644
--- a/source/blender/draw/intern/draw_manager_profiling.c
+++ b/source/blender/draw/intern/draw_manager_profiling.c
@@ -286,9 +286,10 @@ void DRW_stats_draw(rcti *rect)
 	v += 2;
 
 	u = 0;
+	double *cache_time = GPU_viewport_cache_time_get(DST.viewport);
 	sprintf(col_label, "Cache Time");
 	draw_stat_5row(rect, u++, v, col_label, sizeof(col_label));
-	sprintf(time_to_txt, "%.2fms", DST.cache_time);
+	sprintf(time_to_txt, "%.2fms", *cache_time);
 	draw_stat_5row(rect, u++, v, time_to_txt, sizeof(time_to_txt));
 	v += 2;
 
diff --git a/source/blender/gpu/GPU_viewport.h b/source/blender/gpu/GPU_viewport.h
index b733027b0f33e73dee26703d838930746739c7c9..20d468459e6e4d277229eb058076a88f192ae587 100644
--- a/source/blender/gpu/GPU_viewport.h
+++ b/source/blender/gpu/GPU_viewport.h
@@ -83,7 +83,6 @@ typedef struct ViewportEngineData {
 
 	/* Profiling data */
 	double init_time;
-	double cache_time;
 	double render_time;
 	double background_time;
 } ViewportEngineData;
@@ -114,6 +113,9 @@ void *GPU_viewport_texture_list_get(GPUViewport *viewport);
 void  GPU_viewport_size_get(const GPUViewport *viewport, int size[2]);
 void  GPU_viewport_size_set(GPUViewport *viewport, const int size[2]);
 
+/* Profiling */
+double *GPU_viewport_cache_time_get(GPUViewport *viewport);
+
 void GPU_viewport_tag_update(GPUViewport *viewport);
 bool GPU_viewport_do_update(GPUViewport *viewport);
 
diff --git a/source/blender/gpu/intern/gpu_viewport.c b/source/blender/gpu/intern/gpu_viewport.c
index d123368f6ffd95afbc827946587f19970ab53a57..2ad89bd1345d5527c7caed916c9c1d7d194be987 100644
--- a/source/blender/gpu/intern/gpu_viewport.c
+++ b/source/blender/gpu/intern/gpu_viewport.c
@@ -87,6 +87,9 @@ struct GPUViewport {
 	struct DRWInstanceDataList *idatalist; /* Used for rendering data structure. */
 
 	ListBase tex_pool;  /* ViewportTempTexture list : Temporary textures shared across draw engines */
+
+	/* Profiling data */
+	double cache_time;
 };
 
 enum {
@@ -275,6 +278,11 @@ void GPU_viewport_size_set(GPUViewport *viewport, const int size[2])
 	viewport->size[1] = size[1];
 }
 
+double *GPU_viewport_cache_time_get(GPUViewport *viewport)
+{
+	return &viewport->cache_time;
+}
+
 /**
  * Try to find a texture coresponding to params into the texture pool.
  * If no texture was found, create one and add it to the pool.