From 194258b4794ec13b9ffa7b5f37a3060ecc0e59b3 Mon Sep 17 00:00:00 2001
From: Perttu Ahola <celeron55@gmail.com>
Date: Wed, 21 Mar 2012 15:05:51 +0200
Subject: [PATCH] Add different automatic profiler graph drawing style for
 relative-ish plots

---
 src/game.cpp | 28 ++++++++++++++++++++++++----
 1 file changed, 24 insertions(+), 4 deletions(-)

diff --git a/src/game.cpp b/src/game.cpp
index e261a9f04..0fe296d12 100644
--- a/src/game.cpp
+++ b/src/game.cpp
@@ -724,6 +724,11 @@ class ProfilerGraph
 					core::rect<s32>(textx, y - graphh/2 - texth/2,
 					textx2, y - graphh/2 + texth/2),
 					meta.color);
+			s32 graph1y = y;
+			s32 graph1h = graphh;
+			bool relativegraph = (show_min != 0 && show_min != show_max);
+			float lastscaledvalue = 0.0;
+			bool lastscaledvalue_exists = false;
 			for(std::list<Piece>::const_iterator j = m_log.begin();
 					j != m_log.end(); j++)
 			{
@@ -738,6 +743,7 @@ class ProfilerGraph
 				}
 				if(!value_exists){
 					x++;
+					lastscaledvalue_exists = false;
 					continue;
 				}
 				float scaledvalue = 1.0;
@@ -745,12 +751,23 @@ class ProfilerGraph
 					scaledvalue = (value - show_min) / (show_max - show_min);
 				if(scaledvalue == 1.0 && value == 0){
 					x++;
+					lastscaledvalue_exists = false;
 					continue;
 				}
-				s32 ivalue = scaledvalue * graphh;
-				driver->draw2DLine(v2s32(x, y),
-						v2s32(x, y - ivalue),
-						meta.color);
+				if(relativegraph){
+					if(lastscaledvalue_exists){
+						s32 ivalue1 = lastscaledvalue * graph1h;
+						s32 ivalue2 = scaledvalue * graph1h;
+						driver->draw2DLine(v2s32(x-1, graph1y - ivalue1),
+								v2s32(x, graph1y - ivalue2), meta.color);
+					}
+					lastscaledvalue = scaledvalue;
+					lastscaledvalue_exists = true;
+				} else{
+					s32 ivalue = scaledvalue * graph1h;
+					driver->draw2DLine(v2s32(x, graph1y),
+							v2s32(x, graph1y - ivalue), meta.color);
+				}
 				x++;
 			}
 			meta_i++;
@@ -1102,6 +1119,9 @@ void the_game(
 	float recent_turn_speed = 0.0;
 	
 	ProfilerGraph graph;
+	// Initially clear the profiler
+	Profiler::GraphValues dummyvalues;
+	g_profiler->graphGet(dummyvalues);
 
 	float nodig_delay_timer = 0.0;
 	float dig_time = 0.0;
-- 
GitLab