From 0b27a70b294590d7fb2bb25bf2d207a719ce8d98 Mon Sep 17 00:00:00 2001
From: sfan5 <sfan5@live.de>
Date: Wed, 12 Oct 2016 18:39:35 +0200
Subject: [PATCH] Don't use unordered maps for ProfilerGraph (fixes flickering)

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

diff --git a/src/game.cpp b/src/game.cpp
index 4f89aa680..b85f6d98d 100644
--- a/src/game.cpp
+++ b/src/game.cpp
@@ -605,7 +605,9 @@ class ProfilerGraph
 	void draw(s32 x_left, s32 y_bottom, video::IVideoDriver *driver,
 		  gui::IGUIFont *font) const
 	{
-		UNORDERED_MAP<std::string, Meta> m_meta;
+		// Do *not* use UNORDERED_MAP here as the order needs
+		// to be the same for each call to prevent flickering
+		std::map<std::string, Meta> m_meta;
 
 		for (std::deque<Piece>::const_iterator k = m_log.begin();
 				k != m_log.end(); ++k) {
@@ -615,7 +617,7 @@ class ProfilerGraph
 					i != piece.values.end(); ++i) {
 				const std::string &id = i->first;
 				const float &value = i->second;
-				UNORDERED_MAP<std::string, Meta>::iterator j = m_meta.find(id);
+				std::map<std::string, Meta>::iterator j = m_meta.find(id);
 
 				if (j == m_meta.end()) {
 					m_meta[id] = Meta(value);
@@ -642,7 +644,7 @@ class ProfilerGraph
 			sizeof(usable_colors) / sizeof(*usable_colors);
 		u32 next_color_i = 0;
 
-		for (UNORDERED_MAP<std::string, Meta>::iterator i = m_meta.begin();
+		for (std::map<std::string, Meta>::iterator i = m_meta.begin();
 				i != m_meta.end(); ++i) {
 			Meta &meta = i->second;
 			video::SColor color(255, 200, 200, 200);
@@ -658,7 +660,7 @@ class ProfilerGraph
 		s32 textx2 = textx + 200 - 15;
 		s32 meta_i = 0;
 
-		for (UNORDERED_MAP<std::string, Meta>::const_iterator i = m_meta.begin();
+		for (std::map<std::string, Meta>::const_iterator i = m_meta.begin();
 				i != m_meta.end(); ++i) {
 			const std::string &id = i->first;
 			const Meta &meta = i->second;
-- 
GitLab