Index: src/Common/Stats/Time.cc
===================================================================
--- src/Common/Stats/Time.cc	(revision 79eaeb7d2f415bedb0599880c26d345dd4696cd4)
+++ src/Common/Stats/Time.cc	(revision 3c0d4cdd403fcf9c68de3106b67c7b21967ae61f)
@@ -33,7 +33,9 @@
 			typedef  std::chrono::time_point<std::chrono::high_resolution_clock> point_t;
 			std::chrono::duration<double> total;
-			std::chrono::duration<double> parent;
 
 			point_t global_begin;
+
+			size_t prevl = 0;
+			size_t currl = 0;
 
 			template<typename T>
@@ -85,9 +87,21 @@
 
 				virtual void print(std::ostream & os) override {
+					if(currl > prevl) {
+						parents.push(last);
+					} else if(currl < prevl) {
+						parents.pop();
+					} else {
+						last = end - begin;
+					}
+
 					assert(finished);
 					std::chrono::duration<double> diff = end - begin;
 					os << diff << " | ";
-					os << std::setw(7) << std::setprecision(0);
-					os << size_t(100.0 * diff.count() / total.count()) << "% | ";
+					if(parents.empty()) {
+						os << "     N/A | ";
+					} else {
+						os << std::setw(7) << std::setprecision(0);
+						os << size_t(100.0 * diff.count() / parents.top().count()) << "% | ";
+					}
 					os << std::setw(5) << std::setprecision(0);
 					os << size_t(100.0 * diff.count() / total.count()) << "% ";
@@ -111,7 +125,13 @@
 				point_t begin;
 				point_t end;
+
+				static std::chrono::duration<double> last;
+				static std::stack<std::chrono::duration<double>> parents;
 			};
 
 			std::stack<TimerNode *> nodes;
+
+			std::chrono::duration<double> TimerNode::last = {};
+			std::stack<std::chrono::duration<double>> TimerNode::parents = {};
 
 			void StartGlobal() {
@@ -139,5 +159,4 @@
 				auto global_end = std::chrono::high_resolution_clock::now();
 				total = global_end - global_begin;
-				parent = total;
 
 				size_t nc = 0;
@@ -161,4 +180,5 @@
 
 				Base::ForAll(top, 0, [&](Base::TreeImpl * node, size_t level) {
+					currl = level;
 					std::cerr << std::string(level * 4, ' ');
 					std::cerr << node->name;
@@ -168,4 +188,5 @@
 					std::cerr << " |";
 					std::cerr << '\n';
+					prevl = level;
 				}, true);
 
