All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH i-g-t 00/11] trace.pl fixes and improvements
@ 2018-07-09 13:19 ` Tvrtko Ursulin
  0 siblings, 0 replies; 45+ messages in thread
From: Tvrtko Ursulin @ 2018-07-09 13:19 UTC (permalink / raw)
  To: igt-dev; +Cc: intel-gfx

From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

Latest state of patches preceding the virtual engine support.

Tvrtko Ursulin (11):
  trace.pl: Fix no context colouring mode
  trace.pl: Improve readability of graphical timeline representation
  trace.pl: Scale timeline for better precision
  trace.pl: Put single context at single vertical slot
  trace.pl: Fix HTML timestamp generation
  trace.pl: Improve context colouring for large context id's
  trace.pl: Fix engine busy accounting in split mode
  trace.pl: Context save only applies to last request of a bunch
  trace.pl: Fix incomplete request handling
  trace.pl: Basic preemption support
  trace.pl: Fix request split mode

 scripts/media-bench.pl |   2 +-
 scripts/trace.pl       | 525 +++++++++++++++++++++++++++++------------
 2 files changed, 381 insertions(+), 146 deletions(-)

-- 
2.17.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [Intel-gfx] [PATCH i-g-t 00/11] trace.pl fixes and improvements
@ 2018-07-09 13:19 ` Tvrtko Ursulin
  0 siblings, 0 replies; 45+ messages in thread
From: Tvrtko Ursulin @ 2018-07-09 13:19 UTC (permalink / raw)
  To: igt-dev; +Cc: intel-gfx

From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

Latest state of patches preceding the virtual engine support.

Tvrtko Ursulin (11):
  trace.pl: Fix no context colouring mode
  trace.pl: Improve readability of graphical timeline representation
  trace.pl: Scale timeline for better precision
  trace.pl: Put single context at single vertical slot
  trace.pl: Fix HTML timestamp generation
  trace.pl: Improve context colouring for large context id's
  trace.pl: Fix engine busy accounting in split mode
  trace.pl: Context save only applies to last request of a bunch
  trace.pl: Fix incomplete request handling
  trace.pl: Basic preemption support
  trace.pl: Fix request split mode

 scripts/media-bench.pl |   2 +-
 scripts/trace.pl       | 525 +++++++++++++++++++++++++++++------------
 2 files changed, 381 insertions(+), 146 deletions(-)

-- 
2.17.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [PATCH i-g-t 01/11] trace.pl: Fix no context colouring mode
  2018-07-09 13:19 ` [Intel-gfx] " Tvrtko Ursulin
@ 2018-07-09 13:19   ` Tvrtko Ursulin
  -1 siblings, 0 replies; 45+ messages in thread
From: Tvrtko Ursulin @ 2018-07-09 13:19 UTC (permalink / raw)
  To: igt-dev; +Cc: intel-gfx

From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

Commit 87d2affc380da96ba66c258c5337c363fe8651ef ("trace.pl: Add support
for colouring context execution"), due some dodgy attempts at patch
splitting broke the legacy colouring mode.

Fix it by passing in the request stage into the helper so all stages can
be correctly coloured in both modes.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: John Harrison <John.C.Harrison@Intel.com>
---
 scripts/trace.pl | 30 +++++++++++++++++++++++++-----
 1 file changed, 25 insertions(+), 5 deletions(-)

diff --git a/scripts/trace.pl b/scripts/trace.pl
index ea6c667696f4..fd414f5a4b1e 100755
--- a/scripts/trace.pl
+++ b/scripts/trace.pl
@@ -873,10 +873,30 @@ sub sortQueue {
 
 sub ctx_colour
 {
-	my ($ctx, $s, $l) = (@_);
+	my ($ctx, $stage) = (@_);
+	my ($s, $l);
 	my $val;
 
-	return 'Pink;' unless $colour_contexts;
+	unless ($colour_contexts) {
+		if ($stage eq 'queue') {
+			return 'lightblue;';
+		} elsif ($stage eq 'ready') {
+			return 'lightgrey;';
+		} elsif ($stage eq 'execute') {
+			return 'pink;';
+		}
+	} else {
+		if ($stage eq 'queue') {
+			$s = 35;
+			$l = 85;
+		} elsif ($stage eq 'ready') {
+			$s = 35;
+			$l = 45;
+		} elsif ($stage eq 'execute') {
+			$s = 80;
+			$l = 65;
+		}
+	}
 
 	$val = int(360 / ($max_ctx - $min_ctx + 1)) * ($ctx - $min_ctx);
 
@@ -898,7 +918,7 @@ foreach my $key (sort sortQueue keys %db) {
 	unless (exists $skip_box{'queue'}) {
 		$skey = 2 * $max_seqno * $ctx + 2 * $seqno;
 		$style = 'color: black; background-color: ' .
-			 ctx_colour($ctx, 35, 85);
+			 ctx_colour($ctx, 'queue');
 		$content = "$name<br>$db{$key}->{'submit-delay'}us <small>($db{$key}->{'execute-delay'}us)</small>";
 		$startend = 'start: \'' . ts($queue) . '\', end: \'' . ts($submit) . '\'';
 		print "\t{id: $i, key: $skey, $type group: $group, subgroup: 1, subgroupOrder: 1, content: '$content', $startend, style: \'$style\'},\n";
@@ -909,7 +929,7 @@ foreach my $key (sort sortQueue keys %db) {
 	unless (exists $skip_box{'ready'}) {
 		$skey = 2 * $max_seqno * $ctx + 2 * $seqno + 1;
 		$style = 'color: black; background-color: ' .
-			 ctx_colour($ctx, 35, 45);
+			 ctx_colour($ctx, 'ready');
 		$content = "<small>$name<br>$db{$key}->{'execute-delay'}us</small>";
 		$startend = 'start: \'' . ts($submit) . '\', end: \'' . ts($start) . '\'';
 		print "\t{id: $i, key: $skey, $type group: $group, subgroup: 1, subgroupOrder: 2, content: '$content', $startend, style: \'$style\'},\n";
@@ -923,7 +943,7 @@ foreach my $key (sort sortQueue keys %db) {
 			$style = 'color: white; background-color: red;';
 		} else {
 			$style = 'color: black; background-color: ' .
-				  ctx_colour($ctx, 80, 65);
+				  ctx_colour($ctx, 'execute');
 		}
 		$content = "$name <small>$db{$key}->{'port'}</small>";
 		$content .= ' <small><i>???</i></small> ' if exists $db{$key}->{'incomplete'};
-- 
2.17.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 45+ messages in thread

* [igt-dev] [PATCH i-g-t 01/11] trace.pl: Fix no context colouring mode
@ 2018-07-09 13:19   ` Tvrtko Ursulin
  0 siblings, 0 replies; 45+ messages in thread
From: Tvrtko Ursulin @ 2018-07-09 13:19 UTC (permalink / raw)
  To: igt-dev; +Cc: intel-gfx, Tvrtko Ursulin

From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

Commit 87d2affc380da96ba66c258c5337c363fe8651ef ("trace.pl: Add support
for colouring context execution"), due some dodgy attempts at patch
splitting broke the legacy colouring mode.

Fix it by passing in the request stage into the helper so all stages can
be correctly coloured in both modes.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: John Harrison <John.C.Harrison@Intel.com>
---
 scripts/trace.pl | 30 +++++++++++++++++++++++++-----
 1 file changed, 25 insertions(+), 5 deletions(-)

diff --git a/scripts/trace.pl b/scripts/trace.pl
index ea6c667696f4..fd414f5a4b1e 100755
--- a/scripts/trace.pl
+++ b/scripts/trace.pl
@@ -873,10 +873,30 @@ sub sortQueue {
 
 sub ctx_colour
 {
-	my ($ctx, $s, $l) = (@_);
+	my ($ctx, $stage) = (@_);
+	my ($s, $l);
 	my $val;
 
-	return 'Pink;' unless $colour_contexts;
+	unless ($colour_contexts) {
+		if ($stage eq 'queue') {
+			return 'lightblue;';
+		} elsif ($stage eq 'ready') {
+			return 'lightgrey;';
+		} elsif ($stage eq 'execute') {
+			return 'pink;';
+		}
+	} else {
+		if ($stage eq 'queue') {
+			$s = 35;
+			$l = 85;
+		} elsif ($stage eq 'ready') {
+			$s = 35;
+			$l = 45;
+		} elsif ($stage eq 'execute') {
+			$s = 80;
+			$l = 65;
+		}
+	}
 
 	$val = int(360 / ($max_ctx - $min_ctx + 1)) * ($ctx - $min_ctx);
 
@@ -898,7 +918,7 @@ foreach my $key (sort sortQueue keys %db) {
 	unless (exists $skip_box{'queue'}) {
 		$skey = 2 * $max_seqno * $ctx + 2 * $seqno;
 		$style = 'color: black; background-color: ' .
-			 ctx_colour($ctx, 35, 85);
+			 ctx_colour($ctx, 'queue');
 		$content = "$name<br>$db{$key}->{'submit-delay'}us <small>($db{$key}->{'execute-delay'}us)</small>";
 		$startend = 'start: \'' . ts($queue) . '\', end: \'' . ts($submit) . '\'';
 		print "\t{id: $i, key: $skey, $type group: $group, subgroup: 1, subgroupOrder: 1, content: '$content', $startend, style: \'$style\'},\n";
@@ -909,7 +929,7 @@ foreach my $key (sort sortQueue keys %db) {
 	unless (exists $skip_box{'ready'}) {
 		$skey = 2 * $max_seqno * $ctx + 2 * $seqno + 1;
 		$style = 'color: black; background-color: ' .
-			 ctx_colour($ctx, 35, 45);
+			 ctx_colour($ctx, 'ready');
 		$content = "<small>$name<br>$db{$key}->{'execute-delay'}us</small>";
 		$startend = 'start: \'' . ts($submit) . '\', end: \'' . ts($start) . '\'';
 		print "\t{id: $i, key: $skey, $type group: $group, subgroup: 1, subgroupOrder: 2, content: '$content', $startend, style: \'$style\'},\n";
@@ -923,7 +943,7 @@ foreach my $key (sort sortQueue keys %db) {
 			$style = 'color: white; background-color: red;';
 		} else {
 			$style = 'color: black; background-color: ' .
-				  ctx_colour($ctx, 80, 65);
+				  ctx_colour($ctx, 'execute');
 		}
 		$content = "$name <small>$db{$key}->{'port'}</small>";
 		$content .= ' <small><i>???</i></small> ' if exists $db{$key}->{'incomplete'};
-- 
2.17.1

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 45+ messages in thread

* [PATCH i-g-t 02/11] trace.pl: Improve readability of graphical timeline representation
  2018-07-09 13:19 ` [Intel-gfx] " Tvrtko Ursulin
@ 2018-07-09 13:19   ` Tvrtko Ursulin
  -1 siblings, 0 replies; 45+ messages in thread
From: Tvrtko Ursulin @ 2018-07-09 13:19 UTC (permalink / raw)
  To: igt-dev; +Cc: intel-gfx

From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

We add stripes for different stages of request execution so it is easier
to follow one context in the multi-colour mode.

Vertical stripe pattern indicates pipeline "blockages" - requests waiting
for dependencies before they are runnable.

Diagonal stripes indicate runnable requests waiting for GPU time.

Horizontal strips are requests executing on the GPU.

Also use this new multi-coloured mode from media-bench.pl.

v2:
 John Harrison:
 * Mention media-bench.pl in the commit.
 * Fix HTML for single colour mode.

v3:
 * Rebase.
 * Apply stripes to legacy colouring as well.

v4:
 John Harrison:
 * Use per context colours for ctxsave and incomplete boxes.
 * Clearer timeline legend.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: John Harrison <John.C.Harrison@Intel.com>
---
 scripts/media-bench.pl |   2 +-
 scripts/trace.pl       | 112 ++++++++++++++++++++++++++++++++---------
 2 files changed, 90 insertions(+), 24 deletions(-)

diff --git a/scripts/media-bench.pl b/scripts/media-bench.pl
index c5628c7f2836..375844d9cdf6 100755
--- a/scripts/media-bench.pl
+++ b/scripts/media-bench.pl
@@ -207,7 +207,7 @@ sub trace_workload
 	show_cmd($cmd);
 	system($cmd);
 
-	$cmd = "perf script | $tracepl --html -x ctxsave -s ";
+	$cmd = "perf script | $tracepl --html -x ctxsave -s -c ";
 	$cmd .= join ' ', map("-i $_", @skip_engine);
 	$cmd .= " > ${file}.html";
 	show_cmd($cmd);
diff --git a/scripts/trace.pl b/scripts/trace.pl
index fd414f5a4b1e..1ec8b297d15e 100755
--- a/scripts/trace.pl
+++ b/scripts/trace.pl
@@ -727,9 +727,14 @@ foreach my $key (keys %reqwait) {
 say sprintf('GPU: %.2f%% idle, %.2f%% busy',
 	     $flat_busy{'gpu-idle'}, $flat_busy{'gpu-busy'}) unless $html;
 
-my $queued_colour = $colour_contexts ? 'multi-colour light' : 'blue';
-my $runnable_colour = $colour_contexts ? 'multi-colour dark' : 'grey';
-my $execute_colour = $colour_contexts ? 'multi-colour' : 'pink';
+my $timeline_text = $colour_contexts ?
+		    'Per context coloured shading like:' : 'Box shading like:';
+
+my $queued_style = box_style($min_ctx, 'queue');
+my $ready_style = box_style($min_ctx, 'ready');
+my $execute_style = box_style($min_ctx, 'execute');
+my $ctxsave_style = box_style($min_ctx, 'ctxsave');
+my $incomplete_style = box_style($min_ctx, 'incomplete');
 
 print <<ENDHTML if $html;
 <!DOCTYPE HTML>
@@ -751,9 +756,28 @@ print <<ENDHTML if $html;
 <button onclick="toggleStackSubgroups()">Toggle stacking</button>
 
 <p>
-$execute_colour = requests executing on the GPU<br>
-$runnable_colour = runnable requests waiting for a slot on GPU<br>
-$queued_colour = requests waiting on fences and dependencies before they are runnable<br>
+<b>Timeline request view:</b>
+<table>
+<tr><td colspan='4'>$timeline_text</td></tr>
+<tr>
+<td align='center'><div style='$queued_style'>QUEUED</div></td>
+<td align='center'><div style='$ready_style'>READY</div></td>
+<td align='center'><div style='$execute_style'>EXECUTE</div></td>
+<td align='center'><div style='$ctxsave_style'>CTXSAVE</div></td>
+</tr><tr>
+<td></td>
+<td></td>
+<td align='center'><div style='$incomplete_style'>(INCOMPLETE)</div></td>
+<td></td>
+</tr/></table>
+</p>
+<p>
+<small>
+QUEUED = requests executing on the GPU<br>
+READY = runnable requests waiting for a slot on GPU<br>
+EXECUTE = requests waiting on fences and dependencies before they are runnable<br>
+CTXSAVE = GPU saving the context image<br>
+</small>
 </p>
 <p>
 Boxes are in format 'ctx-id/seqno'.
@@ -873,17 +897,31 @@ sub sortQueue {
 
 sub ctx_colour
 {
-	my ($ctx, $stage) = (@_);
+	my ($ctx, $stage, $lfac) = (@_);
 	my ($s, $l);
 	my $val;
 
 	unless ($colour_contexts) {
 		if ($stage eq 'queue') {
-			return 'lightblue;';
+			$val = 210;
+			$s = 65;
+			$l = 52;
 		} elsif ($stage eq 'ready') {
-			return 'lightgrey;';
+			$val = 0;
+			$s = 0;
+			$l = 47;
 		} elsif ($stage eq 'execute') {
-			return 'pink;';
+			$val = 346;
+			$s = 68;
+			$l = 65;
+		} elsif ($stage eq 'ctxsave') {
+			$val = 26;
+			$s = 90;
+			$l = 52;
+		} elsif ($stage eq 'incomplete') {
+			$val = 0;
+			$s = 85;
+			$l = 50;
 		}
 	} else {
 		if ($stage eq 'queue') {
@@ -895,12 +933,45 @@ sub ctx_colour
 		} elsif ($stage eq 'execute') {
 			$s = 80;
 			$l = 65;
+		} elsif ($stage eq 'ctxsave') {
+			$s = 75;
+			$l = 70;
+		} elsif ($stage eq 'incomplete') {
+			$s = 80;
+			$l = 25;
 		}
+
+		$val = int(360 / ($max_ctx - $min_ctx + 1)) * ($ctx - $min_ctx);
 	}
 
-	$val = int(360 / ($max_ctx - $min_ctx + 1)) * ($ctx - $min_ctx);
+	$l = int($l * $lfac);
 
-	return "hsl($val, $s%, $l%);";
+	return "hsl($val, $s%, $l%)";
+}
+
+sub box_style
+{
+	my ($ctx, $stage) = @_;
+	my $deg;
+
+	if ($stage eq 'queue') {
+		$deg = 90;
+	} elsif ($stage eq 'ready') {
+		$deg = 45;
+	} elsif ($stage eq 'execute') {
+		$deg = 0;
+	} elsif ($stage eq 'ctxsave') {
+		$deg = 105;
+	} elsif ($stage eq 'incomplete') {
+		$deg = 0;
+	}
+
+	return 'color: black; background: repeating-linear-gradient(' .
+		$deg . 'deg, ' .
+		ctx_colour($ctx, $stage, 1.0) . ', ' .
+		ctx_colour($ctx, $stage, 1.0) . ' 10px, ' .
+		ctx_colour($ctx, $stage, 0.90) . ' 10px, ' .
+		ctx_colour($ctx, $stage, 0.90) . ' 20px);';
 }
 
 my $i = 0;
@@ -917,8 +988,7 @@ foreach my $key (sort sortQueue keys %db) {
 	# submit to execute
 	unless (exists $skip_box{'queue'}) {
 		$skey = 2 * $max_seqno * $ctx + 2 * $seqno;
-		$style = 'color: black; background-color: ' .
-			 ctx_colour($ctx, 'queue');
+		$style = box_style($ctx, 'queue');
 		$content = "$name<br>$db{$key}->{'submit-delay'}us <small>($db{$key}->{'execute-delay'}us)</small>";
 		$startend = 'start: \'' . ts($queue) . '\', end: \'' . ts($submit) . '\'';
 		print "\t{id: $i, key: $skey, $type group: $group, subgroup: 1, subgroupOrder: 1, content: '$content', $startend, style: \'$style\'},\n";
@@ -928,8 +998,7 @@ foreach my $key (sort sortQueue keys %db) {
 	# execute to start
 	unless (exists $skip_box{'ready'}) {
 		$skey = 2 * $max_seqno * $ctx + 2 * $seqno + 1;
-		$style = 'color: black; background-color: ' .
-			 ctx_colour($ctx, 'ready');
+		$style = box_style($ctx, 'ready');
 		$content = "<small>$name<br>$db{$key}->{'execute-delay'}us</small>";
 		$startend = 'start: \'' . ts($submit) . '\', end: \'' . ts($start) . '\'';
 		print "\t{id: $i, key: $skey, $type group: $group, subgroup: 1, subgroupOrder: 2, content: '$content', $startend, style: \'$style\'},\n";
@@ -939,12 +1008,9 @@ foreach my $key (sort sortQueue keys %db) {
 	# start to user interrupt
 	unless (exists $skip_box{'execute'}) {
 		$skey = -2 * $max_seqno * $ctx - 2 * $seqno - 1;
-		if (exists $db{$key}->{'incomplete'}) {
-			$style = 'color: white; background-color: red;';
-		} else {
-			$style = 'color: black; background-color: ' .
-				  ctx_colour($ctx, 'execute');
-		}
+		$style = box_style($ctx,
+				   exists $db{$key}->{'incomplete'} ?
+				   'incomplete' : 'execute');
 		$content = "$name <small>$db{$key}->{'port'}</small>";
 		$content .= ' <small><i>???</i></small> ' if exists $db{$key}->{'incomplete'};
 		$content .= ' <small><i>++</i></small> ' if exists $db{$key}->{'no-end'};
@@ -958,7 +1024,7 @@ foreach my $key (sort sortQueue keys %db) {
 	# user interrupt to context complete
 	unless (exists $skip_box{'ctxsave'}) {
 		$skey = -2 * $max_seqno * $ctx - 2 * $seqno;
-		$style = 'color: black; background-color: orange;';
+		$style = box_style($ctx, 'ctxsave');
 		my $ctxsave = $db{$key}->{'end'} - $db{$key}->{'notify'};
 		$content = "<small>$name<br>${ctxsave}us</small>";
 		$content .= ' <small><i>???</i></small> ' if exists $db{$key}->{'incomplete'};
-- 
2.17.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 45+ messages in thread

* [igt-dev] [PATCH i-g-t 02/11] trace.pl: Improve readability of graphical timeline representation
@ 2018-07-09 13:19   ` Tvrtko Ursulin
  0 siblings, 0 replies; 45+ messages in thread
From: Tvrtko Ursulin @ 2018-07-09 13:19 UTC (permalink / raw)
  To: igt-dev; +Cc: intel-gfx, Tvrtko Ursulin

From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

We add stripes for different stages of request execution so it is easier
to follow one context in the multi-colour mode.

Vertical stripe pattern indicates pipeline "blockages" - requests waiting
for dependencies before they are runnable.

Diagonal stripes indicate runnable requests waiting for GPU time.

Horizontal strips are requests executing on the GPU.

Also use this new multi-coloured mode from media-bench.pl.

v2:
 John Harrison:
 * Mention media-bench.pl in the commit.
 * Fix HTML for single colour mode.

v3:
 * Rebase.
 * Apply stripes to legacy colouring as well.

v4:
 John Harrison:
 * Use per context colours for ctxsave and incomplete boxes.
 * Clearer timeline legend.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: John Harrison <John.C.Harrison@Intel.com>
---
 scripts/media-bench.pl |   2 +-
 scripts/trace.pl       | 112 ++++++++++++++++++++++++++++++++---------
 2 files changed, 90 insertions(+), 24 deletions(-)

diff --git a/scripts/media-bench.pl b/scripts/media-bench.pl
index c5628c7f2836..375844d9cdf6 100755
--- a/scripts/media-bench.pl
+++ b/scripts/media-bench.pl
@@ -207,7 +207,7 @@ sub trace_workload
 	show_cmd($cmd);
 	system($cmd);
 
-	$cmd = "perf script | $tracepl --html -x ctxsave -s ";
+	$cmd = "perf script | $tracepl --html -x ctxsave -s -c ";
 	$cmd .= join ' ', map("-i $_", @skip_engine);
 	$cmd .= " > ${file}.html";
 	show_cmd($cmd);
diff --git a/scripts/trace.pl b/scripts/trace.pl
index fd414f5a4b1e..1ec8b297d15e 100755
--- a/scripts/trace.pl
+++ b/scripts/trace.pl
@@ -727,9 +727,14 @@ foreach my $key (keys %reqwait) {
 say sprintf('GPU: %.2f%% idle, %.2f%% busy',
 	     $flat_busy{'gpu-idle'}, $flat_busy{'gpu-busy'}) unless $html;
 
-my $queued_colour = $colour_contexts ? 'multi-colour light' : 'blue';
-my $runnable_colour = $colour_contexts ? 'multi-colour dark' : 'grey';
-my $execute_colour = $colour_contexts ? 'multi-colour' : 'pink';
+my $timeline_text = $colour_contexts ?
+		    'Per context coloured shading like:' : 'Box shading like:';
+
+my $queued_style = box_style($min_ctx, 'queue');
+my $ready_style = box_style($min_ctx, 'ready');
+my $execute_style = box_style($min_ctx, 'execute');
+my $ctxsave_style = box_style($min_ctx, 'ctxsave');
+my $incomplete_style = box_style($min_ctx, 'incomplete');
 
 print <<ENDHTML if $html;
 <!DOCTYPE HTML>
@@ -751,9 +756,28 @@ print <<ENDHTML if $html;
 <button onclick="toggleStackSubgroups()">Toggle stacking</button>
 
 <p>
-$execute_colour = requests executing on the GPU<br>
-$runnable_colour = runnable requests waiting for a slot on GPU<br>
-$queued_colour = requests waiting on fences and dependencies before they are runnable<br>
+<b>Timeline request view:</b>
+<table>
+<tr><td colspan='4'>$timeline_text</td></tr>
+<tr>
+<td align='center'><div style='$queued_style'>QUEUED</div></td>
+<td align='center'><div style='$ready_style'>READY</div></td>
+<td align='center'><div style='$execute_style'>EXECUTE</div></td>
+<td align='center'><div style='$ctxsave_style'>CTXSAVE</div></td>
+</tr><tr>
+<td></td>
+<td></td>
+<td align='center'><div style='$incomplete_style'>(INCOMPLETE)</div></td>
+<td></td>
+</tr/></table>
+</p>
+<p>
+<small>
+QUEUED = requests executing on the GPU<br>
+READY = runnable requests waiting for a slot on GPU<br>
+EXECUTE = requests waiting on fences and dependencies before they are runnable<br>
+CTXSAVE = GPU saving the context image<br>
+</small>
 </p>
 <p>
 Boxes are in format 'ctx-id/seqno'.
@@ -873,17 +897,31 @@ sub sortQueue {
 
 sub ctx_colour
 {
-	my ($ctx, $stage) = (@_);
+	my ($ctx, $stage, $lfac) = (@_);
 	my ($s, $l);
 	my $val;
 
 	unless ($colour_contexts) {
 		if ($stage eq 'queue') {
-			return 'lightblue;';
+			$val = 210;
+			$s = 65;
+			$l = 52;
 		} elsif ($stage eq 'ready') {
-			return 'lightgrey;';
+			$val = 0;
+			$s = 0;
+			$l = 47;
 		} elsif ($stage eq 'execute') {
-			return 'pink;';
+			$val = 346;
+			$s = 68;
+			$l = 65;
+		} elsif ($stage eq 'ctxsave') {
+			$val = 26;
+			$s = 90;
+			$l = 52;
+		} elsif ($stage eq 'incomplete') {
+			$val = 0;
+			$s = 85;
+			$l = 50;
 		}
 	} else {
 		if ($stage eq 'queue') {
@@ -895,12 +933,45 @@ sub ctx_colour
 		} elsif ($stage eq 'execute') {
 			$s = 80;
 			$l = 65;
+		} elsif ($stage eq 'ctxsave') {
+			$s = 75;
+			$l = 70;
+		} elsif ($stage eq 'incomplete') {
+			$s = 80;
+			$l = 25;
 		}
+
+		$val = int(360 / ($max_ctx - $min_ctx + 1)) * ($ctx - $min_ctx);
 	}
 
-	$val = int(360 / ($max_ctx - $min_ctx + 1)) * ($ctx - $min_ctx);
+	$l = int($l * $lfac);
 
-	return "hsl($val, $s%, $l%);";
+	return "hsl($val, $s%, $l%)";
+}
+
+sub box_style
+{
+	my ($ctx, $stage) = @_;
+	my $deg;
+
+	if ($stage eq 'queue') {
+		$deg = 90;
+	} elsif ($stage eq 'ready') {
+		$deg = 45;
+	} elsif ($stage eq 'execute') {
+		$deg = 0;
+	} elsif ($stage eq 'ctxsave') {
+		$deg = 105;
+	} elsif ($stage eq 'incomplete') {
+		$deg = 0;
+	}
+
+	return 'color: black; background: repeating-linear-gradient(' .
+		$deg . 'deg, ' .
+		ctx_colour($ctx, $stage, 1.0) . ', ' .
+		ctx_colour($ctx, $stage, 1.0) . ' 10px, ' .
+		ctx_colour($ctx, $stage, 0.90) . ' 10px, ' .
+		ctx_colour($ctx, $stage, 0.90) . ' 20px);';
 }
 
 my $i = 0;
@@ -917,8 +988,7 @@ foreach my $key (sort sortQueue keys %db) {
 	# submit to execute
 	unless (exists $skip_box{'queue'}) {
 		$skey = 2 * $max_seqno * $ctx + 2 * $seqno;
-		$style = 'color: black; background-color: ' .
-			 ctx_colour($ctx, 'queue');
+		$style = box_style($ctx, 'queue');
 		$content = "$name<br>$db{$key}->{'submit-delay'}us <small>($db{$key}->{'execute-delay'}us)</small>";
 		$startend = 'start: \'' . ts($queue) . '\', end: \'' . ts($submit) . '\'';
 		print "\t{id: $i, key: $skey, $type group: $group, subgroup: 1, subgroupOrder: 1, content: '$content', $startend, style: \'$style\'},\n";
@@ -928,8 +998,7 @@ foreach my $key (sort sortQueue keys %db) {
 	# execute to start
 	unless (exists $skip_box{'ready'}) {
 		$skey = 2 * $max_seqno * $ctx + 2 * $seqno + 1;
-		$style = 'color: black; background-color: ' .
-			 ctx_colour($ctx, 'ready');
+		$style = box_style($ctx, 'ready');
 		$content = "<small>$name<br>$db{$key}->{'execute-delay'}us</small>";
 		$startend = 'start: \'' . ts($submit) . '\', end: \'' . ts($start) . '\'';
 		print "\t{id: $i, key: $skey, $type group: $group, subgroup: 1, subgroupOrder: 2, content: '$content', $startend, style: \'$style\'},\n";
@@ -939,12 +1008,9 @@ foreach my $key (sort sortQueue keys %db) {
 	# start to user interrupt
 	unless (exists $skip_box{'execute'}) {
 		$skey = -2 * $max_seqno * $ctx - 2 * $seqno - 1;
-		if (exists $db{$key}->{'incomplete'}) {
-			$style = 'color: white; background-color: red;';
-		} else {
-			$style = 'color: black; background-color: ' .
-				  ctx_colour($ctx, 'execute');
-		}
+		$style = box_style($ctx,
+				   exists $db{$key}->{'incomplete'} ?
+				   'incomplete' : 'execute');
 		$content = "$name <small>$db{$key}->{'port'}</small>";
 		$content .= ' <small><i>???</i></small> ' if exists $db{$key}->{'incomplete'};
 		$content .= ' <small><i>++</i></small> ' if exists $db{$key}->{'no-end'};
@@ -958,7 +1024,7 @@ foreach my $key (sort sortQueue keys %db) {
 	# user interrupt to context complete
 	unless (exists $skip_box{'ctxsave'}) {
 		$skey = -2 * $max_seqno * $ctx - 2 * $seqno;
-		$style = 'color: black; background-color: orange;';
+		$style = box_style($ctx, 'ctxsave');
 		my $ctxsave = $db{$key}->{'end'} - $db{$key}->{'notify'};
 		$content = "<small>$name<br>${ctxsave}us</small>";
 		$content .= ' <small><i>???</i></small> ' if exists $db{$key}->{'incomplete'};
-- 
2.17.1

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 45+ messages in thread

* [PATCH i-g-t 03/11] trace.pl: Scale timeline for better precision
  2018-07-09 13:19 ` [Intel-gfx] " Tvrtko Ursulin
@ 2018-07-09 13:19   ` Tvrtko Ursulin
  -1 siblings, 0 replies; 45+ messages in thread
From: Tvrtko Ursulin @ 2018-07-09 13:19 UTC (permalink / raw)
  To: igt-dev; +Cc: intel-gfx

From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

vis library has a limited precision compared to our trace data which
prevents zooming into the timeline and seeing the fine detail.

Scale the HTML view by a thousand to work around it.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Suggested-by: John Harrison <John.C.Harrison@Intel.com>
Cc: John Harrison <John.C.Harrison@Intel.com>
---
 scripts/trace.pl | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/scripts/trace.pl b/scripts/trace.pl
index 1ec8b297d15e..4d3e06434f05 100755
--- a/scripts/trace.pl
+++ b/scripts/trace.pl
@@ -40,6 +40,7 @@ my $trace = 0;
 my $avg_delay_stats = 0;
 my $gpu_timeline = 0;
 my $colour_contexts = 0;
+my $no_timeline_scaling = 0;
 
 my @args;
 
@@ -281,6 +282,18 @@ sub arg_colour_contexts
 	return @_;
 }
 
+sub arg_no_timeline_scaling
+{
+	return unless scalar(@_);
+
+	if ($_[0] eq '--no-timeline-scaling') {
+		shift @_;
+		$no_timeline_scaling = 1;
+	}
+
+	return @_;
+}
+
 @args = @ARGV;
 while (@args) {
 	my $left = scalar(@args);
@@ -296,6 +309,7 @@ while (@args) {
 	@args = arg_ignore_ring(@args);
 	@args = arg_skip_box(@args);
 	@args = arg_colour_contexts(@args);
+	@args = arg_no_timeline_scaling(@args);
 
 	last if $left == scalar(@args);
 }
@@ -334,6 +348,8 @@ sub ts
 	my ($us) = @_;
 	my ($d, $h, $m, $s);
 
+	$us *= 1000 unless $no_timeline_scaling;
+
 	$s = int($us / 1000000);
 	$us = $us % 1000000;
 
-- 
2.17.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 45+ messages in thread

* [igt-dev] [PATCH i-g-t 03/11] trace.pl: Scale timeline for better precision
@ 2018-07-09 13:19   ` Tvrtko Ursulin
  0 siblings, 0 replies; 45+ messages in thread
From: Tvrtko Ursulin @ 2018-07-09 13:19 UTC (permalink / raw)
  To: igt-dev; +Cc: intel-gfx, Tvrtko Ursulin

From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

vis library has a limited precision compared to our trace data which
prevents zooming into the timeline and seeing the fine detail.

Scale the HTML view by a thousand to work around it.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Suggested-by: John Harrison <John.C.Harrison@Intel.com>
Cc: John Harrison <John.C.Harrison@Intel.com>
---
 scripts/trace.pl | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/scripts/trace.pl b/scripts/trace.pl
index 1ec8b297d15e..4d3e06434f05 100755
--- a/scripts/trace.pl
+++ b/scripts/trace.pl
@@ -40,6 +40,7 @@ my $trace = 0;
 my $avg_delay_stats = 0;
 my $gpu_timeline = 0;
 my $colour_contexts = 0;
+my $no_timeline_scaling = 0;
 
 my @args;
 
@@ -281,6 +282,18 @@ sub arg_colour_contexts
 	return @_;
 }
 
+sub arg_no_timeline_scaling
+{
+	return unless scalar(@_);
+
+	if ($_[0] eq '--no-timeline-scaling') {
+		shift @_;
+		$no_timeline_scaling = 1;
+	}
+
+	return @_;
+}
+
 @args = @ARGV;
 while (@args) {
 	my $left = scalar(@args);
@@ -296,6 +309,7 @@ while (@args) {
 	@args = arg_ignore_ring(@args);
 	@args = arg_skip_box(@args);
 	@args = arg_colour_contexts(@args);
+	@args = arg_no_timeline_scaling(@args);
 
 	last if $left == scalar(@args);
 }
@@ -334,6 +348,8 @@ sub ts
 	my ($us) = @_;
 	my ($d, $h, $m, $s);
 
+	$us *= 1000 unless $no_timeline_scaling;
+
 	$s = int($us / 1000000);
 	$us = $us % 1000000;
 
-- 
2.17.1

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 45+ messages in thread

* [PATCH i-g-t 04/11] trace.pl: Put single context at single vertical slot
  2018-07-09 13:19 ` [Intel-gfx] " Tvrtko Ursulin
@ 2018-07-09 13:19   ` Tvrtko Ursulin
  -1 siblings, 0 replies; 45+ messages in thread
From: Tvrtko Ursulin @ 2018-07-09 13:19 UTC (permalink / raw)
  To: igt-dev; +Cc: intel-gfx

From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

Turn off timeline stacking in favour of putting all the boxes belonging to
a single context at the same vertical slot.

Also remove the custom sorting function in favour of correctly assigning
the subgroup id's and order which greatly speeds up the library operations.

And finally remove the 'Toggle stacking' button which never worked.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: John Harrison <John.C.Harrison@Intel.com>
---
 scripts/trace.pl | 25 ++++++-------------------
 1 file changed, 6 insertions(+), 19 deletions(-)

diff --git a/scripts/trace.pl b/scripts/trace.pl
index 4d3e06434f05..e2978e5382c2 100755
--- a/scripts/trace.pl
+++ b/scripts/trace.pl
@@ -768,9 +768,6 @@ print <<ENDHTML if $html;
   <link href="node_modules/vis//dist/vis.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-
-<button onclick="toggleStackSubgroups()">Toggle stacking</button>
-
 <p>
 <b>Timeline request view:</b>
 <table>
@@ -997,6 +994,7 @@ foreach my $key (sort sortQueue keys %db) {
 	my $submit = $queue + $db{$key}->{'submit-delay'};
 	my ($content, $style);
 	my $group = $engine_start_id + $rings{$db{$key}->{'ring'}};
+	my $subgroup = $ctx - $min_ctx;
 	my $type = ' type: \'range\',';
 	my $startend;
 	my $skey;
@@ -1007,7 +1005,7 @@ foreach my $key (sort sortQueue keys %db) {
 		$style = box_style($ctx, 'queue');
 		$content = "$name<br>$db{$key}->{'submit-delay'}us <small>($db{$key}->{'execute-delay'}us)</small>";
 		$startend = 'start: \'' . ts($queue) . '\', end: \'' . ts($submit) . '\'';
-		print "\t{id: $i, key: $skey, $type group: $group, subgroup: 1, subgroupOrder: 1, content: '$content', $startend, style: \'$style\'},\n";
+		print "\t{id: $i, key: $skey, $type group: $group, subgroup: $subgroup, subgroupOrder: $subgroup, content: '$content', $startend, style: \'$style\'},\n";
 		$i++;
 	}
 
@@ -1017,7 +1015,7 @@ foreach my $key (sort sortQueue keys %db) {
 		$style = box_style($ctx, 'ready');
 		$content = "<small>$name<br>$db{$key}->{'execute-delay'}us</small>";
 		$startend = 'start: \'' . ts($submit) . '\', end: \'' . ts($start) . '\'';
-		print "\t{id: $i, key: $skey, $type group: $group, subgroup: 1, subgroupOrder: 2, content: '$content', $startend, style: \'$style\'},\n";
+		print "\t{id: $i, key: $skey, $type group: $group, subgroup: $subgroup, subgroupOrder: $subgroup, content: '$content', $startend, style: \'$style\'},\n";
 		$i++;
 	}
 
@@ -1033,7 +1031,7 @@ foreach my $key (sort sortQueue keys %db) {
 		$content .= ' <small><i>+</i></small> ' if exists $db{$key}->{'no-notify'};
 		$content .= "<br>$db{$key}->{'duration'}us <small>($db{$key}->{'context-complete-delay'}us)</small>";
 		$startend = 'start: \'' . ts($start) . '\', end: \'' . ts($notify) . '\'';
-		print "\t{id: $i, key: $skey, $type group: $group, subgroup: 2, subgroupOrder: 3, content: '$content', $startend, style: \'$style\'},\n";
+		print "\t{id: $i, key: $skey, $type group: $group, subgroup: $subgroup, subgroupOrder: $subgroup, content: '$content', $startend, style: \'$style\'},\n";
 		$i++;
 	}
 
@@ -1047,7 +1045,7 @@ foreach my $key (sort sortQueue keys %db) {
 		$content .= ' <small><i>++</i></small> ' if exists $db{$key}->{'no-end'};
 		$content .= ' <small><i>+</i></small> ' if exists $db{$key}->{'no-notify'};
 		$startend = 'start: \'' . ts($notify) . '\', end: \'' . ts($end) . '\'';
-		print "\t{id: $i, key: $skey, $type group: $group, subgroup: 2, subgroupOrder: 4, content: '$content', $startend, style: \'$style\'},\n";
+		print "\t{id: $i, key: $skey, $type group: $group, subgroup: $subgroup, subgroupOrder: $subgroup, content: '$content', $startend, style: \'$style\'},\n";
 		$i++;
 	}
 
@@ -1090,29 +1088,18 @@ $first_ts = ts($first_ts);
 print <<ENDHTML;
   ]);
 
-  function customOrder (a, b) {
-  // order by id
-    return a.subgroupOrder - b.subgroupOrder;
-  }
-
   // Configuration for the Timeline
   var options = { groupOrder: 'content',
 		  horizontalScroll: true,
-		  stack: true,
+		  stack: false,
 		  stackSubgroups: false,
 		  zoomKey: 'ctrlKey',
 		  orientation: 'top',
-		  order: customOrder,
 		  start: '$first_ts',
 		  end: '$end_ts'};
 
   // Create a Timeline
   var timeline = new vis.Timeline(container, items, groups, options);
-
-    function toggleStackSubgroups() {
-        options.stackSubgroups = !options.stackSubgroups;
-        timeline.setOptions(options);
-    }
 ENDHTML
 
 print <<ENDHTML;
-- 
2.17.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 45+ messages in thread

* [igt-dev] [PATCH i-g-t 04/11] trace.pl: Put single context at single vertical slot
@ 2018-07-09 13:19   ` Tvrtko Ursulin
  0 siblings, 0 replies; 45+ messages in thread
From: Tvrtko Ursulin @ 2018-07-09 13:19 UTC (permalink / raw)
  To: igt-dev; +Cc: intel-gfx, Tvrtko Ursulin

From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

Turn off timeline stacking in favour of putting all the boxes belonging to
a single context at the same vertical slot.

Also remove the custom sorting function in favour of correctly assigning
the subgroup id's and order which greatly speeds up the library operations.

And finally remove the 'Toggle stacking' button which never worked.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: John Harrison <John.C.Harrison@Intel.com>
---
 scripts/trace.pl | 25 ++++++-------------------
 1 file changed, 6 insertions(+), 19 deletions(-)

diff --git a/scripts/trace.pl b/scripts/trace.pl
index 4d3e06434f05..e2978e5382c2 100755
--- a/scripts/trace.pl
+++ b/scripts/trace.pl
@@ -768,9 +768,6 @@ print <<ENDHTML if $html;
   <link href="node_modules/vis//dist/vis.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-
-<button onclick="toggleStackSubgroups()">Toggle stacking</button>
-
 <p>
 <b>Timeline request view:</b>
 <table>
@@ -997,6 +994,7 @@ foreach my $key (sort sortQueue keys %db) {
 	my $submit = $queue + $db{$key}->{'submit-delay'};
 	my ($content, $style);
 	my $group = $engine_start_id + $rings{$db{$key}->{'ring'}};
+	my $subgroup = $ctx - $min_ctx;
 	my $type = ' type: \'range\',';
 	my $startend;
 	my $skey;
@@ -1007,7 +1005,7 @@ foreach my $key (sort sortQueue keys %db) {
 		$style = box_style($ctx, 'queue');
 		$content = "$name<br>$db{$key}->{'submit-delay'}us <small>($db{$key}->{'execute-delay'}us)</small>";
 		$startend = 'start: \'' . ts($queue) . '\', end: \'' . ts($submit) . '\'';
-		print "\t{id: $i, key: $skey, $type group: $group, subgroup: 1, subgroupOrder: 1, content: '$content', $startend, style: \'$style\'},\n";
+		print "\t{id: $i, key: $skey, $type group: $group, subgroup: $subgroup, subgroupOrder: $subgroup, content: '$content', $startend, style: \'$style\'},\n";
 		$i++;
 	}
 
@@ -1017,7 +1015,7 @@ foreach my $key (sort sortQueue keys %db) {
 		$style = box_style($ctx, 'ready');
 		$content = "<small>$name<br>$db{$key}->{'execute-delay'}us</small>";
 		$startend = 'start: \'' . ts($submit) . '\', end: \'' . ts($start) . '\'';
-		print "\t{id: $i, key: $skey, $type group: $group, subgroup: 1, subgroupOrder: 2, content: '$content', $startend, style: \'$style\'},\n";
+		print "\t{id: $i, key: $skey, $type group: $group, subgroup: $subgroup, subgroupOrder: $subgroup, content: '$content', $startend, style: \'$style\'},\n";
 		$i++;
 	}
 
@@ -1033,7 +1031,7 @@ foreach my $key (sort sortQueue keys %db) {
 		$content .= ' <small><i>+</i></small> ' if exists $db{$key}->{'no-notify'};
 		$content .= "<br>$db{$key}->{'duration'}us <small>($db{$key}->{'context-complete-delay'}us)</small>";
 		$startend = 'start: \'' . ts($start) . '\', end: \'' . ts($notify) . '\'';
-		print "\t{id: $i, key: $skey, $type group: $group, subgroup: 2, subgroupOrder: 3, content: '$content', $startend, style: \'$style\'},\n";
+		print "\t{id: $i, key: $skey, $type group: $group, subgroup: $subgroup, subgroupOrder: $subgroup, content: '$content', $startend, style: \'$style\'},\n";
 		$i++;
 	}
 
@@ -1047,7 +1045,7 @@ foreach my $key (sort sortQueue keys %db) {
 		$content .= ' <small><i>++</i></small> ' if exists $db{$key}->{'no-end'};
 		$content .= ' <small><i>+</i></small> ' if exists $db{$key}->{'no-notify'};
 		$startend = 'start: \'' . ts($notify) . '\', end: \'' . ts($end) . '\'';
-		print "\t{id: $i, key: $skey, $type group: $group, subgroup: 2, subgroupOrder: 4, content: '$content', $startend, style: \'$style\'},\n";
+		print "\t{id: $i, key: $skey, $type group: $group, subgroup: $subgroup, subgroupOrder: $subgroup, content: '$content', $startend, style: \'$style\'},\n";
 		$i++;
 	}
 
@@ -1090,29 +1088,18 @@ $first_ts = ts($first_ts);
 print <<ENDHTML;
   ]);
 
-  function customOrder (a, b) {
-  // order by id
-    return a.subgroupOrder - b.subgroupOrder;
-  }
-
   // Configuration for the Timeline
   var options = { groupOrder: 'content',
 		  horizontalScroll: true,
-		  stack: true,
+		  stack: false,
 		  stackSubgroups: false,
 		  zoomKey: 'ctrlKey',
 		  orientation: 'top',
-		  order: customOrder,
 		  start: '$first_ts',
 		  end: '$end_ts'};
 
   // Create a Timeline
   var timeline = new vis.Timeline(container, items, groups, options);
-
-    function toggleStackSubgroups() {
-        options.stackSubgroups = !options.stackSubgroups;
-        timeline.setOptions(options);
-    }
 ENDHTML
 
 print <<ENDHTML;
-- 
2.17.1

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 45+ messages in thread

* [PATCH i-g-t 05/11] trace.pl: Fix HTML timestamp generation
  2018-07-09 13:19 ` [Intel-gfx] " Tvrtko Ursulin
@ 2018-07-09 13:19   ` Tvrtko Ursulin
  -1 siblings, 0 replies; 45+ messages in thread
From: Tvrtko Ursulin @ 2018-07-09 13:19 UTC (permalink / raw)
  To: igt-dev; +Cc: intel-gfx

From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

Now that we scale timestamps to get better timeline granularity, the hacky
hand rolled micro-second time to HTML date conversion does no longer cut
it.

Use perl built-in gmtime to handle things properly.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: John Harrison <John.C.Harrison@Intel.com>
---
 scripts/trace.pl | 15 ++++-----------
 1 file changed, 4 insertions(+), 11 deletions(-)

diff --git a/scripts/trace.pl b/scripts/trace.pl
index e2978e5382c2..aeaf2392162e 100755
--- a/scripts/trace.pl
+++ b/scripts/trace.pl
@@ -346,24 +346,17 @@ sub sanitize_ctx
 sub ts
 {
 	my ($us) = @_;
-	my ($d, $h, $m, $s);
+	my ($y, $mo, $d, $h, $m, $s);
 
 	$us *= 1000 unless $no_timeline_scaling;
 
 	$s = int($us / 1000000);
 	$us = $us % 1000000;
 
-	$m = int($s / 60);
-	$s = $s % 60;
+	($s, $m, $h, $d, $mo, $y) = gmtime($s);
 
-	$h = int($m / 60);
-	$m = $m % 60;
-
-	$d = 1 + int($h / 24);
-	$h = $h % 24;
-
-	return sprintf('2017-01-%02u %02u:%02u:%02u.%06u',
-		       int($d), int($h), int($m), int($s), int($us));
+	return sprintf('%04u-%02u-%02u %02u:%02u:%02u.%06u',
+		        1970 + $y, 1 + $mo, $d, $h, $m, $s, int($us));
 }
 
 # Main input loop - parse lines and build the internal representation of the
-- 
2.17.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 45+ messages in thread

* [igt-dev] [PATCH i-g-t 05/11] trace.pl: Fix HTML timestamp generation
@ 2018-07-09 13:19   ` Tvrtko Ursulin
  0 siblings, 0 replies; 45+ messages in thread
From: Tvrtko Ursulin @ 2018-07-09 13:19 UTC (permalink / raw)
  To: igt-dev; +Cc: intel-gfx, Tvrtko Ursulin

From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

Now that we scale timestamps to get better timeline granularity, the hacky
hand rolled micro-second time to HTML date conversion does no longer cut
it.

Use perl built-in gmtime to handle things properly.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: John Harrison <John.C.Harrison@Intel.com>
---
 scripts/trace.pl | 15 ++++-----------
 1 file changed, 4 insertions(+), 11 deletions(-)

diff --git a/scripts/trace.pl b/scripts/trace.pl
index e2978e5382c2..aeaf2392162e 100755
--- a/scripts/trace.pl
+++ b/scripts/trace.pl
@@ -346,24 +346,17 @@ sub sanitize_ctx
 sub ts
 {
 	my ($us) = @_;
-	my ($d, $h, $m, $s);
+	my ($y, $mo, $d, $h, $m, $s);
 
 	$us *= 1000 unless $no_timeline_scaling;
 
 	$s = int($us / 1000000);
 	$us = $us % 1000000;
 
-	$m = int($s / 60);
-	$s = $s % 60;
+	($s, $m, $h, $d, $mo, $y) = gmtime($s);
 
-	$h = int($m / 60);
-	$m = $m % 60;
-
-	$d = 1 + int($h / 24);
-	$h = $h % 24;
-
-	return sprintf('2017-01-%02u %02u:%02u:%02u.%06u',
-		       int($d), int($h), int($m), int($s), int($us));
+	return sprintf('%04u-%02u-%02u %02u:%02u:%02u.%06u',
+		        1970 + $y, 1 + $mo, $d, $h, $m, $s, int($us));
 }
 
 # Main input loop - parse lines and build the internal representation of the
-- 
2.17.1

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 45+ messages in thread

* [PATCH i-g-t 06/11] trace.pl: Improve context colouring for large context id's
  2018-07-09 13:19 ` [Intel-gfx] " Tvrtko Ursulin
@ 2018-07-09 13:19   ` Tvrtko Ursulin
  -1 siblings, 0 replies; 45+ messages in thread
From: Tvrtko Ursulin @ 2018-07-09 13:19 UTC (permalink / raw)
  To: igt-dev; +Cc: intel-gfx

From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

John reports that on a long runnning systems the huge disparity between
kernel context and user context id's causes all interesting colours to be
clustered too close together.

Fix this by assigning colours to seen contexts instead of basing purely
on context id's.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Suggested-by: John Harrison <John.C.Harrison@Intel.com>
Cc: John Harrison <John.C.Harrison@Intel.com>
---
 scripts/trace.pl | 25 ++++++++++++++++++++-----
 1 file changed, 20 insertions(+), 5 deletions(-)

diff --git a/scripts/trace.pl b/scripts/trace.pl
index aeaf2392162e..60a8e441c1d9 100755
--- a/scripts/trace.pl
+++ b/scripts/trace.pl
@@ -336,7 +336,7 @@ sub sanitize_ctx
 {
 	my ($ctx, $ring) = @_;
 
-	if (exists $ctxdb{$ctx}) {
+	if (exists $ctxdb{$ctx} and $ctxdb{$ctx} > 1) {
 		return $ctx . '.' . $ctxdb{$ctx};
 	} else {
 		return $ctx;
@@ -425,6 +425,8 @@ while (<>) {
 			$ctxdb{$orig_ctx}++;
 			$ctx = sanitize_ctx($orig_ctx, $ring);
 			$key = db_key($ring, $ctx, $seqno);
+		} else {
+			$ctxdb{$orig_ctx} = 1;
 		}
 
 		$queue{$key} = $time;
@@ -592,7 +594,7 @@ foreach my $key (@sorted_keys) {
 
 my $last_ts = 0;
 my $first_ts;
-my ($min_ctx, $max_ctx);
+my $min_ctx;
 
 foreach my $key (@sorted_keys) {
 	my $ring = $db{$key}->{'ring'};
@@ -604,8 +606,6 @@ foreach my $key (@sorted_keys) {
 	$last_ts = $end if $end > $last_ts;
 	$min_ctx = $db{$key}->{'ctx'} if not defined $min_ctx or
 					 $db{$key}->{'ctx'} < $min_ctx;
-	$max_ctx = $db{$key}->{'ctx'} if not defined $max_ctx or
-					 $db{$key}->{'ctx'} > $max_ctx;
 
 	$db{$key}->{'context-complete-delay'} = $end - $notify;
 	$db{$key}->{'execute-delay'} = $start - $db{$key}->{'submit'};
@@ -739,6 +739,21 @@ say sprintf('GPU: %.2f%% idle, %.2f%% busy',
 my $timeline_text = $colour_contexts ?
 		    'Per context coloured shading like:' : 'Box shading like:';
 
+my %ctx_colours;
+
+sub generate_ctx_colours
+{
+	my $num_ctx = keys %ctxdb;
+	my $i = 0;
+
+	foreach my $ctx (sort keys %ctxdb) {
+		$ctx_colours{$ctx} = int(360 / $num_ctx * $i++);
+	}
+}
+
+
+generate_ctx_colours() if $html and $colour_contexts;
+
 my $queued_style = box_style($min_ctx, 'queue');
 my $ready_style = box_style($min_ctx, 'ready');
 my $execute_style = box_style($min_ctx, 'execute');
@@ -947,7 +962,7 @@ sub ctx_colour
 			$l = 25;
 		}
 
-		$val = int(360 / ($max_ctx - $min_ctx + 1)) * ($ctx - $min_ctx);
+		$val = $ctx_colours{$ctx};
 	}
 
 	$l = int($l * $lfac);
-- 
2.17.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 45+ messages in thread

* [igt-dev] [PATCH i-g-t 06/11] trace.pl: Improve context colouring for large context id's
@ 2018-07-09 13:19   ` Tvrtko Ursulin
  0 siblings, 0 replies; 45+ messages in thread
From: Tvrtko Ursulin @ 2018-07-09 13:19 UTC (permalink / raw)
  To: igt-dev; +Cc: intel-gfx, Tvrtko Ursulin

From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

John reports that on a long runnning systems the huge disparity between
kernel context and user context id's causes all interesting colours to be
clustered too close together.

Fix this by assigning colours to seen contexts instead of basing purely
on context id's.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Suggested-by: John Harrison <John.C.Harrison@Intel.com>
Cc: John Harrison <John.C.Harrison@Intel.com>
---
 scripts/trace.pl | 25 ++++++++++++++++++++-----
 1 file changed, 20 insertions(+), 5 deletions(-)

diff --git a/scripts/trace.pl b/scripts/trace.pl
index aeaf2392162e..60a8e441c1d9 100755
--- a/scripts/trace.pl
+++ b/scripts/trace.pl
@@ -336,7 +336,7 @@ sub sanitize_ctx
 {
 	my ($ctx, $ring) = @_;
 
-	if (exists $ctxdb{$ctx}) {
+	if (exists $ctxdb{$ctx} and $ctxdb{$ctx} > 1) {
 		return $ctx . '.' . $ctxdb{$ctx};
 	} else {
 		return $ctx;
@@ -425,6 +425,8 @@ while (<>) {
 			$ctxdb{$orig_ctx}++;
 			$ctx = sanitize_ctx($orig_ctx, $ring);
 			$key = db_key($ring, $ctx, $seqno);
+		} else {
+			$ctxdb{$orig_ctx} = 1;
 		}
 
 		$queue{$key} = $time;
@@ -592,7 +594,7 @@ foreach my $key (@sorted_keys) {
 
 my $last_ts = 0;
 my $first_ts;
-my ($min_ctx, $max_ctx);
+my $min_ctx;
 
 foreach my $key (@sorted_keys) {
 	my $ring = $db{$key}->{'ring'};
@@ -604,8 +606,6 @@ foreach my $key (@sorted_keys) {
 	$last_ts = $end if $end > $last_ts;
 	$min_ctx = $db{$key}->{'ctx'} if not defined $min_ctx or
 					 $db{$key}->{'ctx'} < $min_ctx;
-	$max_ctx = $db{$key}->{'ctx'} if not defined $max_ctx or
-					 $db{$key}->{'ctx'} > $max_ctx;
 
 	$db{$key}->{'context-complete-delay'} = $end - $notify;
 	$db{$key}->{'execute-delay'} = $start - $db{$key}->{'submit'};
@@ -739,6 +739,21 @@ say sprintf('GPU: %.2f%% idle, %.2f%% busy',
 my $timeline_text = $colour_contexts ?
 		    'Per context coloured shading like:' : 'Box shading like:';
 
+my %ctx_colours;
+
+sub generate_ctx_colours
+{
+	my $num_ctx = keys %ctxdb;
+	my $i = 0;
+
+	foreach my $ctx (sort keys %ctxdb) {
+		$ctx_colours{$ctx} = int(360 / $num_ctx * $i++);
+	}
+}
+
+
+generate_ctx_colours() if $html and $colour_contexts;
+
 my $queued_style = box_style($min_ctx, 'queue');
 my $ready_style = box_style($min_ctx, 'ready');
 my $execute_style = box_style($min_ctx, 'execute');
@@ -947,7 +962,7 @@ sub ctx_colour
 			$l = 25;
 		}
 
-		$val = int(360 / ($max_ctx - $min_ctx + 1)) * ($ctx - $min_ctx);
+		$val = $ctx_colours{$ctx};
 	}
 
 	$l = int($l * $lfac);
-- 
2.17.1

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 45+ messages in thread

* [PATCH i-g-t 07/11] trace.pl: Fix engine busy accounting in split mode
  2018-07-09 13:19 ` [Intel-gfx] " Tvrtko Ursulin
@ 2018-07-09 13:20   ` Tvrtko Ursulin
  -1 siblings, 0 replies; 45+ messages in thread
From: Tvrtko Ursulin @ 2018-07-09 13:20 UTC (permalink / raw)
  To: igt-dev; +Cc: intel-gfx

From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

In split mode all requests have to be added up since they were previously
re-arranged so there is no overlap.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: John Harrison <John.C.Harrison@intel.com>
---
 scripts/trace.pl | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/scripts/trace.pl b/scripts/trace.pl
index 60a8e441c1d9..52372e224da5 100755
--- a/scripts/trace.pl
+++ b/scripts/trace.pl
@@ -612,7 +612,8 @@ foreach my $key (@sorted_keys) {
 	$db{$key}->{'submit-delay'} = $db{$key}->{'submit'} - $db{$key}->{'queue'};
 	$db{$key}->{'duration'} = $notify - $start;
 
-	$running{$ring} += $end - $start unless exists $db{$key}->{'no-end'};
+	$running{$ring} += $end - $start if $correct_durations or
+					    not exists $db{$key}->{'no-end'};
 	$runnable{$ring} += $db{$key}->{'execute-delay'};
 	$queued{$ring} += $start - $db{$key}->{'execute-delay'} - $db{$key}->{'queue'};
 
-- 
2.17.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 45+ messages in thread

* [igt-dev] [PATCH i-g-t 07/11] trace.pl: Fix engine busy accounting in split mode
@ 2018-07-09 13:20   ` Tvrtko Ursulin
  0 siblings, 0 replies; 45+ messages in thread
From: Tvrtko Ursulin @ 2018-07-09 13:20 UTC (permalink / raw)
  To: igt-dev; +Cc: intel-gfx, Tvrtko Ursulin

From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

In split mode all requests have to be added up since they were previously
re-arranged so there is no overlap.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: John Harrison <John.C.Harrison@intel.com>
---
 scripts/trace.pl | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/scripts/trace.pl b/scripts/trace.pl
index 60a8e441c1d9..52372e224da5 100755
--- a/scripts/trace.pl
+++ b/scripts/trace.pl
@@ -612,7 +612,8 @@ foreach my $key (@sorted_keys) {
 	$db{$key}->{'submit-delay'} = $db{$key}->{'submit'} - $db{$key}->{'queue'};
 	$db{$key}->{'duration'} = $notify - $start;
 
-	$running{$ring} += $end - $start unless exists $db{$key}->{'no-end'};
+	$running{$ring} += $end - $start if $correct_durations or
+					    not exists $db{$key}->{'no-end'};
 	$runnable{$ring} += $db{$key}->{'execute-delay'};
 	$queued{$ring} += $start - $db{$key}->{'execute-delay'} - $db{$key}->{'queue'};
 
-- 
2.17.1

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 45+ messages in thread

* [PATCH i-g-t 08/11] trace.pl: Context save only applies to last request of a bunch
  2018-07-09 13:19 ` [Intel-gfx] " Tvrtko Ursulin
@ 2018-07-09 13:20   ` Tvrtko Ursulin
  -1 siblings, 0 replies; 45+ messages in thread
From: Tvrtko Ursulin @ 2018-07-09 13:20 UTC (permalink / raw)
  To: igt-dev; +Cc: intel-gfx

From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

Skip accounting the context save time for anything but the last request of
the coalesced bunch, and also skip drawing those boxes on the timeline.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
---
 scripts/trace.pl | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/scripts/trace.pl b/scripts/trace.pl
index 52372e224da5..379f6edce457 100755
--- a/scripts/trace.pl
+++ b/scripts/trace.pl
@@ -607,7 +607,11 @@ foreach my $key (@sorted_keys) {
 	$min_ctx = $db{$key}->{'ctx'} if not defined $min_ctx or
 					 $db{$key}->{'ctx'} < $min_ctx;
 
-	$db{$key}->{'context-complete-delay'} = $end - $notify;
+	unless (exists $db{$key}->{'no-end'}) {
+		$db{$key}->{'context-complete-delay'} = $end - $notify;
+	} else {
+		$db{$key}->{'context-complete-delay'} = 0;
+	}
 	$db{$key}->{'execute-delay'} = $start - $db{$key}->{'submit'};
 	$db{$key}->{'submit-delay'} = $db{$key}->{'submit'} - $db{$key}->{'queue'};
 	$db{$key}->{'duration'} = $notify - $start;
@@ -624,7 +628,7 @@ foreach my $key (@sorted_keys) {
 
 	$submit_avg{$ring} += $db{$key}->{'submit-delay'};
 	$execute_avg{$ring} += $db{$key}->{'execute-delay'};
-	$ctxsave_avg{$ring} += $end - $notify;
+	$ctxsave_avg{$ring} += $db{$key}->{'context-complete-delay'};
 }
 
 foreach my $ring (sort keys %batch_avg) {
@@ -1045,7 +1049,7 @@ foreach my $key (sort sortQueue keys %db) {
 	}
 
 	# user interrupt to context complete
-	unless (exists $skip_box{'ctxsave'}) {
+	unless (exists $skip_box{'ctxsave'} or exists $db{$key}->{'no-end'}) {
 		$skey = -2 * $max_seqno * $ctx - 2 * $seqno;
 		$style = box_style($ctx, 'ctxsave');
 		my $ctxsave = $db{$key}->{'end'} - $db{$key}->{'notify'};
-- 
2.17.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 45+ messages in thread

* [igt-dev] [PATCH i-g-t 08/11] trace.pl: Context save only applies to last request of a bunch
@ 2018-07-09 13:20   ` Tvrtko Ursulin
  0 siblings, 0 replies; 45+ messages in thread
From: Tvrtko Ursulin @ 2018-07-09 13:20 UTC (permalink / raw)
  To: igt-dev; +Cc: intel-gfx, Tvrtko Ursulin

From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

Skip accounting the context save time for anything but the last request of
the coalesced bunch, and also skip drawing those boxes on the timeline.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
---
 scripts/trace.pl | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/scripts/trace.pl b/scripts/trace.pl
index 52372e224da5..379f6edce457 100755
--- a/scripts/trace.pl
+++ b/scripts/trace.pl
@@ -607,7 +607,11 @@ foreach my $key (@sorted_keys) {
 	$min_ctx = $db{$key}->{'ctx'} if not defined $min_ctx or
 					 $db{$key}->{'ctx'} < $min_ctx;
 
-	$db{$key}->{'context-complete-delay'} = $end - $notify;
+	unless (exists $db{$key}->{'no-end'}) {
+		$db{$key}->{'context-complete-delay'} = $end - $notify;
+	} else {
+		$db{$key}->{'context-complete-delay'} = 0;
+	}
 	$db{$key}->{'execute-delay'} = $start - $db{$key}->{'submit'};
 	$db{$key}->{'submit-delay'} = $db{$key}->{'submit'} - $db{$key}->{'queue'};
 	$db{$key}->{'duration'} = $notify - $start;
@@ -624,7 +628,7 @@ foreach my $key (@sorted_keys) {
 
 	$submit_avg{$ring} += $db{$key}->{'submit-delay'};
 	$execute_avg{$ring} += $db{$key}->{'execute-delay'};
-	$ctxsave_avg{$ring} += $end - $notify;
+	$ctxsave_avg{$ring} += $db{$key}->{'context-complete-delay'};
 }
 
 foreach my $ring (sort keys %batch_avg) {
@@ -1045,7 +1049,7 @@ foreach my $key (sort sortQueue keys %db) {
 	}
 
 	# user interrupt to context complete
-	unless (exists $skip_box{'ctxsave'}) {
+	unless (exists $skip_box{'ctxsave'} or exists $db{$key}->{'no-end'}) {
 		$skey = -2 * $max_seqno * $ctx - 2 * $seqno;
 		$style = box_style($ctx, 'ctxsave');
 		my $ctxsave = $db{$key}->{'end'} - $db{$key}->{'notify'};
-- 
2.17.1

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 45+ messages in thread

* [PATCH i-g-t 09/11] trace.pl: Fix incomplete request handling
  2018-07-09 13:19 ` [Intel-gfx] " Tvrtko Ursulin
@ 2018-07-09 13:20   ` Tvrtko Ursulin
  -1 siblings, 0 replies; 45+ messages in thread
From: Tvrtko Ursulin @ 2018-07-09 13:20 UTC (permalink / raw)
  To: igt-dev; +Cc: intel-gfx

From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

Incomplete requests (no notify, no context complete) have to be corrected
by looking at the engine timeline, and not the sorted-by-start-time view
as was previously used.

Per-engine timelines are generated on demand and cached for later use.

v2: Find end of current context on the engine timeline instead of just
    using the next request for adjusting the incomplete start time.

v3: Improve scaling with large datasets by only walking each engine
    timeline once and some caching. (John Harrison)

v4:
 * Fix logic fail from v3.
 * Refactor the code a bit to separate the stages better.
 * Do not account batches with unknown duration in avg stats.
 * Handle two user interrupts with the same seqno.
 * Handle user interrupt arriving after request_out.

v5:
 * Update for class:instance.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: John Harrison <John.C.Harrison@intel.com>
---
 scripts/trace.pl | 163 +++++++++++++++++++++++++++++++----------------
 1 file changed, 108 insertions(+), 55 deletions(-)

diff --git a/scripts/trace.pl b/scripts/trace.pl
index 379f6edce457..6379dace5743 100755
--- a/scripts/trace.pl
+++ b/scripts/trace.pl
@@ -462,16 +462,11 @@ while (<>) {
 		die if exists $db{$key}->{'end'};
 
 		$db{$key}->{'end'} = $time;
-		if (exists $notify{$gkey}) {
-			$db{$key}->{'notify'} = $notify{$gkey};
-		} else {
-			# No notify so far. Maybe it will arrive later which
-			# will be handled in the sanitation loop below.
-			$db{$key}->{'notify'} = $db{$key}->{'end'};
-			$db{$key}->{'no-notify'} = 1;
-		}
+		$db{$key}->{'notify'} = $notify{$gkey} if exists $notify{$gkey};
 	} elsif ($tp_name eq 'i915:intel_engine_notify:') {
-		$notify{global_key($ring, $seqno)} = $time;
+		my $gkey = global_key($ring, $seqno);
+
+		$notify{$gkey} = $time unless exists $notify{$gkey};
 	} elsif ($tp_name eq 'i915:intel_gpu_freq_change:') {
 		push @freqs, [$prev_freq_ts, $time, $prev_freq] if $prev_freq;
 		$prev_freq_ts = $time;
@@ -484,66 +479,116 @@ while (<>) {
 my $max_seqno = 0;
 foreach my $key (keys %db) {
 	my $gkey = global_key($db{$key}->{'ring'}, $db{$key}->{'global'});
-	my $notify = $notify{$gkey};
 
 	die unless exists $db{$key}->{'start'};
 
 	$max_seqno = $db{$key}->{'seqno'} if $db{$key}->{'seqno'} > $max_seqno;
 
-	unless (exists $db{$key}->{'end'}) {
-		# Context complete not received.
-		$db{$key}->{'no-end'} = 1;
+	# Notify arrived after context complete?
+	$db{$key}->{'notify'} = $notify{$gkey} if not exists $db{$key}->{'notify'}
+						  and exists $notify{$gkey};
 
-		if (defined($notify)) {
-			# No context complete due req merging - use notify.
-			$db{$key}->{'notify'} = $notify;
-			$db{$key}->{'end'} = $notify;
-		} else {
-			# No notify and no context complete - give up for now.
-			$db{$key}->{'incomplete'} = 1;
-		}
-	} else {
-		# Notify arrived after context complete.
-		if (exists $db{$key}->{'no-notify'} and defined($notify)) {
-			delete $db{$key}->{'no-notify'};
-			$db{$key}->{'notify'} = $notify;
-		}
+	# No notify but we have end?
+	$db{$key}->{'notify'} = $db{$key}->{'end'} if exists $db{$key}->{'end'} and
+						      not exists $db{$key}->{'notify'};
+
+	# If user interrupt arrived out of order push it back to be no later
+	# than request out.
+	if (exists $db{$key}->{'end'} and exists $db{$key}->{'notify'} and
+	    $db{$key}->{'notify'} > $db{$key}->{'end'}) {
+		$db{$key}->{'notify'} = $db{$key}->{'end'};
 	}
 }
 
-# Fix up incompletes
 my $key_count = scalar(keys %db);
-foreach my $key (keys %db) {
-	next unless exists $db{$key}->{'incomplete'};
 
-	# End the incomplete batch at the time next one starts
-	my $ring = $db{$key}->{'ring'};
-	my $ctx = $db{$key}->{'ctx'};
-	my $seqno = $db{$key}->{'seqno'};
-	my $next_key;
-	my $i = 1;
-	my $end;
-
-	do {
-		$next_key = db_key($ring, $ctx, $seqno + $i);
-		$i++;
-	} until ((exists $db{$next_key} and not exists $db{$next_key}->{'incomplete'})
-		 or $i > $key_count);  # ugly stop hack
+my %engine_timelines;
 
-	if (exists $db{$next_key}) {
-		$end = $db{$next_key}->{'end'};
-	} else {
-		# No info at all, fake it:
-		$end = $db{$key}->{'start'} + 999;
-	}
+sub sortEngine {
+	my $as = $db{$a}->{'global'};
+	my $bs = $db{$b}->{'global'};
+	my $val;
+
+	$val = $as <=> $bs;
 
-	$db{$key}->{'notify'} = $end;
-	$db{$key}->{'end'} = $end;
+	die if $val == 0;
+
+	return $val;
 }
 
-# GPU time accounting
-my (%running, %runnable, %queued, %batch_avg, %batch_total_avg, %batch_count);
-my (%submit_avg, %execute_avg, %ctxsave_avg);
+sub get_engine_timeline {
+	my ($ring) = @_;
+	my @timeline;
+
+	return $engine_timelines{$ring} if exists $engine_timelines{$ring};
+
+	@timeline = grep { $db{$_}->{'ring'} eq $ring } keys %db;
+	# FIXME seqno restart
+	@timeline = sort sortEngine @timeline;
+
+	$engine_timelines{$ring} = \@timeline;
+
+	return \@timeline;
+}
+
+# Fix up coalesced requests by ending them either when the following same
+# context request with known end ends, or when a different context starts.
+foreach my $gid (sort keys %rings) {
+	my $ring = $ringmap{$rings{$gid}};
+	my $timeline = get_engine_timeline($ring);
+	my $last_complete = -1;
+	my $last_ctx = -1;
+	my $complete;
+
+	foreach my $pos (0..$#{$timeline}) {
+		my $key = @{$timeline}[$pos];
+		my ($ctx, $end);
+
+		next if exists $db{$key}->{'end'};
+
+		$db{$key}->{'no-end'} = 1;
+		$ctx = $db{$key}->{'ctx'};
+
+		if ($pos > $last_complete or $ctx != $last_ctx) {
+			my $next = $pos;
+
+			undef $complete;
+
+			while ($next < $#{$timeline}) {
+				my $next_key = ${$timeline}[++$next];
+				if ($ctx == $db{$next_key}->{'ctx'} and
+				    exists $db{$next_key}->{'end'}) {
+					$last_ctx = $db{$next_key}->{'ctx'};
+					$last_complete = $next;
+					$complete = $next_key;
+					last;
+				}
+			}
+		}
+
+		if (defined $complete) {
+			if ($ctx == $db{$complete}->{'ctx'}) {
+				$end = $db{$complete}->{'end'};
+			} else {
+				$end = $db{$complete}->{'start'};
+			}
+		} else {
+			# No next submission. Use notify if available or give up.
+			if (exists $db{$key}->{'notify'}) {
+				$end = $db{$key}->{'notify'};
+			} else {
+				$end = $db{$key}->{'start'};
+				$db{$key}->{'incomplete'} = 1;
+			}
+		}
+
+		unless (exists $db{$key}->{'notify'}) {
+			$db{$key}->{'notify'} = $end;
+			$db{$key}->{'no-notify'} = 1;
+		}
+		$db{$key}->{'end'} = $end;
+	}
+}
 
 sub sortStart {
 	my $as = $db{$a}->{'start'};
@@ -592,6 +637,10 @@ foreach my $key (@sorted_keys) {
 
 @sorted_keys = sort sortStart keys %db if $re_sort;
 
+# GPU time accounting
+my (%running, %runnable, %queued, %batch_avg, %batch_total_avg, %batch_count);
+my (%submit_avg, %execute_avg, %ctxsave_avg);
+
 my $last_ts = 0;
 my $first_ts;
 my $min_ctx;
@@ -614,7 +663,11 @@ foreach my $key (@sorted_keys) {
 	}
 	$db{$key}->{'execute-delay'} = $start - $db{$key}->{'submit'};
 	$db{$key}->{'submit-delay'} = $db{$key}->{'submit'} - $db{$key}->{'queue'};
-	$db{$key}->{'duration'} = $notify - $start;
+	unless (exists $db{$key}->{'no-notify'}) {
+		$db{$key}->{'duration'} = $notify - $start;
+	} else {
+		$db{$key}->{'duration'} = 0;
+	}
 
 	$running{$ring} += $end - $start if $correct_durations or
 					    not exists $db{$key}->{'no-end'};
-- 
2.17.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 45+ messages in thread

* [igt-dev] [PATCH i-g-t 09/11] trace.pl: Fix incomplete request handling
@ 2018-07-09 13:20   ` Tvrtko Ursulin
  0 siblings, 0 replies; 45+ messages in thread
From: Tvrtko Ursulin @ 2018-07-09 13:20 UTC (permalink / raw)
  To: igt-dev; +Cc: intel-gfx, Tvrtko Ursulin

From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

Incomplete requests (no notify, no context complete) have to be corrected
by looking at the engine timeline, and not the sorted-by-start-time view
as was previously used.

Per-engine timelines are generated on demand and cached for later use.

v2: Find end of current context on the engine timeline instead of just
    using the next request for adjusting the incomplete start time.

v3: Improve scaling with large datasets by only walking each engine
    timeline once and some caching. (John Harrison)

v4:
 * Fix logic fail from v3.
 * Refactor the code a bit to separate the stages better.
 * Do not account batches with unknown duration in avg stats.
 * Handle two user interrupts with the same seqno.
 * Handle user interrupt arriving after request_out.

v5:
 * Update for class:instance.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: John Harrison <John.C.Harrison@intel.com>
---
 scripts/trace.pl | 163 +++++++++++++++++++++++++++++++----------------
 1 file changed, 108 insertions(+), 55 deletions(-)

diff --git a/scripts/trace.pl b/scripts/trace.pl
index 379f6edce457..6379dace5743 100755
--- a/scripts/trace.pl
+++ b/scripts/trace.pl
@@ -462,16 +462,11 @@ while (<>) {
 		die if exists $db{$key}->{'end'};
 
 		$db{$key}->{'end'} = $time;
-		if (exists $notify{$gkey}) {
-			$db{$key}->{'notify'} = $notify{$gkey};
-		} else {
-			# No notify so far. Maybe it will arrive later which
-			# will be handled in the sanitation loop below.
-			$db{$key}->{'notify'} = $db{$key}->{'end'};
-			$db{$key}->{'no-notify'} = 1;
-		}
+		$db{$key}->{'notify'} = $notify{$gkey} if exists $notify{$gkey};
 	} elsif ($tp_name eq 'i915:intel_engine_notify:') {
-		$notify{global_key($ring, $seqno)} = $time;
+		my $gkey = global_key($ring, $seqno);
+
+		$notify{$gkey} = $time unless exists $notify{$gkey};
 	} elsif ($tp_name eq 'i915:intel_gpu_freq_change:') {
 		push @freqs, [$prev_freq_ts, $time, $prev_freq] if $prev_freq;
 		$prev_freq_ts = $time;
@@ -484,66 +479,116 @@ while (<>) {
 my $max_seqno = 0;
 foreach my $key (keys %db) {
 	my $gkey = global_key($db{$key}->{'ring'}, $db{$key}->{'global'});
-	my $notify = $notify{$gkey};
 
 	die unless exists $db{$key}->{'start'};
 
 	$max_seqno = $db{$key}->{'seqno'} if $db{$key}->{'seqno'} > $max_seqno;
 
-	unless (exists $db{$key}->{'end'}) {
-		# Context complete not received.
-		$db{$key}->{'no-end'} = 1;
+	# Notify arrived after context complete?
+	$db{$key}->{'notify'} = $notify{$gkey} if not exists $db{$key}->{'notify'}
+						  and exists $notify{$gkey};
 
-		if (defined($notify)) {
-			# No context complete due req merging - use notify.
-			$db{$key}->{'notify'} = $notify;
-			$db{$key}->{'end'} = $notify;
-		} else {
-			# No notify and no context complete - give up for now.
-			$db{$key}->{'incomplete'} = 1;
-		}
-	} else {
-		# Notify arrived after context complete.
-		if (exists $db{$key}->{'no-notify'} and defined($notify)) {
-			delete $db{$key}->{'no-notify'};
-			$db{$key}->{'notify'} = $notify;
-		}
+	# No notify but we have end?
+	$db{$key}->{'notify'} = $db{$key}->{'end'} if exists $db{$key}->{'end'} and
+						      not exists $db{$key}->{'notify'};
+
+	# If user interrupt arrived out of order push it back to be no later
+	# than request out.
+	if (exists $db{$key}->{'end'} and exists $db{$key}->{'notify'} and
+	    $db{$key}->{'notify'} > $db{$key}->{'end'}) {
+		$db{$key}->{'notify'} = $db{$key}->{'end'};
 	}
 }
 
-# Fix up incompletes
 my $key_count = scalar(keys %db);
-foreach my $key (keys %db) {
-	next unless exists $db{$key}->{'incomplete'};
 
-	# End the incomplete batch at the time next one starts
-	my $ring = $db{$key}->{'ring'};
-	my $ctx = $db{$key}->{'ctx'};
-	my $seqno = $db{$key}->{'seqno'};
-	my $next_key;
-	my $i = 1;
-	my $end;
-
-	do {
-		$next_key = db_key($ring, $ctx, $seqno + $i);
-		$i++;
-	} until ((exists $db{$next_key} and not exists $db{$next_key}->{'incomplete'})
-		 or $i > $key_count);  # ugly stop hack
+my %engine_timelines;
 
-	if (exists $db{$next_key}) {
-		$end = $db{$next_key}->{'end'};
-	} else {
-		# No info at all, fake it:
-		$end = $db{$key}->{'start'} + 999;
-	}
+sub sortEngine {
+	my $as = $db{$a}->{'global'};
+	my $bs = $db{$b}->{'global'};
+	my $val;
+
+	$val = $as <=> $bs;
 
-	$db{$key}->{'notify'} = $end;
-	$db{$key}->{'end'} = $end;
+	die if $val == 0;
+
+	return $val;
 }
 
-# GPU time accounting
-my (%running, %runnable, %queued, %batch_avg, %batch_total_avg, %batch_count);
-my (%submit_avg, %execute_avg, %ctxsave_avg);
+sub get_engine_timeline {
+	my ($ring) = @_;
+	my @timeline;
+
+	return $engine_timelines{$ring} if exists $engine_timelines{$ring};
+
+	@timeline = grep { $db{$_}->{'ring'} eq $ring } keys %db;
+	# FIXME seqno restart
+	@timeline = sort sortEngine @timeline;
+
+	$engine_timelines{$ring} = \@timeline;
+
+	return \@timeline;
+}
+
+# Fix up coalesced requests by ending them either when the following same
+# context request with known end ends, or when a different context starts.
+foreach my $gid (sort keys %rings) {
+	my $ring = $ringmap{$rings{$gid}};
+	my $timeline = get_engine_timeline($ring);
+	my $last_complete = -1;
+	my $last_ctx = -1;
+	my $complete;
+
+	foreach my $pos (0..$#{$timeline}) {
+		my $key = @{$timeline}[$pos];
+		my ($ctx, $end);
+
+		next if exists $db{$key}->{'end'};
+
+		$db{$key}->{'no-end'} = 1;
+		$ctx = $db{$key}->{'ctx'};
+
+		if ($pos > $last_complete or $ctx != $last_ctx) {
+			my $next = $pos;
+
+			undef $complete;
+
+			while ($next < $#{$timeline}) {
+				my $next_key = ${$timeline}[++$next];
+				if ($ctx == $db{$next_key}->{'ctx'} and
+				    exists $db{$next_key}->{'end'}) {
+					$last_ctx = $db{$next_key}->{'ctx'};
+					$last_complete = $next;
+					$complete = $next_key;
+					last;
+				}
+			}
+		}
+
+		if (defined $complete) {
+			if ($ctx == $db{$complete}->{'ctx'}) {
+				$end = $db{$complete}->{'end'};
+			} else {
+				$end = $db{$complete}->{'start'};
+			}
+		} else {
+			# No next submission. Use notify if available or give up.
+			if (exists $db{$key}->{'notify'}) {
+				$end = $db{$key}->{'notify'};
+			} else {
+				$end = $db{$key}->{'start'};
+				$db{$key}->{'incomplete'} = 1;
+			}
+		}
+
+		unless (exists $db{$key}->{'notify'}) {
+			$db{$key}->{'notify'} = $end;
+			$db{$key}->{'no-notify'} = 1;
+		}
+		$db{$key}->{'end'} = $end;
+	}
+}
 
 sub sortStart {
 	my $as = $db{$a}->{'start'};
@@ -592,6 +637,10 @@ foreach my $key (@sorted_keys) {
 
 @sorted_keys = sort sortStart keys %db if $re_sort;
 
+# GPU time accounting
+my (%running, %runnable, %queued, %batch_avg, %batch_total_avg, %batch_count);
+my (%submit_avg, %execute_avg, %ctxsave_avg);
+
 my $last_ts = 0;
 my $first_ts;
 my $min_ctx;
@@ -614,7 +663,11 @@ foreach my $key (@sorted_keys) {
 	}
 	$db{$key}->{'execute-delay'} = $start - $db{$key}->{'submit'};
 	$db{$key}->{'submit-delay'} = $db{$key}->{'submit'} - $db{$key}->{'queue'};
-	$db{$key}->{'duration'} = $notify - $start;
+	unless (exists $db{$key}->{'no-notify'}) {
+		$db{$key}->{'duration'} = $notify - $start;
+	} else {
+		$db{$key}->{'duration'} = 0;
+	}
 
 	$running{$ring} += $end - $start if $correct_durations or
 					    not exists $db{$key}->{'no-end'};
-- 
2.17.1

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 45+ messages in thread

* [PATCH i-g-t 10/11] trace.pl: Basic preemption support
  2018-07-09 13:19 ` [Intel-gfx] " Tvrtko Ursulin
@ 2018-07-09 13:20   ` Tvrtko Ursulin
  -1 siblings, 0 replies; 45+ messages in thread
From: Tvrtko Ursulin @ 2018-07-09 13:20 UTC (permalink / raw)
  To: igt-dev; +Cc: intel-gfx

From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

Just forget about earlier request_in events.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
---
 scripts/trace.pl | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/scripts/trace.pl b/scripts/trace.pl
index 6379dace5743..5da5f5a14104 100755
--- a/scripts/trace.pl
+++ b/scripts/trace.pl
@@ -438,7 +438,9 @@ while (<>) {
 	} elsif ($tp_name eq 'i915:i915_request_in:') {
 		my %req;
 
-		die if exists $db{$key};
+		# preemption
+		delete $db{$key} if exists $db{$key};
+
 		die unless exists $queue{$key};
 		die unless exists $submit{$key};
 
-- 
2.17.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 45+ messages in thread

* [igt-dev] [PATCH i-g-t 10/11] trace.pl: Basic preemption support
@ 2018-07-09 13:20   ` Tvrtko Ursulin
  0 siblings, 0 replies; 45+ messages in thread
From: Tvrtko Ursulin @ 2018-07-09 13:20 UTC (permalink / raw)
  To: igt-dev; +Cc: intel-gfx, Tvrtko Ursulin

From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

Just forget about earlier request_in events.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
---
 scripts/trace.pl | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/scripts/trace.pl b/scripts/trace.pl
index 6379dace5743..5da5f5a14104 100755
--- a/scripts/trace.pl
+++ b/scripts/trace.pl
@@ -438,7 +438,9 @@ while (<>) {
 	} elsif ($tp_name eq 'i915:i915_request_in:') {
 		my %req;
 
-		die if exists $db{$key};
+		# preemption
+		delete $db{$key} if exists $db{$key};
+
 		die unless exists $queue{$key};
 		die unless exists $submit{$key};
 
-- 
2.17.1

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 45+ messages in thread

* [PATCH i-g-t 11/11] trace.pl: Fix request split mode
  2018-07-09 13:19 ` [Intel-gfx] " Tvrtko Ursulin
@ 2018-07-09 13:20   ` Tvrtko Ursulin
  -1 siblings, 0 replies; 45+ messages in thread
From: Tvrtko Ursulin @ 2018-07-09 13:20 UTC (permalink / raw)
  To: igt-dev; +Cc: intel-gfx

From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

Request split mode had several bugs, both in the original version and also
after the recent refactorings.

One big one was that it wasn't considering different submit ports as a
reason to split execution, and also that it was too time based instead of
looking at relevant timelines.

In this refactoring we address the former by using the engine timelines
introduced in the previous patch. Secondary port submissions are moved
to follow the preceding submission as a first step in the correction
process.

In the second step, we add context timelines and use then in a similar
fashion to separate start and end time of coalesced requests. For each
coalesced request we know its boundaries by looking at the engine
timeline (via global seqnos), and we know the previous request it should
only start after, by looking at the context timeline.

v2:
 * Remove some dead code.
 * Fix !port0 shifting logic.

v3:
 * Refactor for less list walking as with incomplete handling.

v4:
 * Database of context timelines should not contain duplicates!
   (Converted from array into a hash.)

v5:
 * Avoid over-accounting runnable time for a coalesced group by recording
   the time first request entered the GPU and ending the execute delay at
   that point for the whole group.

v6:
 * Update for engine class:instance.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: John Harrison <John.C.Harrison@intel.com>
---
 scripts/trace.pl | 138 ++++++++++++++++++++++++++++++++++++-----------
 1 file changed, 108 insertions(+), 30 deletions(-)

diff --git a/scripts/trace.pl b/scripts/trace.pl
index 5da5f5a14104..de00fca0875e 100755
--- a/scripts/trace.pl
+++ b/scripts/trace.pl
@@ -27,7 +27,7 @@ use warnings;
 use 5.010;
 
 my $gid = 0;
-my (%db, %queue, %submit, %notify, %rings, %ctxdb, %ringmap, %reqwait);
+my (%db, %queue, %submit, %notify, %rings, %ctxdb, %ringmap, %reqwait, %ctxtimelines);
 my @freqs;
 
 my $max_items = 3000;
@@ -448,6 +448,7 @@ while (<>) {
 		$req{'ring'} = $ring;
 		$req{'seqno'} = $seqno;
 		$req{'ctx'} = $ctx;
+		$ctxtimelines{$ctx . '/' . $ring} = 1;
 		$req{'name'} = $ctx . '/' . $seqno;
 		$req{'global'} = $tp{'global'};
 		$req{'port'} = $tp{'port'};
@@ -603,41 +604,113 @@ sub sortStart {
 	return $val;
 }
 
-my @sorted_keys = sort sortStart keys %db;
-my $re_sort = 0;
+my $re_sort = 1;
+my @sorted_keys;
 
-die "Database changed size?!" unless scalar(@sorted_keys) == $key_count;
+sub maybe_sort_keys
+{
+	if ($re_sort) {
+		@sorted_keys = sort sortStart keys %db;
+		$re_sort = 0;
+		die "Database changed size?!" unless scalar(@sorted_keys) ==
+						     $key_count;
+	}
+}
 
-foreach my $key (@sorted_keys) {
-	my $ring = $db{$key}->{'ring'};
-	my $end = $db{$key}->{'end'};
+maybe_sort_keys();
+
+my %ctx_timelines;
+
+sub sortContext {
+	my $as = $db{$a}->{'seqno'};
+	my $bs = $db{$b}->{'seqno'};
+	my $val;
+
+	$val = $as <=> $bs;
+
+	die if $val == 0;
+
+	return $val;
+}
+
+sub get_ctx_timeline {
+	my ($ctx, $ring, $key) = @_;
+	my @timeline;
+
+	return $ctx_timelines{$key} if exists $ctx_timelines{$key};
+
+	@timeline = grep { $db{$_}->{'ring'} eq $ring and
+			   $db{$_}->{'ctx'} == $ctx } @sorted_keys;
+	# FIXME seqno restart
+	@timeline = sort sortContext @timeline;
+
+	$ctx_timelines{$key} = \@timeline;
+
+	return \@timeline;
+}
+
+# Split out merged batches if requested.
+if ($correct_durations) {
+	# Shift !port0 requests start time to after the previous context on the
+	# same timeline has finished.
+	foreach my $gid (sort keys %rings) {
+		my $ring = $ringmap{$rings{$gid}};
+		my $timeline = get_engine_timeline($ring);
+		my $complete;
+
+		foreach my $pos (0..$#{$timeline}) {
+			my $key = @{$timeline}[$pos];
+			my $prev = $complete;
+			my $pkey;
+
+			$complete = $key unless exists $db{$key}->{'no-end'};
+			$pkey = $complete;
+
+			next if $db{$key}->{'port'} == 0;
+
+			$pkey = $prev if $complete eq $key;
+
+			die unless defined $pkey;
+
+			$db{$key}->{'start'} = $db{$pkey}->{'end'};
+			$db{$key}->{'start'} = $db{$pkey}->{'notify'} if $db{$key}->{'start'} > $db{$key}->{'end'};
+
+			die if $db{$key}->{'start'} > $db{$key}->{'end'};
 
-	# correct duration of merged batches
-	if ($correct_durations and exists $db{$key}->{'no-end'}) {
-		my $ctx = $db{$key}->{'ctx'};
-		my $seqno = $db{$key}->{'seqno'};
-		my $start = $db{$key}->{'start'};
-		my $next_key;
-		my $i = 1;
-
-		do {
-			$next_key = db_key($ring, $ctx, $seqno + $i);
-			$i++;
-		} until (exists $db{$next_key} or $i > $key_count);  # ugly stop hack
-
-		# 20us tolerance
-		if (exists $db{$next_key} and $db{$next_key}->{'start'} < $start + 20) {
-			my $notify = $db{$key}->{'notify'};
 			$re_sort = 1;
-			$db{$next_key}->{'start'} = $notify;
-			$db{$next_key}->{'start'} = $db{$next_key}->{'end'} if $db{$next_key}->{'start'} > $db{$next_key}->{'end'};
-			die if $db{$next_key}->{'start'} > $db{$next_key}->{'end'};
 		}
-		die if $start > $end;
+	}
+
+	maybe_sort_keys();
+
+	# Batch with no-end (no request_out) means it was submitted as part of
+	# coalesced context. This means it's start time should be set to the end
+	# time of a following request on this context timeline.
+	foreach my $tkey (sort keys %ctxtimelines) {
+		my ($ctx, $ring) = split '/', $tkey;
+		my $timeline = get_ctx_timeline($ctx, $ring, $tkey);
+		my $last_complete = -1;
+		my $complete;
+
+		foreach my $pos (0..$#{$timeline}) {
+			my $key = @{$timeline}[$pos];
+			my $next_key;
+
+			next unless exists $db{$key}->{'no-end'};
+			last if $pos == $#{$timeline};
+
+			# Shift following request to start after the current one
+			$next_key = ${$timeline}[$pos + 1];
+			if (exists $db{$key}->{'notify'}) {
+				$db{$next_key}->{'engine-start'} = $db{$next_key}->{'start'};
+				$db{$next_key}->{'start'} = $db{$key}->{'notify'};
+				$re_sort = 1;
+			}
+		}
 	}
 }
 
-@sorted_keys = sort sortStart keys %db if $re_sort;
+maybe_sort_keys();
 
 # GPU time accounting
 my (%running, %runnable, %queued, %batch_avg, %batch_total_avg, %batch_count);
@@ -651,6 +724,7 @@ foreach my $key (@sorted_keys) {
 	my $ring = $db{$key}->{'ring'};
 	my $end = $db{$key}->{'end'};
 	my $start = $db{$key}->{'start'};
+	my $engine_start = $db{$key}->{'engine_start'};
 	my $notify = $db{$key}->{'notify'};
 
 	$first_ts = $db{$key}->{'queue'} if not defined $first_ts or $db{$key}->{'queue'} < $first_ts;
@@ -663,7 +737,9 @@ foreach my $key (@sorted_keys) {
 	} else {
 		$db{$key}->{'context-complete-delay'} = 0;
 	}
-	$db{$key}->{'execute-delay'} = $start - $db{$key}->{'submit'};
+
+	$engine_start = $db{$key}->{'start'} unless defined $engine_start;
+	$db{$key}->{'execute-delay'} = $engine_start - $db{$key}->{'submit'};
 	$db{$key}->{'submit-delay'} = $db{$key}->{'submit'} - $db{$key}->{'queue'};
 	unless (exists $db{$key}->{'no-notify'}) {
 		$db{$key}->{'duration'} = $notify - $start;
@@ -1059,6 +1135,7 @@ my $i = 0;
 foreach my $key (sort sortQueue keys %db) {
 	my ($name, $ctx, $seqno) = ($db{$key}->{'name'}, $db{$key}->{'ctx'}, $db{$key}->{'seqno'});
 	my ($queue, $start, $notify, $end) = ($db{$key}->{'queue'}, $db{$key}->{'start'}, $db{$key}->{'notify'}, $db{$key}->{'end'});
+	my $engine_start = $db{$key}->{'engine-start'};
 	my $submit = $queue + $db{$key}->{'submit-delay'};
 	my ($content, $style);
 	my $group = $engine_start_id + $rings{$db{$key}->{'ring'}};
@@ -1078,11 +1155,12 @@ foreach my $key (sort sortQueue keys %db) {
 	}
 
 	# execute to start
+	$engine_start = $db{$key}->{'start'} unless defined $engine_start;
 	unless (exists $skip_box{'ready'}) {
 		$skey = 2 * $max_seqno * $ctx + 2 * $seqno + 1;
 		$style = box_style($ctx, 'ready');
 		$content = "<small>$name<br>$db{$key}->{'execute-delay'}us</small>";
-		$startend = 'start: \'' . ts($submit) . '\', end: \'' . ts($start) . '\'';
+		$startend = 'start: \'' . ts($submit) . '\', end: \'' . ts($engine_start) . '\'';
 		print "\t{id: $i, key: $skey, $type group: $group, subgroup: $subgroup, subgroupOrder: $subgroup, content: '$content', $startend, style: \'$style\'},\n";
 		$i++;
 	}
-- 
2.17.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 45+ messages in thread

* [igt-dev] [PATCH i-g-t 11/11] trace.pl: Fix request split mode
@ 2018-07-09 13:20   ` Tvrtko Ursulin
  0 siblings, 0 replies; 45+ messages in thread
From: Tvrtko Ursulin @ 2018-07-09 13:20 UTC (permalink / raw)
  To: igt-dev; +Cc: intel-gfx, Tvrtko Ursulin

From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

Request split mode had several bugs, both in the original version and also
after the recent refactorings.

One big one was that it wasn't considering different submit ports as a
reason to split execution, and also that it was too time based instead of
looking at relevant timelines.

In this refactoring we address the former by using the engine timelines
introduced in the previous patch. Secondary port submissions are moved
to follow the preceding submission as a first step in the correction
process.

In the second step, we add context timelines and use then in a similar
fashion to separate start and end time of coalesced requests. For each
coalesced request we know its boundaries by looking at the engine
timeline (via global seqnos), and we know the previous request it should
only start after, by looking at the context timeline.

v2:
 * Remove some dead code.
 * Fix !port0 shifting logic.

v3:
 * Refactor for less list walking as with incomplete handling.

v4:
 * Database of context timelines should not contain duplicates!
   (Converted from array into a hash.)

v5:
 * Avoid over-accounting runnable time for a coalesced group by recording
   the time first request entered the GPU and ending the execute delay at
   that point for the whole group.

v6:
 * Update for engine class:instance.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: John Harrison <John.C.Harrison@intel.com>
---
 scripts/trace.pl | 138 ++++++++++++++++++++++++++++++++++++-----------
 1 file changed, 108 insertions(+), 30 deletions(-)

diff --git a/scripts/trace.pl b/scripts/trace.pl
index 5da5f5a14104..de00fca0875e 100755
--- a/scripts/trace.pl
+++ b/scripts/trace.pl
@@ -27,7 +27,7 @@ use warnings;
 use 5.010;
 
 my $gid = 0;
-my (%db, %queue, %submit, %notify, %rings, %ctxdb, %ringmap, %reqwait);
+my (%db, %queue, %submit, %notify, %rings, %ctxdb, %ringmap, %reqwait, %ctxtimelines);
 my @freqs;
 
 my $max_items = 3000;
@@ -448,6 +448,7 @@ while (<>) {
 		$req{'ring'} = $ring;
 		$req{'seqno'} = $seqno;
 		$req{'ctx'} = $ctx;
+		$ctxtimelines{$ctx . '/' . $ring} = 1;
 		$req{'name'} = $ctx . '/' . $seqno;
 		$req{'global'} = $tp{'global'};
 		$req{'port'} = $tp{'port'};
@@ -603,41 +604,113 @@ sub sortStart {
 	return $val;
 }
 
-my @sorted_keys = sort sortStart keys %db;
-my $re_sort = 0;
+my $re_sort = 1;
+my @sorted_keys;
 
-die "Database changed size?!" unless scalar(@sorted_keys) == $key_count;
+sub maybe_sort_keys
+{
+	if ($re_sort) {
+		@sorted_keys = sort sortStart keys %db;
+		$re_sort = 0;
+		die "Database changed size?!" unless scalar(@sorted_keys) ==
+						     $key_count;
+	}
+}
 
-foreach my $key (@sorted_keys) {
-	my $ring = $db{$key}->{'ring'};
-	my $end = $db{$key}->{'end'};
+maybe_sort_keys();
+
+my %ctx_timelines;
+
+sub sortContext {
+	my $as = $db{$a}->{'seqno'};
+	my $bs = $db{$b}->{'seqno'};
+	my $val;
+
+	$val = $as <=> $bs;
+
+	die if $val == 0;
+
+	return $val;
+}
+
+sub get_ctx_timeline {
+	my ($ctx, $ring, $key) = @_;
+	my @timeline;
+
+	return $ctx_timelines{$key} if exists $ctx_timelines{$key};
+
+	@timeline = grep { $db{$_}->{'ring'} eq $ring and
+			   $db{$_}->{'ctx'} == $ctx } @sorted_keys;
+	# FIXME seqno restart
+	@timeline = sort sortContext @timeline;
+
+	$ctx_timelines{$key} = \@timeline;
+
+	return \@timeline;
+}
+
+# Split out merged batches if requested.
+if ($correct_durations) {
+	# Shift !port0 requests start time to after the previous context on the
+	# same timeline has finished.
+	foreach my $gid (sort keys %rings) {
+		my $ring = $ringmap{$rings{$gid}};
+		my $timeline = get_engine_timeline($ring);
+		my $complete;
+
+		foreach my $pos (0..$#{$timeline}) {
+			my $key = @{$timeline}[$pos];
+			my $prev = $complete;
+			my $pkey;
+
+			$complete = $key unless exists $db{$key}->{'no-end'};
+			$pkey = $complete;
+
+			next if $db{$key}->{'port'} == 0;
+
+			$pkey = $prev if $complete eq $key;
+
+			die unless defined $pkey;
+
+			$db{$key}->{'start'} = $db{$pkey}->{'end'};
+			$db{$key}->{'start'} = $db{$pkey}->{'notify'} if $db{$key}->{'start'} > $db{$key}->{'end'};
+
+			die if $db{$key}->{'start'} > $db{$key}->{'end'};
 
-	# correct duration of merged batches
-	if ($correct_durations and exists $db{$key}->{'no-end'}) {
-		my $ctx = $db{$key}->{'ctx'};
-		my $seqno = $db{$key}->{'seqno'};
-		my $start = $db{$key}->{'start'};
-		my $next_key;
-		my $i = 1;
-
-		do {
-			$next_key = db_key($ring, $ctx, $seqno + $i);
-			$i++;
-		} until (exists $db{$next_key} or $i > $key_count);  # ugly stop hack
-
-		# 20us tolerance
-		if (exists $db{$next_key} and $db{$next_key}->{'start'} < $start + 20) {
-			my $notify = $db{$key}->{'notify'};
 			$re_sort = 1;
-			$db{$next_key}->{'start'} = $notify;
-			$db{$next_key}->{'start'} = $db{$next_key}->{'end'} if $db{$next_key}->{'start'} > $db{$next_key}->{'end'};
-			die if $db{$next_key}->{'start'} > $db{$next_key}->{'end'};
 		}
-		die if $start > $end;
+	}
+
+	maybe_sort_keys();
+
+	# Batch with no-end (no request_out) means it was submitted as part of
+	# coalesced context. This means it's start time should be set to the end
+	# time of a following request on this context timeline.
+	foreach my $tkey (sort keys %ctxtimelines) {
+		my ($ctx, $ring) = split '/', $tkey;
+		my $timeline = get_ctx_timeline($ctx, $ring, $tkey);
+		my $last_complete = -1;
+		my $complete;
+
+		foreach my $pos (0..$#{$timeline}) {
+			my $key = @{$timeline}[$pos];
+			my $next_key;
+
+			next unless exists $db{$key}->{'no-end'};
+			last if $pos == $#{$timeline};
+
+			# Shift following request to start after the current one
+			$next_key = ${$timeline}[$pos + 1];
+			if (exists $db{$key}->{'notify'}) {
+				$db{$next_key}->{'engine-start'} = $db{$next_key}->{'start'};
+				$db{$next_key}->{'start'} = $db{$key}->{'notify'};
+				$re_sort = 1;
+			}
+		}
 	}
 }
 
-@sorted_keys = sort sortStart keys %db if $re_sort;
+maybe_sort_keys();
 
 # GPU time accounting
 my (%running, %runnable, %queued, %batch_avg, %batch_total_avg, %batch_count);
@@ -651,6 +724,7 @@ foreach my $key (@sorted_keys) {
 	my $ring = $db{$key}->{'ring'};
 	my $end = $db{$key}->{'end'};
 	my $start = $db{$key}->{'start'};
+	my $engine_start = $db{$key}->{'engine_start'};
 	my $notify = $db{$key}->{'notify'};
 
 	$first_ts = $db{$key}->{'queue'} if not defined $first_ts or $db{$key}->{'queue'} < $first_ts;
@@ -663,7 +737,9 @@ foreach my $key (@sorted_keys) {
 	} else {
 		$db{$key}->{'context-complete-delay'} = 0;
 	}
-	$db{$key}->{'execute-delay'} = $start - $db{$key}->{'submit'};
+
+	$engine_start = $db{$key}->{'start'} unless defined $engine_start;
+	$db{$key}->{'execute-delay'} = $engine_start - $db{$key}->{'submit'};
 	$db{$key}->{'submit-delay'} = $db{$key}->{'submit'} - $db{$key}->{'queue'};
 	unless (exists $db{$key}->{'no-notify'}) {
 		$db{$key}->{'duration'} = $notify - $start;
@@ -1059,6 +1135,7 @@ my $i = 0;
 foreach my $key (sort sortQueue keys %db) {
 	my ($name, $ctx, $seqno) = ($db{$key}->{'name'}, $db{$key}->{'ctx'}, $db{$key}->{'seqno'});
 	my ($queue, $start, $notify, $end) = ($db{$key}->{'queue'}, $db{$key}->{'start'}, $db{$key}->{'notify'}, $db{$key}->{'end'});
+	my $engine_start = $db{$key}->{'engine-start'};
 	my $submit = $queue + $db{$key}->{'submit-delay'};
 	my ($content, $style);
 	my $group = $engine_start_id + $rings{$db{$key}->{'ring'}};
@@ -1078,11 +1155,12 @@ foreach my $key (sort sortQueue keys %db) {
 	}
 
 	# execute to start
+	$engine_start = $db{$key}->{'start'} unless defined $engine_start;
 	unless (exists $skip_box{'ready'}) {
 		$skey = 2 * $max_seqno * $ctx + 2 * $seqno + 1;
 		$style = box_style($ctx, 'ready');
 		$content = "<small>$name<br>$db{$key}->{'execute-delay'}us</small>";
-		$startend = 'start: \'' . ts($submit) . '\', end: \'' . ts($start) . '\'';
+		$startend = 'start: \'' . ts($submit) . '\', end: \'' . ts($engine_start) . '\'';
 		print "\t{id: $i, key: $skey, $type group: $group, subgroup: $subgroup, subgroupOrder: $subgroup, content: '$content', $startend, style: \'$style\'},\n";
 		$i++;
 	}
-- 
2.17.1

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 45+ messages in thread

* Re: [igt-dev] [PATCH i-g-t 03/11] trace.pl: Scale timeline for better precision
  2018-07-09 13:19   ` [igt-dev] " Tvrtko Ursulin
@ 2018-07-09 13:26     ` Chris Wilson
  -1 siblings, 0 replies; 45+ messages in thread
From: Chris Wilson @ 2018-07-09 13:26 UTC (permalink / raw)
  To: Tvrtko Ursulin, igt-dev; +Cc: intel-gfx

Quoting Tvrtko Ursulin (2018-07-09 14:19:56)
> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> 
> vis library has a limited precision compared to our trace data which
> prevents zooming into the timeline and seeing the fine detail.
> 
> Scale the HTML view by a thousand to work around it.

Shouldn't there be some clue in the HTML as to the time scale?
Although it's quite easy to tally the numbers against the details to
work it out.
-Chris
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [igt-dev] [PATCH i-g-t 03/11] trace.pl: Scale timeline for better precision
@ 2018-07-09 13:26     ` Chris Wilson
  0 siblings, 0 replies; 45+ messages in thread
From: Chris Wilson @ 2018-07-09 13:26 UTC (permalink / raw)
  To: Tvrtko Ursulin, igt-dev; +Cc: intel-gfx, Tvrtko Ursulin

Quoting Tvrtko Ursulin (2018-07-09 14:19:56)
> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> 
> vis library has a limited precision compared to our trace data which
> prevents zooming into the timeline and seeing the fine detail.
> 
> Scale the HTML view by a thousand to work around it.

Shouldn't there be some clue in the HTML as to the time scale?
Although it's quite easy to tally the numbers against the details to
work it out.
-Chris
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [igt-dev] [PATCH i-g-t 03/11] trace.pl: Scale timeline for better precision
  2018-07-09 13:26     ` Chris Wilson
@ 2018-07-09 13:40       ` Tvrtko Ursulin
  -1 siblings, 0 replies; 45+ messages in thread
From: Tvrtko Ursulin @ 2018-07-09 13:40 UTC (permalink / raw)
  To: Chris Wilson, Tvrtko Ursulin, igt-dev; +Cc: intel-gfx


On 09/07/2018 14:26, Chris Wilson wrote:
> Quoting Tvrtko Ursulin (2018-07-09 14:19:56)
>> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>>
>> vis library has a limited precision compared to our trace data which
>> prevents zooming into the timeline and seeing the fine detail.
>>
>> Scale the HTML view by a thousand to work around it.
> 
> Shouldn't there be some clue in the HTML as to the time scale?
> Although it's quite easy to tally the numbers against the details to
> work it out.

One clue is that each box contains it's duration. If that is not enough 
I can look into whether the timeline axis can be custom formatted. It 
would be useful in general to get rid of the annoying date based 
display, but no promises that it is possible.

Regards,

Tvrtko


_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [Intel-gfx] [igt-dev] [PATCH i-g-t 03/11] trace.pl: Scale timeline for better precision
@ 2018-07-09 13:40       ` Tvrtko Ursulin
  0 siblings, 0 replies; 45+ messages in thread
From: Tvrtko Ursulin @ 2018-07-09 13:40 UTC (permalink / raw)
  To: Chris Wilson, Tvrtko Ursulin, igt-dev; +Cc: intel-gfx


On 09/07/2018 14:26, Chris Wilson wrote:
> Quoting Tvrtko Ursulin (2018-07-09 14:19:56)
>> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>>
>> vis library has a limited precision compared to our trace data which
>> prevents zooming into the timeline and seeing the fine detail.
>>
>> Scale the HTML view by a thousand to work around it.
> 
> Shouldn't there be some clue in the HTML as to the time scale?
> Although it's quite easy to tally the numbers against the details to
> work it out.

One clue is that each box contains it's duration. If that is not enough 
I can look into whether the timeline axis can be custom formatted. It 
would be useful in general to get rid of the annoying date based 
display, but no promises that it is possible.

Regards,

Tvrtko


_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [igt-dev] ✓ Fi.CI.BAT: success for trace.pl fixes and improvements
  2018-07-09 13:19 ` [Intel-gfx] " Tvrtko Ursulin
                   ` (11 preceding siblings ...)
  (?)
@ 2018-07-09 14:53 ` Patchwork
  -1 siblings, 0 replies; 45+ messages in thread
From: Patchwork @ 2018-07-09 14:53 UTC (permalink / raw)
  To: Tvrtko Ursulin; +Cc: igt-dev

== Series Details ==

Series: trace.pl fixes and improvements
URL   : https://patchwork.freedesktop.org/series/46177/
State : success

== Summary ==

= CI Bug Log - changes from CI_DRM_4453 -> IGTPW_1546 =

== Summary - SUCCESS ==

  No regressions found.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/46177/revisions/1/mbox/

== Known issues ==

  Here are the changes found in IGTPW_1546 that come from known issues:

  === IGT changes ===

    ==== Issues hit ====

    igt@gem_exec_suspend@basic-s4-devices:
      {fi-kbl-8809g}:     NOTRUN -> INCOMPLETE (fdo#107139)

    igt@prime_vgem@basic-fence-flip:
      fi-ilk-650:         PASS -> FAIL (fdo#104008)

    
    ==== Possible fixes ====

    igt@kms_frontbuffer_tracking@basic:
      fi-bxt-j4205:       FAIL (fdo#103167) -> PASS
      fi-skl-6700hq:      FAIL (fdo#103167) -> PASS
      fi-bxt-dsi:         FAIL (fdo#103167) -> PASS
      fi-skl-6700k2:      FAIL (fdo#103167) -> PASS
      fi-kbl-7560u:       FAIL (fdo#103167) -> PASS
      fi-skl-6600u:       FAIL (fdo#103167) -> PASS
      fi-kbl-r:           FAIL (fdo#103167) -> PASS
      {fi-cfl-8109u}:     FAIL (fdo#103167) -> PASS
      fi-skl-6260u:       FAIL (fdo#103167) -> PASS
      fi-skl-6770hq:      FAIL (fdo#103167) -> PASS
      fi-cfl-guc:         FAIL (fdo#103167) -> PASS
      fi-cfl-s3:          FAIL (fdo#103167) -> PASS
      fi-whl-u:           FAIL (fdo#103167) -> PASS
      fi-cfl-8700k:       FAIL (fdo#103167) -> PASS
      fi-kbl-7500u:       FAIL (fdo#103167) -> PASS
      fi-kbl-7567u:       FAIL (fdo#103167) -> PASS
      fi-skl-guc:         FAIL (fdo#103167) -> PASS
      fi-glk-j4005:       FAIL (fdo#103167) -> PASS
      fi-glk-dsi:         FAIL (fdo#103167) -> PASS
      fi-skl-gvtdvm:      FAIL (fdo#103167) -> PASS

    igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b:
      fi-snb-2520m:       INCOMPLETE (fdo#103713) -> PASS

    
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167
  fdo#103713 https://bugs.freedesktop.org/show_bug.cgi?id=103713
  fdo#104008 https://bugs.freedesktop.org/show_bug.cgi?id=104008
  fdo#107139 https://bugs.freedesktop.org/show_bug.cgi?id=107139


== Participating hosts (44 -> 42) ==

  Additional (2): fi-hsw-peppy fi-kbl-8809g 
  Missing    (4): fi-ilk-m540 fi-byt-squawks fi-bsw-cyan fi-hsw-4200u 


== Build changes ==

    * IGT: IGT_4543 -> IGTPW_1546

  CI_DRM_4453: 940e07c2a136b53965e4a6728e01e1638f5ba2de @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_1546: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_1546/
  IGT_4543: 366eed37c7c71217e1cb1f3be5e26358a41f0001 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_1546/issues.html
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [igt-dev] ✗ Fi.CI.IGT: failure for trace.pl fixes and improvements
  2018-07-09 13:19 ` [Intel-gfx] " Tvrtko Ursulin
                   ` (12 preceding siblings ...)
  (?)
@ 2018-07-09 21:50 ` Patchwork
  -1 siblings, 0 replies; 45+ messages in thread
From: Patchwork @ 2018-07-09 21:50 UTC (permalink / raw)
  To: Tvrtko Ursulin; +Cc: igt-dev

== Series Details ==

Series: trace.pl fixes and improvements
URL   : https://patchwork.freedesktop.org/series/46177/
State : failure

== Summary ==

= CI Bug Log - changes from IGT_4543_full -> IGTPW_1546_full =

== Summary - FAILURE ==

  Serious unknown changes coming with IGTPW_1546_full absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in IGTPW_1546_full, please notify your bug team to allow them
  to document this new failure mode, which will reduce false positives in CI.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/46177/revisions/1/mbox/

== Possible new issues ==

  Here are the unknown changes that may have been introduced in IGTPW_1546_full:

  === IGT changes ===

    ==== Possible regressions ====

    igt@pm_rps@waitboost:
      shard-hsw:          PASS -> FAIL

    
    ==== Warnings ====

    igt@gem_exec_schedule@deep-bsd1:
      shard-kbl:          PASS -> SKIP +1

    igt@gem_exec_schedule@deep-bsd2:
      shard-kbl:          SKIP -> PASS

    igt@pm_rc6_residency@rc6-accuracy:
      shard-snb:          SKIP -> PASS

    
== Known issues ==

  Here are the changes found in IGTPW_1546_full that come from known issues:

  === IGT changes ===

    ==== Issues hit ====

    igt@gem_shrink@reclaim:
      shard-snb:          PASS -> INCOMPLETE (fdo#105411)

    igt@kms_flip@2x-wf_vblank-ts-check-interruptible:
      shard-glk:          PASS -> FAIL (fdo#100368)

    igt@kms_flip@flip-vs-expired-vblank-interruptible:
      shard-glk:          PASS -> FAIL (fdo#105363, fdo#102887)

    igt@kms_plane_multiple@atomic-pipe-a-tiling-x:
      shard-snb:          PASS -> FAIL (fdo#103166)

    igt@kms_vblank@pipe-c-ts-continuation-suspend:
      shard-kbl:          PASS -> INCOMPLETE (fdo#103665)

    igt@prime_vgem@basic-fence-flip:
      shard-kbl:          PASS -> FAIL (fdo#104008)

    
    ==== Possible fixes ====

    igt@drv_hangman@error-state-capture-render:
      shard-snb:          FAIL (fdo#106847) -> PASS

    igt@gem_workarounds@suspend-resume-context:
      shard-kbl:          INCOMPLETE (fdo#103665) -> PASS

    igt@kms_atomic_transition@plane-all-transition-fencing:
      shard-glk:          INCOMPLETE (k.org#198133, fdo#103359) -> PASS

    igt@kms_cursor_legacy@2x-nonblocking-modeset-vs-cursor-atomic:
      shard-glk:          FAIL (fdo#105454, fdo#106509) -> PASS

    igt@kms_cursor_legacy@cursorb-vs-flipb-toggle:
      shard-glk:          DMESG-WARN (fdo#106538, fdo#105763) -> PASS

    igt@kms_draw_crc@draw-method-xrgb2101010-render-untiled:
      shard-apl:          FAIL (fdo#103184) -> PASS +2

    igt@kms_draw_crc@draw-method-xrgb2101010-render-xtiled:
      shard-kbl:          FAIL (fdo#103184) -> PASS +2

    igt@kms_draw_crc@draw-method-xrgb8888-render-untiled:
      shard-glk:          FAIL (fdo#107161) -> PASS +4
      shard-kbl:          FAIL (fdo#107161) -> PASS +1

    igt@kms_draw_crc@draw-method-xrgb8888-render-xtiled:
      shard-apl:          FAIL (fdo#107161) -> PASS +1

    igt@kms_draw_crc@draw-method-xrgb8888-render-ytiled:
      shard-apl:          FAIL (fdo#103232) -> PASS
      shard-glk:          FAIL (fdo#103232) -> PASS
      shard-kbl:          FAIL (fdo#103232) -> PASS

    igt@kms_flip@2x-blocking-wf_vblank:
      shard-glk:          FAIL (fdo#100368) -> PASS

    igt@kms_flip_tiling@flip-to-y-tiled:
      shard-glk:          FAIL (fdo#103822) -> PASS

    igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-draw-render:
      shard-apl:          FAIL (fdo#103167) -> PASS +5

    igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-render:
      shard-kbl:          FAIL (fdo#103167) -> PASS +5

    igt@kms_frontbuffer_tracking@fbc-2p-pri-indfb-multidraw:
      shard-glk:          FAIL (fdo#103167) -> PASS +10

    
  fdo#100368 https://bugs.freedesktop.org/show_bug.cgi?id=100368
  fdo#102887 https://bugs.freedesktop.org/show_bug.cgi?id=102887
  fdo#103166 https://bugs.freedesktop.org/show_bug.cgi?id=103166
  fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167
  fdo#103184 https://bugs.freedesktop.org/show_bug.cgi?id=103184
  fdo#103232 https://bugs.freedesktop.org/show_bug.cgi?id=103232
  fdo#103359 https://bugs.freedesktop.org/show_bug.cgi?id=103359
  fdo#103665 https://bugs.freedesktop.org/show_bug.cgi?id=103665
  fdo#103822 https://bugs.freedesktop.org/show_bug.cgi?id=103822
  fdo#104008 https://bugs.freedesktop.org/show_bug.cgi?id=104008
  fdo#105363 https://bugs.freedesktop.org/show_bug.cgi?id=105363
  fdo#105411 https://bugs.freedesktop.org/show_bug.cgi?id=105411
  fdo#105454 https://bugs.freedesktop.org/show_bug.cgi?id=105454
  fdo#105763 https://bugs.freedesktop.org/show_bug.cgi?id=105763
  fdo#106509 https://bugs.freedesktop.org/show_bug.cgi?id=106509
  fdo#106538 https://bugs.freedesktop.org/show_bug.cgi?id=106538
  fdo#106847 https://bugs.freedesktop.org/show_bug.cgi?id=106847
  fdo#107161 https://bugs.freedesktop.org/show_bug.cgi?id=107161
  k.org#198133 https://bugzilla.kernel.org/show_bug.cgi?id=198133


== Participating hosts (5 -> 5) ==

  No changes in participating hosts


== Build changes ==

    * IGT: IGT_4543 -> IGTPW_1546
    * Linux: CI_DRM_4445 -> CI_DRM_4453

  CI_DRM_4445: 366234e5605ce58f732d2aeb83c713dde6b7c85c @ git://anongit.freedesktop.org/gfx-ci/linux
  CI_DRM_4453: 940e07c2a136b53965e4a6728e01e1638f5ba2de @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_1546: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_1546/
  IGT_4543: 366eed37c7c71217e1cb1f3be5e26358a41f0001 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_1546/shards.html
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [PATCH i-g-t 01/11] trace.pl: Fix no context colouring mode
  2018-07-09 13:19   ` [igt-dev] " Tvrtko Ursulin
@ 2018-07-11 17:49     ` John Harrison
  -1 siblings, 0 replies; 45+ messages in thread
From: John Harrison @ 2018-07-11 17:49 UTC (permalink / raw)
  To: Tvrtko Ursulin, igt-dev; +Cc: intel-gfx

On 7/9/2018 6:19 AM, Tvrtko Ursulin wrote:
> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>
> Commit 87d2affc380da96ba66c258c5337c363fe8651ef ("trace.pl: Add support
> for colouring context execution"), due some dodgy attempts at patch
> splitting broke the legacy colouring mode.
>
> Fix it by passing in the request stage into the helper so all stages can
> be correctly coloured in both modes.
>
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> Cc: John Harrison <John.C.Harrison@Intel.com>

Reviewed-by: John Harrison <John.C.Harrison@Intel.com>

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [igt-dev] [PATCH i-g-t 01/11] trace.pl: Fix no context colouring mode
@ 2018-07-11 17:49     ` John Harrison
  0 siblings, 0 replies; 45+ messages in thread
From: John Harrison @ 2018-07-11 17:49 UTC (permalink / raw)
  To: Tvrtko Ursulin, igt-dev; +Cc: intel-gfx, Tvrtko Ursulin

On 7/9/2018 6:19 AM, Tvrtko Ursulin wrote:
> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>
> Commit 87d2affc380da96ba66c258c5337c363fe8651ef ("trace.pl: Add support
> for colouring context execution"), due some dodgy attempts at patch
> splitting broke the legacy colouring mode.
>
> Fix it by passing in the request stage into the helper so all stages can
> be correctly coloured in both modes.
>
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> Cc: John Harrison <John.C.Harrison@Intel.com>

Reviewed-by: John Harrison <John.C.Harrison@Intel.com>

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [PATCH i-g-t 03/11] trace.pl: Scale timeline for better precision
  2018-07-09 13:19   ` [igt-dev] " Tvrtko Ursulin
@ 2018-07-11 17:52     ` John Harrison
  -1 siblings, 0 replies; 45+ messages in thread
From: John Harrison @ 2018-07-11 17:52 UTC (permalink / raw)
  To: Tvrtko Ursulin, igt-dev; +Cc: intel-gfx

On 7/9/2018 6:19 AM, Tvrtko Ursulin wrote:
> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>
> vis library has a limited precision compared to our trace data which
> prevents zooming into the timeline and seeing the fine detail.
>
> Scale the HTML view by a thousand to work around it.
>
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> Suggested-by: John Harrison <John.C.Harrison@Intel.com>
> Cc: John Harrison <John.C.Harrison@Intel.com>
> ---

Maybe add a comment to the HTML page's description text when scaling is 
enabled to say that the timeline units are not entirely accurate? 
Although, I guess the date was never actually correct in the first 
place! Either way...

Reviewed-by: John Harrison <John.C.Harrison@Intel.com>

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [igt-dev] [PATCH i-g-t 03/11] trace.pl: Scale timeline for better precision
@ 2018-07-11 17:52     ` John Harrison
  0 siblings, 0 replies; 45+ messages in thread
From: John Harrison @ 2018-07-11 17:52 UTC (permalink / raw)
  To: Tvrtko Ursulin, igt-dev; +Cc: intel-gfx, Tvrtko Ursulin

On 7/9/2018 6:19 AM, Tvrtko Ursulin wrote:
> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>
> vis library has a limited precision compared to our trace data which
> prevents zooming into the timeline and seeing the fine detail.
>
> Scale the HTML view by a thousand to work around it.
>
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> Suggested-by: John Harrison <John.C.Harrison@Intel.com>
> Cc: John Harrison <John.C.Harrison@Intel.com>
> ---

Maybe add a comment to the HTML page's description text when scaling is 
enabled to say that the timeline units are not entirely accurate? 
Although, I guess the date was never actually correct in the first 
place! Either way...

Reviewed-by: John Harrison <John.C.Harrison@Intel.com>

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [PATCH i-g-t 04/11] trace.pl: Put single context at single vertical slot
  2018-07-09 13:19   ` [igt-dev] " Tvrtko Ursulin
@ 2018-07-11 17:55     ` John Harrison
  -1 siblings, 0 replies; 45+ messages in thread
From: John Harrison @ 2018-07-11 17:55 UTC (permalink / raw)
  To: Tvrtko Ursulin, igt-dev; +Cc: intel-gfx

On 7/9/2018 6:19 AM, Tvrtko Ursulin wrote:
> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>
> Turn off timeline stacking in favour of putting all the boxes belonging to
> a single context at the same vertical slot.
>
> Also remove the custom sorting function in favour of correctly assigning
> the subgroup id's and order which greatly speeds up the library operations.
>
> And finally remove the 'Toggle stacking' button which never worked.
>
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> Cc: John Harrison <John.C.Harrison@Intel.com>
> ---
>   scripts/trace.pl | 25 ++++++-------------------
>   1 file changed, 6 insertions(+), 19 deletions(-)
>
> diff --git a/scripts/trace.pl b/scripts/trace.pl
> index 4d3e06434f05..e2978e5382c2 100755
> --- a/scripts/trace.pl
> +++ b/scripts/trace.pl
> @@ -768,9 +768,6 @@ print <<ENDHTML if $html;
>     <link href="node_modules/vis//dist/vis.css" rel="stylesheet" type="text/css" />
>   </head>
>   <body>
> -
> -<button onclick="toggleStackSubgroups()">Toggle stacking</button>
> -
>   <p>
>   <b>Timeline request view:</b>
>   <table>
> @@ -997,6 +994,7 @@ foreach my $key (sort sortQueue keys %db) {
>   	my $submit = $queue + $db{$key}->{'submit-delay'};
>   	my ($content, $style);
>   	my $group = $engine_start_id + $rings{$db{$key}->{'ring'}};
> +	my $subgroup = $ctx - $min_ctx;

There is no chance that this will cause a problem due to sparse subgroup 
values? E.g. min_ctx is 5 and ctx is 500-510? This change certainly 
makes the charts a lot easier to understand, so it doesn't seem to be an 
issue. But it might be worth checking in the vis documentation if that 
is possible?

Otherwise...

Reviewed-by: John Harrison <John.C.Harrison@Intel.com>

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [igt-dev] [PATCH i-g-t 04/11] trace.pl: Put single context at single vertical slot
@ 2018-07-11 17:55     ` John Harrison
  0 siblings, 0 replies; 45+ messages in thread
From: John Harrison @ 2018-07-11 17:55 UTC (permalink / raw)
  To: Tvrtko Ursulin, igt-dev; +Cc: intel-gfx, Tvrtko Ursulin

On 7/9/2018 6:19 AM, Tvrtko Ursulin wrote:
> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>
> Turn off timeline stacking in favour of putting all the boxes belonging to
> a single context at the same vertical slot.
>
> Also remove the custom sorting function in favour of correctly assigning
> the subgroup id's and order which greatly speeds up the library operations.
>
> And finally remove the 'Toggle stacking' button which never worked.
>
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> Cc: John Harrison <John.C.Harrison@Intel.com>
> ---
>   scripts/trace.pl | 25 ++++++-------------------
>   1 file changed, 6 insertions(+), 19 deletions(-)
>
> diff --git a/scripts/trace.pl b/scripts/trace.pl
> index 4d3e06434f05..e2978e5382c2 100755
> --- a/scripts/trace.pl
> +++ b/scripts/trace.pl
> @@ -768,9 +768,6 @@ print <<ENDHTML if $html;
>     <link href="node_modules/vis//dist/vis.css" rel="stylesheet" type="text/css" />
>   </head>
>   <body>
> -
> -<button onclick="toggleStackSubgroups()">Toggle stacking</button>
> -
>   <p>
>   <b>Timeline request view:</b>
>   <table>
> @@ -997,6 +994,7 @@ foreach my $key (sort sortQueue keys %db) {
>   	my $submit = $queue + $db{$key}->{'submit-delay'};
>   	my ($content, $style);
>   	my $group = $engine_start_id + $rings{$db{$key}->{'ring'}};
> +	my $subgroup = $ctx - $min_ctx;

There is no chance that this will cause a problem due to sparse subgroup 
values? E.g. min_ctx is 5 and ctx is 500-510? This change certainly 
makes the charts a lot easier to understand, so it doesn't seem to be an 
issue. But it might be worth checking in the vis documentation if that 
is possible?

Otherwise...

Reviewed-by: John Harrison <John.C.Harrison@Intel.com>

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [PATCH i-g-t 05/11] trace.pl: Fix HTML timestamp generation
  2018-07-09 13:19   ` [igt-dev] " Tvrtko Ursulin
@ 2018-07-11 18:01     ` John Harrison
  -1 siblings, 0 replies; 45+ messages in thread
From: John Harrison @ 2018-07-11 18:01 UTC (permalink / raw)
  To: Tvrtko Ursulin, igt-dev; +Cc: intel-gfx

On 7/9/2018 6:19 AM, Tvrtko Ursulin wrote:
> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>
> Now that we scale timestamps to get better timeline granularity, the hacky
> hand rolled micro-second time to HTML date conversion does no longer cut
> it.
>
> Use perl built-in gmtime to handle things properly.
>
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> Cc: John Harrison <John.C.Harrison@Intel.com>
> ---
>   scripts/trace.pl | 15 ++++-----------
>   1 file changed, 4 insertions(+), 11 deletions(-)
>
> diff --git a/scripts/trace.pl b/scripts/trace.pl
> index e2978e5382c2..aeaf2392162e 100755
> --- a/scripts/trace.pl
> +++ b/scripts/trace.pl
> @@ -346,24 +346,17 @@ sub sanitize_ctx
>   sub ts
>   {
>   	my ($us) = @_;
> -	my ($d, $h, $m, $s);
> +	my ($y, $mo, $d, $h, $m, $s);
>   
>   	$us *= 1000 unless $no_timeline_scaling;
>   
>   	$s = int($us / 1000000);
>   	$us = $us % 1000000;
>   
> -	$m = int($s / 60);
> -	$s = $s % 60;
> +	($s, $m, $h, $d, $mo, $y) = gmtime($s);
>   
> -	$h = int($m / 60);
> -	$m = $m % 60;
> -
> -	$d = 1 + int($h / 24);
> -	$h = $h % 24;
> -
> -	return sprintf('2017-01-%02u %02u:%02u:%02u.%06u',
> -		       int($d), int($h), int($m), int($s), int($us));
> +	return sprintf('%04u-%02u-%02u %02u:%02u:%02u.%06u',
> +		        1970 + $y, 1 + $mo, $d, $h, $m, $s, int($us));

Maybe not bother with the +1970 in the scaling case given that the whole 
date thing is meaningless when microseconds become milliseconds? 
Actually, even in the non-scaling case the epoch is actually whenever 
the traced system was last booted and not some specific calendar date. 
So maybe leaving out the offset regardless would make sense?

Again, a minor point so...

Reviewed-by: John Harrison <John.C.Harrison@Intel.com>


>   }
>   
>   # Main input loop - parse lines and build the internal representation of the

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [igt-dev] [PATCH i-g-t 05/11] trace.pl: Fix HTML timestamp generation
@ 2018-07-11 18:01     ` John Harrison
  0 siblings, 0 replies; 45+ messages in thread
From: John Harrison @ 2018-07-11 18:01 UTC (permalink / raw)
  To: Tvrtko Ursulin, igt-dev; +Cc: intel-gfx, Tvrtko Ursulin

On 7/9/2018 6:19 AM, Tvrtko Ursulin wrote:
> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>
> Now that we scale timestamps to get better timeline granularity, the hacky
> hand rolled micro-second time to HTML date conversion does no longer cut
> it.
>
> Use perl built-in gmtime to handle things properly.
>
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> Cc: John Harrison <John.C.Harrison@Intel.com>
> ---
>   scripts/trace.pl | 15 ++++-----------
>   1 file changed, 4 insertions(+), 11 deletions(-)
>
> diff --git a/scripts/trace.pl b/scripts/trace.pl
> index e2978e5382c2..aeaf2392162e 100755
> --- a/scripts/trace.pl
> +++ b/scripts/trace.pl
> @@ -346,24 +346,17 @@ sub sanitize_ctx
>   sub ts
>   {
>   	my ($us) = @_;
> -	my ($d, $h, $m, $s);
> +	my ($y, $mo, $d, $h, $m, $s);
>   
>   	$us *= 1000 unless $no_timeline_scaling;
>   
>   	$s = int($us / 1000000);
>   	$us = $us % 1000000;
>   
> -	$m = int($s / 60);
> -	$s = $s % 60;
> +	($s, $m, $h, $d, $mo, $y) = gmtime($s);
>   
> -	$h = int($m / 60);
> -	$m = $m % 60;
> -
> -	$d = 1 + int($h / 24);
> -	$h = $h % 24;
> -
> -	return sprintf('2017-01-%02u %02u:%02u:%02u.%06u',
> -		       int($d), int($h), int($m), int($s), int($us));
> +	return sprintf('%04u-%02u-%02u %02u:%02u:%02u.%06u',
> +		        1970 + $y, 1 + $mo, $d, $h, $m, $s, int($us));

Maybe not bother with the +1970 in the scaling case given that the whole 
date thing is meaningless when microseconds become milliseconds? 
Actually, even in the non-scaling case the epoch is actually whenever 
the traced system was last booted and not some specific calendar date. 
So maybe leaving out the offset regardless would make sense?

Again, a minor point so...

Reviewed-by: John Harrison <John.C.Harrison@Intel.com>


>   }
>   
>   # Main input loop - parse lines and build the internal representation of the

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [PATCH i-g-t 02/11] trace.pl: Improve readability of graphical timeline representation
  2018-07-09 13:19   ` [igt-dev] " Tvrtko Ursulin
@ 2018-07-11 22:07     ` John Harrison
  -1 siblings, 0 replies; 45+ messages in thread
From: John Harrison @ 2018-07-11 22:07 UTC (permalink / raw)
  To: Tvrtko Ursulin, igt-dev; +Cc: intel-gfx

[-- Attachment #1: Type: text/plain, Size: 9197 bytes --]

On 7/9/2018 6:19 AM, Tvrtko Ursulin wrote:
> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>
> We add stripes for different stages of request execution so it is easier
> to follow one context in the multi-colour mode.
>
> Vertical stripe pattern indicates pipeline "blockages" - requests waiting
> for dependencies before they are runnable.
>
> Diagonal stripes indicate runnable requests waiting for GPU time.
>
> Horizontal strips are requests executing on the GPU.
>
> Also use this new multi-coloured mode from media-bench.pl.
>
> v2:
>   John Harrison:
>   * Mention media-bench.pl in the commit.
>   * Fix HTML for single colour mode.
>
> v3:
>   * Rebase.
>   * Apply stripes to legacy colouring as well.
>
> v4:
>   John Harrison:
>   * Use per context colours for ctxsave and incomplete boxes.
>   * Clearer timeline legend.
>
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> Cc: John Harrison <John.C.Harrison@Intel.com>
> ---
>   scripts/media-bench.pl |   2 +-
>   scripts/trace.pl       | 112 ++++++++++++++++++++++++++++++++---------
>   2 files changed, 90 insertions(+), 24 deletions(-)
>
> diff --git a/scripts/media-bench.pl b/scripts/media-bench.pl
> index c5628c7f2836..375844d9cdf6 100755
> --- a/scripts/media-bench.pl
> +++ b/scripts/media-bench.pl
> @@ -207,7 +207,7 @@ sub trace_workload
>   	show_cmd($cmd);
>   	system($cmd);
>   
> -	$cmd = "perf script | $tracepl --html -x ctxsave -s ";
> +	$cmd = "perf script | $tracepl --html -x ctxsave -s -c ";
>   	$cmd .= join ' ', map("-i $_", @skip_engine);
>   	$cmd .= " > ${file}.html";
>   	show_cmd($cmd);
> diff --git a/scripts/trace.pl b/scripts/trace.pl
> index fd414f5a4b1e..1ec8b297d15e 100755
> --- a/scripts/trace.pl
> +++ b/scripts/trace.pl
> @@ -727,9 +727,14 @@ foreach my $key (keys %reqwait) {
>   say sprintf('GPU: %.2f%% idle, %.2f%% busy',
>   	     $flat_busy{'gpu-idle'}, $flat_busy{'gpu-busy'}) unless $html;
>   
> -my $queued_colour = $colour_contexts ? 'multi-colour light' : 'blue';
> -my $runnable_colour = $colour_contexts ? 'multi-colour dark' : 'grey';
> -my $execute_colour = $colour_contexts ? 'multi-colour' : 'pink';
> +my $timeline_text = $colour_contexts ?
> +		    'Per context coloured shading like:' : 'Box shading like:';
> +
> +my $queued_style = box_style($min_ctx, 'queue');
> +my $ready_style = box_style($min_ctx, 'ready');
> +my $execute_style = box_style($min_ctx, 'execute');
> +my $ctxsave_style = box_style($min_ctx, 'ctxsave');
> +my $incomplete_style = box_style($min_ctx, 'incomplete');

In context colouring mode, the legend is not especially useful as it is 
only coloured for one particular context (which at least for all of my 
traces, is the system context that only appears at the very end as a 
flush) and has no indication that other contexts will be significantly 
different. Also, I find the black text is really hard to read against 
the dark colour backgrounds. Plus the boxes are too small to actually 
work out what the shading is (for 'ready' and 'incomplete' if not all of 
them).

See attached patch for some tweaks. Basically, add all contexts to the 
key in colour mode, make the boxes bigger and use white text for most of 
it. Although the thought occurs that it might be worth limiting the 
legend to only four or five contexts and just putting an 'etc' at the 
end if there are more. Otherwise a trace with hundreds of contexts could 
be a problem! I'm guessing in that case, the difference in colour from 
one context to the next will be pretty minimal anyway.

>   
>   print <<ENDHTML if $html;
>   <!DOCTYPE HTML>
> @@ -751,9 +756,28 @@ print <<ENDHTML if $html;
>   <button onclick="toggleStackSubgroups()">Toggle stacking</button>
>   
>   <p>
> -$execute_colour = requests executing on the GPU<br>
> -$runnable_colour = runnable requests waiting for a slot on GPU<br>
> -$queued_colour = requests waiting on fences and dependencies before they are runnable<br>
> +<b>Timeline request view:</b>
> +<table>
> +<tr><td colspan='4'>$timeline_text</td></tr>
> +<tr>
> +<td align='center'><div style='$queued_style'>QUEUED</div></td>
> +<td align='center'><div style='$ready_style'>READY</div></td>
> +<td align='center'><div style='$execute_style'>EXECUTE</div></td>
> +<td align='center'><div style='$ctxsave_style'>CTXSAVE</div></td>
> +</tr><tr>
> +<td></td>
> +<td></td>
> +<td align='center'><div style='$incomplete_style'>(INCOMPLETE)</div></td>
> +<td></td>
> +</tr/></table>
> +</p>
> +<p>
> +<small>
> +QUEUED = requests executing on the GPU<br>
> +READY = runnable requests waiting for a slot on GPU<br>
> +EXECUTE = requests waiting on fences and dependencies before they are runnable<br>
> +CTXSAVE = GPU saving the context image<br>
> +</small>
>   </p>
>   <p>
>   Boxes are in format 'ctx-id/seqno'.
> @@ -873,17 +897,31 @@ sub sortQueue {
>   
>   sub ctx_colour
>   {
> -	my ($ctx, $stage) = (@_);
> +	my ($ctx, $stage, $lfac) = (@_);
>   	my ($s, $l);
>   	my $val;
>   
>   	unless ($colour_contexts) {
>   		if ($stage eq 'queue') {
> -			return 'lightblue;';
> +			$val = 210;
> +			$s = 65;
> +			$l = 52;
>   		} elsif ($stage eq 'ready') {
> -			return 'lightgrey;';
> +			$val = 0;
> +			$s = 0;
> +			$l = 47;
>   		} elsif ($stage eq 'execute') {
> -			return 'pink;';
> +			$val = 346;
> +			$s = 68;
> +			$l = 65;
> +		} elsif ($stage eq 'ctxsave') {
> +			$val = 26;
> +			$s = 90;
> +			$l = 52;
> +		} elsif ($stage eq 'incomplete') {
> +			$val = 0;
> +			$s = 85;
> +			$l = 50;
>   		}
>   	} else {
>   		if ($stage eq 'queue') {
> @@ -895,12 +933,45 @@ sub ctx_colour
>   		} elsif ($stage eq 'execute') {
>   			$s = 80;
>   			$l = 65;
> +		} elsif ($stage eq 'ctxsave') {
> +			$s = 75;
> +			$l = 70;
> +		} elsif ($stage eq 'incomplete') {
> +			$s = 80;
> +			$l = 25;
>   		}
> +
> +		$val = int(360 / ($max_ctx - $min_ctx + 1)) * ($ctx - $min_ctx);
>   	}
>   
> -	$val = int(360 / ($max_ctx - $min_ctx + 1)) * ($ctx - $min_ctx);
> +	$l = int($l * $lfac);
>   
> -	return "hsl($val, $s%, $l%);";
> +	return "hsl($val, $s%, $l%)";
> +}
> +
> +sub box_style
> +{
> +	my ($ctx, $stage) = @_;
> +	my $deg;
> +
> +	if ($stage eq 'queue') {
> +		$deg = 90;
> +	} elsif ($stage eq 'ready') {
> +		$deg = 45;
> +	} elsif ($stage eq 'execute') {
> +		$deg = 0;
> +	} elsif ($stage eq 'ctxsave') {
> +		$deg = 105;
> +	} elsif ($stage eq 'incomplete') {
> +		$deg = 0;
> +	}
> +
> +	return 'color: black; background: repeating-linear-gradient(' .
> +		$deg . 'deg, ' .
> +		ctx_colour($ctx, $stage, 1.0) . ', ' .
> +		ctx_colour($ctx, $stage, 1.0) . ' 10px, ' .
> +		ctx_colour($ctx, $stage, 0.90) . ' 10px, ' .
> +		ctx_colour($ctx, $stage, 0.90) . ' 20px);';
>   }
>   
>   my $i = 0;
> @@ -917,8 +988,7 @@ foreach my $key (sort sortQueue keys %db) {
>   	# submit to execute
>   	unless (exists $skip_box{'queue'}) {
>   		$skey = 2 * $max_seqno * $ctx + 2 * $seqno;
> -		$style = 'color: black; background-color: ' .
> -			 ctx_colour($ctx, 'queue');
> +		$style = box_style($ctx, 'queue');
>   		$content = "$name<br>$db{$key}->{'submit-delay'}us <small>($db{$key}->{'execute-delay'}us)</small>";
>   		$startend = 'start: \'' . ts($queue) . '\', end: \'' . ts($submit) . '\'';
>   		print "\t{id: $i, key: $skey, $type group: $group, subgroup: 1, subgroupOrder: 1, content: '$content', $startend, style: \'$style\'},\n";
> @@ -928,8 +998,7 @@ foreach my $key (sort sortQueue keys %db) {
>   	# execute to start
>   	unless (exists $skip_box{'ready'}) {
>   		$skey = 2 * $max_seqno * $ctx + 2 * $seqno + 1;
> -		$style = 'color: black; background-color: ' .
> -			 ctx_colour($ctx, 'ready');
> +		$style = box_style($ctx, 'ready');
>   		$content = "<small>$name<br>$db{$key}->{'execute-delay'}us</small>";
>   		$startend = 'start: \'' . ts($submit) . '\', end: \'' . ts($start) . '\'';
>   		print "\t{id: $i, key: $skey, $type group: $group, subgroup: 1, subgroupOrder: 2, content: '$content', $startend, style: \'$style\'},\n";
> @@ -939,12 +1008,9 @@ foreach my $key (sort sortQueue keys %db) {
>   	# start to user interrupt
>   	unless (exists $skip_box{'execute'}) {
>   		$skey = -2 * $max_seqno * $ctx - 2 * $seqno - 1;
> -		if (exists $db{$key}->{'incomplete'}) {
> -			$style = 'color: white; background-color: red;';
> -		} else {
> -			$style = 'color: black; background-color: ' .
> -				  ctx_colour($ctx, 'execute');
> -		}
> +		$style = box_style($ctx,
> +				   exists $db{$key}->{'incomplete'} ?
> +				   'incomplete' : 'execute');
>   		$content = "$name <small>$db{$key}->{'port'}</small>";
>   		$content .= ' <small><i>???</i></small> ' if exists $db{$key}->{'incomplete'};
>   		$content .= ' <small><i>++</i></small> ' if exists $db{$key}->{'no-end'};
> @@ -958,7 +1024,7 @@ foreach my $key (sort sortQueue keys %db) {
>   	# user interrupt to context complete
>   	unless (exists $skip_box{'ctxsave'}) {
>   		$skey = -2 * $max_seqno * $ctx - 2 * $seqno;
> -		$style = 'color: black; background-color: orange;';
> +		$style = box_style($ctx, 'ctxsave');
>   		my $ctxsave = $db{$key}->{'end'} - $db{$key}->{'notify'};
>   		$content = "<small>$name<br>${ctxsave}us</small>";
>   		$content .= ' <small><i>???</i></small> ' if exists $db{$key}->{'incomplete'};


[-- Attachment #2: 0001-trace.pl-Improved-key-colours.patch --]
[-- Type: text/plain, Size: 3245 bytes --]

From df66e1353cc9550fb0a8a79b98dc8f8dc85ed993 Mon Sep 17 00:00:00 2001
From: John Harrison <John.C.Harrison@Intel.com>
Date: Tue, 10 Jul 2018 14:53:16 -0700
Subject: [PATCH 01/21] trace.pl: Improved key/colours

---
 scripts/trace.pl | 50 +++++++++++++++++++++++++++++++-------------------
 1 file changed, 31 insertions(+), 19 deletions(-)

diff --git a/scripts/trace.pl b/scripts/trace.pl
index 60a8e441..38379737 100755
--- a/scripts/trace.pl
+++ b/scripts/trace.pl
@@ -740,6 +740,29 @@ my $timeline_text = $colour_contexts ?
 		    'Per context coloured shading like:' : 'Box shading like:';
 
 my %ctx_colours;
+my $ctx_table;
+
+sub generate_ctx_table
+{
+	my @states = ("queue", "ready", "execute", "ctxsave", "incomplete");
+	my @ctxts;
+
+	if( $colour_contexts ) {
+		@ctxts = sort keys %ctxdb;
+	} else {
+		@ctxts = ($min_ctx);
+	}
+
+	$ctx_table = "";
+	foreach my $ctx (@ctxts) {
+		$ctx_table .= "<tr>\n";
+		$ctx_table .= "  <td>Context: $ctx</td>\n" if $colour_contexts;
+		foreach my $state (@states) {
+			$ctx_table .= "  <td align='center'><div style='" . box_style($ctx, $state) . "'>&nbsp;&nbsp;&nbsp;" . uc($state) . "&nbsp;&nbsp;&nbsp;<p>&nbsp;</div></td>\n";
+		}
+		$ctx_table .= "</tr>";
+	}
+}
 
 sub generate_ctx_colours
 {
@@ -753,12 +776,7 @@ sub generate_ctx_colours
 
 
 generate_ctx_colours() if $html and $colour_contexts;
-
-my $queued_style = box_style($min_ctx, 'queue');
-my $ready_style = box_style($min_ctx, 'ready');
-my $execute_style = box_style($min_ctx, 'execute');
-my $ctxsave_style = box_style($min_ctx, 'ctxsave');
-my $incomplete_style = box_style($min_ctx, 'incomplete');
+generate_ctx_table() if $html;
 
 print <<ENDHTML if $html;
 <!DOCTYPE HTML>
@@ -780,24 +798,16 @@ print <<ENDHTML if $html;
 <b>Timeline request view:</b>
 <table>
 <tr><td colspan='4'>$timeline_text</td></tr>
-<tr>
-<td align='center'><div style='$queued_style'>QUEUED</div></td>
-<td align='center'><div style='$ready_style'>READY</div></td>
-<td align='center'><div style='$execute_style'>EXECUTE</div></td>
-<td align='center'><div style='$ctxsave_style'>CTXSAVE</div></td>
-</tr><tr>
-<td></td>
-<td></td>
-<td align='center'><div style='$incomplete_style'>(INCOMPLETE)</div></td>
-<td></td>
-</tr/></table>
+$ctx_table
+</table>
 </p>
 <p>
 <small>
-QUEUED = requests executing on the GPU<br>
+QUEUE = requests executing on the GPU<br>
 READY = runnable requests waiting for a slot on GPU<br>
 EXECUTE = requests waiting on fences and dependencies before they are runnable<br>
 CTXSAVE = GPU saving the context image<br>
+INCOMPLETE = request has stopped executing but is not yet complete (e.g. it was pre-empted)
 </small>
 </p>
 <p>
@@ -974,9 +984,11 @@ sub box_style
 {
 	my ($ctx, $stage) = @_;
 	my $deg;
+	my $text_col = 'white';
 
 	if ($stage eq 'queue') {
 		$deg = 90;
+		$text_col = 'black' if $colour_contexts;
 	} elsif ($stage eq 'ready') {
 		$deg = 45;
 	} elsif ($stage eq 'execute') {
@@ -987,7 +999,7 @@ sub box_style
 		$deg = 0;
 	}
 
-	return 'color: black; background: repeating-linear-gradient(' .
+	return "color: $text_col; background: repeating-linear-gradient(" .
 		$deg . 'deg, ' .
 		ctx_colour($ctx, $stage, 1.0) . ', ' .
 		ctx_colour($ctx, $stage, 1.0) . ' 10px, ' .
-- 
2.16.1


[-- Attachment #3: Type: text/plain, Size: 160 bytes --]

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 45+ messages in thread

* Re: [Intel-gfx] [PATCH i-g-t 02/11] trace.pl: Improve readability of graphical timeline representation
@ 2018-07-11 22:07     ` John Harrison
  0 siblings, 0 replies; 45+ messages in thread
From: John Harrison @ 2018-07-11 22:07 UTC (permalink / raw)
  To: Tvrtko Ursulin, igt-dev; +Cc: intel-gfx

[-- Attachment #1: Type: text/plain, Size: 9197 bytes --]

On 7/9/2018 6:19 AM, Tvrtko Ursulin wrote:
> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>
> We add stripes for different stages of request execution so it is easier
> to follow one context in the multi-colour mode.
>
> Vertical stripe pattern indicates pipeline "blockages" - requests waiting
> for dependencies before they are runnable.
>
> Diagonal stripes indicate runnable requests waiting for GPU time.
>
> Horizontal strips are requests executing on the GPU.
>
> Also use this new multi-coloured mode from media-bench.pl.
>
> v2:
>   John Harrison:
>   * Mention media-bench.pl in the commit.
>   * Fix HTML for single colour mode.
>
> v3:
>   * Rebase.
>   * Apply stripes to legacy colouring as well.
>
> v4:
>   John Harrison:
>   * Use per context colours for ctxsave and incomplete boxes.
>   * Clearer timeline legend.
>
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> Cc: John Harrison <John.C.Harrison@Intel.com>
> ---
>   scripts/media-bench.pl |   2 +-
>   scripts/trace.pl       | 112 ++++++++++++++++++++++++++++++++---------
>   2 files changed, 90 insertions(+), 24 deletions(-)
>
> diff --git a/scripts/media-bench.pl b/scripts/media-bench.pl
> index c5628c7f2836..375844d9cdf6 100755
> --- a/scripts/media-bench.pl
> +++ b/scripts/media-bench.pl
> @@ -207,7 +207,7 @@ sub trace_workload
>   	show_cmd($cmd);
>   	system($cmd);
>   
> -	$cmd = "perf script | $tracepl --html -x ctxsave -s ";
> +	$cmd = "perf script | $tracepl --html -x ctxsave -s -c ";
>   	$cmd .= join ' ', map("-i $_", @skip_engine);
>   	$cmd .= " > ${file}.html";
>   	show_cmd($cmd);
> diff --git a/scripts/trace.pl b/scripts/trace.pl
> index fd414f5a4b1e..1ec8b297d15e 100755
> --- a/scripts/trace.pl
> +++ b/scripts/trace.pl
> @@ -727,9 +727,14 @@ foreach my $key (keys %reqwait) {
>   say sprintf('GPU: %.2f%% idle, %.2f%% busy',
>   	     $flat_busy{'gpu-idle'}, $flat_busy{'gpu-busy'}) unless $html;
>   
> -my $queued_colour = $colour_contexts ? 'multi-colour light' : 'blue';
> -my $runnable_colour = $colour_contexts ? 'multi-colour dark' : 'grey';
> -my $execute_colour = $colour_contexts ? 'multi-colour' : 'pink';
> +my $timeline_text = $colour_contexts ?
> +		    'Per context coloured shading like:' : 'Box shading like:';
> +
> +my $queued_style = box_style($min_ctx, 'queue');
> +my $ready_style = box_style($min_ctx, 'ready');
> +my $execute_style = box_style($min_ctx, 'execute');
> +my $ctxsave_style = box_style($min_ctx, 'ctxsave');
> +my $incomplete_style = box_style($min_ctx, 'incomplete');

In context colouring mode, the legend is not especially useful as it is 
only coloured for one particular context (which at least for all of my 
traces, is the system context that only appears at the very end as a 
flush) and has no indication that other contexts will be significantly 
different. Also, I find the black text is really hard to read against 
the dark colour backgrounds. Plus the boxes are too small to actually 
work out what the shading is (for 'ready' and 'incomplete' if not all of 
them).

See attached patch for some tweaks. Basically, add all contexts to the 
key in colour mode, make the boxes bigger and use white text for most of 
it. Although the thought occurs that it might be worth limiting the 
legend to only four or five contexts and just putting an 'etc' at the 
end if there are more. Otherwise a trace with hundreds of contexts could 
be a problem! I'm guessing in that case, the difference in colour from 
one context to the next will be pretty minimal anyway.

>   
>   print <<ENDHTML if $html;
>   <!DOCTYPE HTML>
> @@ -751,9 +756,28 @@ print <<ENDHTML if $html;
>   <button onclick="toggleStackSubgroups()">Toggle stacking</button>
>   
>   <p>
> -$execute_colour = requests executing on the GPU<br>
> -$runnable_colour = runnable requests waiting for a slot on GPU<br>
> -$queued_colour = requests waiting on fences and dependencies before they are runnable<br>
> +<b>Timeline request view:</b>
> +<table>
> +<tr><td colspan='4'>$timeline_text</td></tr>
> +<tr>
> +<td align='center'><div style='$queued_style'>QUEUED</div></td>
> +<td align='center'><div style='$ready_style'>READY</div></td>
> +<td align='center'><div style='$execute_style'>EXECUTE</div></td>
> +<td align='center'><div style='$ctxsave_style'>CTXSAVE</div></td>
> +</tr><tr>
> +<td></td>
> +<td></td>
> +<td align='center'><div style='$incomplete_style'>(INCOMPLETE)</div></td>
> +<td></td>
> +</tr/></table>
> +</p>
> +<p>
> +<small>
> +QUEUED = requests executing on the GPU<br>
> +READY = runnable requests waiting for a slot on GPU<br>
> +EXECUTE = requests waiting on fences and dependencies before they are runnable<br>
> +CTXSAVE = GPU saving the context image<br>
> +</small>
>   </p>
>   <p>
>   Boxes are in format 'ctx-id/seqno'.
> @@ -873,17 +897,31 @@ sub sortQueue {
>   
>   sub ctx_colour
>   {
> -	my ($ctx, $stage) = (@_);
> +	my ($ctx, $stage, $lfac) = (@_);
>   	my ($s, $l);
>   	my $val;
>   
>   	unless ($colour_contexts) {
>   		if ($stage eq 'queue') {
> -			return 'lightblue;';
> +			$val = 210;
> +			$s = 65;
> +			$l = 52;
>   		} elsif ($stage eq 'ready') {
> -			return 'lightgrey;';
> +			$val = 0;
> +			$s = 0;
> +			$l = 47;
>   		} elsif ($stage eq 'execute') {
> -			return 'pink;';
> +			$val = 346;
> +			$s = 68;
> +			$l = 65;
> +		} elsif ($stage eq 'ctxsave') {
> +			$val = 26;
> +			$s = 90;
> +			$l = 52;
> +		} elsif ($stage eq 'incomplete') {
> +			$val = 0;
> +			$s = 85;
> +			$l = 50;
>   		}
>   	} else {
>   		if ($stage eq 'queue') {
> @@ -895,12 +933,45 @@ sub ctx_colour
>   		} elsif ($stage eq 'execute') {
>   			$s = 80;
>   			$l = 65;
> +		} elsif ($stage eq 'ctxsave') {
> +			$s = 75;
> +			$l = 70;
> +		} elsif ($stage eq 'incomplete') {
> +			$s = 80;
> +			$l = 25;
>   		}
> +
> +		$val = int(360 / ($max_ctx - $min_ctx + 1)) * ($ctx - $min_ctx);
>   	}
>   
> -	$val = int(360 / ($max_ctx - $min_ctx + 1)) * ($ctx - $min_ctx);
> +	$l = int($l * $lfac);
>   
> -	return "hsl($val, $s%, $l%);";
> +	return "hsl($val, $s%, $l%)";
> +}
> +
> +sub box_style
> +{
> +	my ($ctx, $stage) = @_;
> +	my $deg;
> +
> +	if ($stage eq 'queue') {
> +		$deg = 90;
> +	} elsif ($stage eq 'ready') {
> +		$deg = 45;
> +	} elsif ($stage eq 'execute') {
> +		$deg = 0;
> +	} elsif ($stage eq 'ctxsave') {
> +		$deg = 105;
> +	} elsif ($stage eq 'incomplete') {
> +		$deg = 0;
> +	}
> +
> +	return 'color: black; background: repeating-linear-gradient(' .
> +		$deg . 'deg, ' .
> +		ctx_colour($ctx, $stage, 1.0) . ', ' .
> +		ctx_colour($ctx, $stage, 1.0) . ' 10px, ' .
> +		ctx_colour($ctx, $stage, 0.90) . ' 10px, ' .
> +		ctx_colour($ctx, $stage, 0.90) . ' 20px);';
>   }
>   
>   my $i = 0;
> @@ -917,8 +988,7 @@ foreach my $key (sort sortQueue keys %db) {
>   	# submit to execute
>   	unless (exists $skip_box{'queue'}) {
>   		$skey = 2 * $max_seqno * $ctx + 2 * $seqno;
> -		$style = 'color: black; background-color: ' .
> -			 ctx_colour($ctx, 'queue');
> +		$style = box_style($ctx, 'queue');
>   		$content = "$name<br>$db{$key}->{'submit-delay'}us <small>($db{$key}->{'execute-delay'}us)</small>";
>   		$startend = 'start: \'' . ts($queue) . '\', end: \'' . ts($submit) . '\'';
>   		print "\t{id: $i, key: $skey, $type group: $group, subgroup: 1, subgroupOrder: 1, content: '$content', $startend, style: \'$style\'},\n";
> @@ -928,8 +998,7 @@ foreach my $key (sort sortQueue keys %db) {
>   	# execute to start
>   	unless (exists $skip_box{'ready'}) {
>   		$skey = 2 * $max_seqno * $ctx + 2 * $seqno + 1;
> -		$style = 'color: black; background-color: ' .
> -			 ctx_colour($ctx, 'ready');
> +		$style = box_style($ctx, 'ready');
>   		$content = "<small>$name<br>$db{$key}->{'execute-delay'}us</small>";
>   		$startend = 'start: \'' . ts($submit) . '\', end: \'' . ts($start) . '\'';
>   		print "\t{id: $i, key: $skey, $type group: $group, subgroup: 1, subgroupOrder: 2, content: '$content', $startend, style: \'$style\'},\n";
> @@ -939,12 +1008,9 @@ foreach my $key (sort sortQueue keys %db) {
>   	# start to user interrupt
>   	unless (exists $skip_box{'execute'}) {
>   		$skey = -2 * $max_seqno * $ctx - 2 * $seqno - 1;
> -		if (exists $db{$key}->{'incomplete'}) {
> -			$style = 'color: white; background-color: red;';
> -		} else {
> -			$style = 'color: black; background-color: ' .
> -				  ctx_colour($ctx, 'execute');
> -		}
> +		$style = box_style($ctx,
> +				   exists $db{$key}->{'incomplete'} ?
> +				   'incomplete' : 'execute');
>   		$content = "$name <small>$db{$key}->{'port'}</small>";
>   		$content .= ' <small><i>???</i></small> ' if exists $db{$key}->{'incomplete'};
>   		$content .= ' <small><i>++</i></small> ' if exists $db{$key}->{'no-end'};
> @@ -958,7 +1024,7 @@ foreach my $key (sort sortQueue keys %db) {
>   	# user interrupt to context complete
>   	unless (exists $skip_box{'ctxsave'}) {
>   		$skey = -2 * $max_seqno * $ctx - 2 * $seqno;
> -		$style = 'color: black; background-color: orange;';
> +		$style = box_style($ctx, 'ctxsave');
>   		my $ctxsave = $db{$key}->{'end'} - $db{$key}->{'notify'};
>   		$content = "<small>$name<br>${ctxsave}us</small>";
>   		$content .= ' <small><i>???</i></small> ' if exists $db{$key}->{'incomplete'};


[-- Attachment #2: 0001-trace.pl-Improved-key-colours.patch --]
[-- Type: text/plain, Size: 3245 bytes --]

From df66e1353cc9550fb0a8a79b98dc8f8dc85ed993 Mon Sep 17 00:00:00 2001
From: John Harrison <John.C.Harrison@Intel.com>
Date: Tue, 10 Jul 2018 14:53:16 -0700
Subject: [PATCH 01/21] trace.pl: Improved key/colours

---
 scripts/trace.pl | 50 +++++++++++++++++++++++++++++++-------------------
 1 file changed, 31 insertions(+), 19 deletions(-)

diff --git a/scripts/trace.pl b/scripts/trace.pl
index 60a8e441..38379737 100755
--- a/scripts/trace.pl
+++ b/scripts/trace.pl
@@ -740,6 +740,29 @@ my $timeline_text = $colour_contexts ?
 		    'Per context coloured shading like:' : 'Box shading like:';
 
 my %ctx_colours;
+my $ctx_table;
+
+sub generate_ctx_table
+{
+	my @states = ("queue", "ready", "execute", "ctxsave", "incomplete");
+	my @ctxts;
+
+	if( $colour_contexts ) {
+		@ctxts = sort keys %ctxdb;
+	} else {
+		@ctxts = ($min_ctx);
+	}
+
+	$ctx_table = "";
+	foreach my $ctx (@ctxts) {
+		$ctx_table .= "<tr>\n";
+		$ctx_table .= "  <td>Context: $ctx</td>\n" if $colour_contexts;
+		foreach my $state (@states) {
+			$ctx_table .= "  <td align='center'><div style='" . box_style($ctx, $state) . "'>&nbsp;&nbsp;&nbsp;" . uc($state) . "&nbsp;&nbsp;&nbsp;<p>&nbsp;</div></td>\n";
+		}
+		$ctx_table .= "</tr>";
+	}
+}
 
 sub generate_ctx_colours
 {
@@ -753,12 +776,7 @@ sub generate_ctx_colours
 
 
 generate_ctx_colours() if $html and $colour_contexts;
-
-my $queued_style = box_style($min_ctx, 'queue');
-my $ready_style = box_style($min_ctx, 'ready');
-my $execute_style = box_style($min_ctx, 'execute');
-my $ctxsave_style = box_style($min_ctx, 'ctxsave');
-my $incomplete_style = box_style($min_ctx, 'incomplete');
+generate_ctx_table() if $html;
 
 print <<ENDHTML if $html;
 <!DOCTYPE HTML>
@@ -780,24 +798,16 @@ print <<ENDHTML if $html;
 <b>Timeline request view:</b>
 <table>
 <tr><td colspan='4'>$timeline_text</td></tr>
-<tr>
-<td align='center'><div style='$queued_style'>QUEUED</div></td>
-<td align='center'><div style='$ready_style'>READY</div></td>
-<td align='center'><div style='$execute_style'>EXECUTE</div></td>
-<td align='center'><div style='$ctxsave_style'>CTXSAVE</div></td>
-</tr><tr>
-<td></td>
-<td></td>
-<td align='center'><div style='$incomplete_style'>(INCOMPLETE)</div></td>
-<td></td>
-</tr/></table>
+$ctx_table
+</table>
 </p>
 <p>
 <small>
-QUEUED = requests executing on the GPU<br>
+QUEUE = requests executing on the GPU<br>
 READY = runnable requests waiting for a slot on GPU<br>
 EXECUTE = requests waiting on fences and dependencies before they are runnable<br>
 CTXSAVE = GPU saving the context image<br>
+INCOMPLETE = request has stopped executing but is not yet complete (e.g. it was pre-empted)
 </small>
 </p>
 <p>
@@ -974,9 +984,11 @@ sub box_style
 {
 	my ($ctx, $stage) = @_;
 	my $deg;
+	my $text_col = 'white';
 
 	if ($stage eq 'queue') {
 		$deg = 90;
+		$text_col = 'black' if $colour_contexts;
 	} elsif ($stage eq 'ready') {
 		$deg = 45;
 	} elsif ($stage eq 'execute') {
@@ -987,7 +999,7 @@ sub box_style
 		$deg = 0;
 	}
 
-	return 'color: black; background: repeating-linear-gradient(' .
+	return "color: $text_col; background: repeating-linear-gradient(" .
 		$deg . 'deg, ' .
 		ctx_colour($ctx, $stage, 1.0) . ', ' .
 		ctx_colour($ctx, $stage, 1.0) . ' 10px, ' .
-- 
2.16.1


[-- Attachment #3: Type: text/plain, Size: 160 bytes --]

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 45+ messages in thread

* Re: [PATCH i-g-t 06/11] trace.pl: Improve context colouring for large context id's
  2018-07-09 13:19   ` [igt-dev] " Tvrtko Ursulin
@ 2018-07-11 22:16     ` John Harrison
  -1 siblings, 0 replies; 45+ messages in thread
From: John Harrison @ 2018-07-11 22:16 UTC (permalink / raw)
  To: Tvrtko Ursulin, igt-dev; +Cc: intel-gfx

On 7/9/2018 6:19 AM, Tvrtko Ursulin wrote:
> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>
> John reports that on a long runnning systems the huge disparity between
> kernel context and user context id's causes all interesting colours to be
> clustered too close together.
>
> Fix this by assigning colours to seen contexts instead of basing purely
> on context id's.
>
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> Suggested-by: John Harrison <John.C.Harrison@Intel.com>
> Cc: John Harrison <John.C.Harrison@Intel.com>
> ---
>   scripts/trace.pl | 25 ++++++++++++++++++++-----
>   1 file changed, 20 insertions(+), 5 deletions(-)
>
> diff --git a/scripts/trace.pl b/scripts/trace.pl
> index aeaf2392162e..60a8e441c1d9 100755
> --- a/scripts/trace.pl
> +++ b/scripts/trace.pl
> @@ -336,7 +336,7 @@ sub sanitize_ctx
>   {
>   	my ($ctx, $ring) = @_;
>   
> -	if (exists $ctxdb{$ctx}) {
> +	if (exists $ctxdb{$ctx} and $ctxdb{$ctx} > 1) {
>   		return $ctx . '.' . $ctxdb{$ctx};
>   	} else {
>   		return $ctx;
> @@ -425,6 +425,8 @@ while (<>) {
>   			$ctxdb{$orig_ctx}++;
>   			$ctx = sanitize_ctx($orig_ctx, $ring);
>   			$key = db_key($ring, $ctx, $seqno);
> +		} else {
> +			$ctxdb{$orig_ctx} = 1;
>   		}
>   
>   		$queue{$key} = $time;
> @@ -592,7 +594,7 @@ foreach my $key (@sorted_keys) {
>   
>   my $last_ts = 0;
>   my $first_ts;
> -my ($min_ctx, $max_ctx);
> +my $min_ctx;
>   
>   foreach my $key (@sorted_keys) {
>   	my $ring = $db{$key}->{'ring'};
> @@ -604,8 +606,6 @@ foreach my $key (@sorted_keys) {
>   	$last_ts = $end if $end > $last_ts;
>   	$min_ctx = $db{$key}->{'ctx'} if not defined $min_ctx or
>   					 $db{$key}->{'ctx'} < $min_ctx;
> -	$max_ctx = $db{$key}->{'ctx'} if not defined $max_ctx or
> -					 $db{$key}->{'ctx'} > $max_ctx;
>   
>   	$db{$key}->{'context-complete-delay'} = $end - $notify;
>   	$db{$key}->{'execute-delay'} = $start - $db{$key}->{'submit'};
> @@ -739,6 +739,21 @@ say sprintf('GPU: %.2f%% idle, %.2f%% busy',
>   my $timeline_text = $colour_contexts ?
>   		    'Per context coloured shading like:' : 'Box shading like:';
>   
> +my %ctx_colours;
> +
> +sub generate_ctx_colours
> +{
> +	my $num_ctx = keys %ctxdb;
> +	my $i = 0;
> +
> +	foreach my $ctx (sort keys %ctxdb) {
> +		$ctx_colours{$ctx} = int(360 / $num_ctx * $i++);
> +	}
> +}
> +
> +
> +generate_ctx_colours() if $html and $colour_contexts;
> +
>   my $queued_style = box_style($min_ctx, 'queue');
>   my $ready_style = box_style($min_ctx, 'ready');
>   my $execute_style = box_style($min_ctx, 'execute');
> @@ -947,7 +962,7 @@ sub ctx_colour
>   			$l = 25;
>   		}
>   
> -		$val = int(360 / ($max_ctx - $min_ctx + 1)) * ($ctx - $min_ctx);
> +		$val = $ctx_colours{$ctx};
>   	}
>   
>   	$l = int($l * $lfac);

Oops, I think I had already squashed this patch into patch #2 in my 
brain. So some of my comments (and certainly the legend tweak patch) 
probably apply to here instead. So I guess you might need to either 
split my comments/tweaks up across the two patches or possibly just 
squash this one into the other for real :).

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [igt-dev] [PATCH i-g-t 06/11] trace.pl: Improve context colouring for large context id's
@ 2018-07-11 22:16     ` John Harrison
  0 siblings, 0 replies; 45+ messages in thread
From: John Harrison @ 2018-07-11 22:16 UTC (permalink / raw)
  To: Tvrtko Ursulin, igt-dev; +Cc: intel-gfx, Tvrtko Ursulin

On 7/9/2018 6:19 AM, Tvrtko Ursulin wrote:
> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>
> John reports that on a long runnning systems the huge disparity between
> kernel context and user context id's causes all interesting colours to be
> clustered too close together.
>
> Fix this by assigning colours to seen contexts instead of basing purely
> on context id's.
>
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> Suggested-by: John Harrison <John.C.Harrison@Intel.com>
> Cc: John Harrison <John.C.Harrison@Intel.com>
> ---
>   scripts/trace.pl | 25 ++++++++++++++++++++-----
>   1 file changed, 20 insertions(+), 5 deletions(-)
>
> diff --git a/scripts/trace.pl b/scripts/trace.pl
> index aeaf2392162e..60a8e441c1d9 100755
> --- a/scripts/trace.pl
> +++ b/scripts/trace.pl
> @@ -336,7 +336,7 @@ sub sanitize_ctx
>   {
>   	my ($ctx, $ring) = @_;
>   
> -	if (exists $ctxdb{$ctx}) {
> +	if (exists $ctxdb{$ctx} and $ctxdb{$ctx} > 1) {
>   		return $ctx . '.' . $ctxdb{$ctx};
>   	} else {
>   		return $ctx;
> @@ -425,6 +425,8 @@ while (<>) {
>   			$ctxdb{$orig_ctx}++;
>   			$ctx = sanitize_ctx($orig_ctx, $ring);
>   			$key = db_key($ring, $ctx, $seqno);
> +		} else {
> +			$ctxdb{$orig_ctx} = 1;
>   		}
>   
>   		$queue{$key} = $time;
> @@ -592,7 +594,7 @@ foreach my $key (@sorted_keys) {
>   
>   my $last_ts = 0;
>   my $first_ts;
> -my ($min_ctx, $max_ctx);
> +my $min_ctx;
>   
>   foreach my $key (@sorted_keys) {
>   	my $ring = $db{$key}->{'ring'};
> @@ -604,8 +606,6 @@ foreach my $key (@sorted_keys) {
>   	$last_ts = $end if $end > $last_ts;
>   	$min_ctx = $db{$key}->{'ctx'} if not defined $min_ctx or
>   					 $db{$key}->{'ctx'} < $min_ctx;
> -	$max_ctx = $db{$key}->{'ctx'} if not defined $max_ctx or
> -					 $db{$key}->{'ctx'} > $max_ctx;
>   
>   	$db{$key}->{'context-complete-delay'} = $end - $notify;
>   	$db{$key}->{'execute-delay'} = $start - $db{$key}->{'submit'};
> @@ -739,6 +739,21 @@ say sprintf('GPU: %.2f%% idle, %.2f%% busy',
>   my $timeline_text = $colour_contexts ?
>   		    'Per context coloured shading like:' : 'Box shading like:';
>   
> +my %ctx_colours;
> +
> +sub generate_ctx_colours
> +{
> +	my $num_ctx = keys %ctxdb;
> +	my $i = 0;
> +
> +	foreach my $ctx (sort keys %ctxdb) {
> +		$ctx_colours{$ctx} = int(360 / $num_ctx * $i++);
> +	}
> +}
> +
> +
> +generate_ctx_colours() if $html and $colour_contexts;
> +
>   my $queued_style = box_style($min_ctx, 'queue');
>   my $ready_style = box_style($min_ctx, 'ready');
>   my $execute_style = box_style($min_ctx, 'execute');
> @@ -947,7 +962,7 @@ sub ctx_colour
>   			$l = 25;
>   		}
>   
> -		$val = int(360 / ($max_ctx - $min_ctx + 1)) * ($ctx - $min_ctx);
> +		$val = $ctx_colours{$ctx};
>   	}
>   
>   	$l = int($l * $lfac);

Oops, I think I had already squashed this patch into patch #2 in my 
brain. So some of my comments (and certainly the legend tweak patch) 
probably apply to here instead. So I guess you might need to either 
split my comments/tweaks up across the two patches or possibly just 
squash this one into the other for real :).

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [igt-dev] ✗ Fi.CI.BAT: failure for trace.pl fixes and improvements (rev2)
  2018-07-09 13:19 ` [Intel-gfx] " Tvrtko Ursulin
                   ` (13 preceding siblings ...)
  (?)
@ 2018-07-11 23:21 ` Patchwork
  -1 siblings, 0 replies; 45+ messages in thread
From: Patchwork @ 2018-07-11 23:21 UTC (permalink / raw)
  To: John Harrison; +Cc: igt-dev

== Series Details ==

Series: trace.pl fixes and improvements (rev2)
URL   : https://patchwork.freedesktop.org/series/46177/
State : failure

== Summary ==

Applying: trace.pl: Fix no context colouring mode
Applying: trace.pl: Improve readability of graphical timeline representation
Using index info to reconstruct a base tree...
M	scripts/trace.pl
Falling back to patching base and 3-way merge...
Auto-merging scripts/trace.pl
CONFLICT (content): Merge conflict in scripts/trace.pl
Patch failed at 0002 trace.pl: Improve readability of graphical timeline representation
Use 'git am --show-current-patch' to see the failed patch
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [PATCH i-g-t 07/11] trace.pl: Fix engine busy accounting in split mode
  2018-07-09 13:20   ` [igt-dev] " Tvrtko Ursulin
@ 2018-07-12  6:38     ` John Harrison
  -1 siblings, 0 replies; 45+ messages in thread
From: John Harrison @ 2018-07-12  6:38 UTC (permalink / raw)
  To: Tvrtko Ursulin, igt-dev; +Cc: intel-gfx


[-- Attachment #1.1: Type: text/plain, Size: 1123 bytes --]

On 7/9/2018 6:20 AM, Tvrtko Ursulin wrote:
> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>
> In split mode all requests have to be added up since they were previously
> re-arranged so there is no overlap.
>
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> Cc: John Harrison <John.C.Harrison@intel.com>
> ---
>   scripts/trace.pl | 3 ++-
>   1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/scripts/trace.pl b/scripts/trace.pl
> index 60a8e441c1d9..52372e224da5 100755
> --- a/scripts/trace.pl
> +++ b/scripts/trace.pl
> @@ -612,7 +612,8 @@ foreach my $key (@sorted_keys) {
>   	$db{$key}->{'submit-delay'} = $db{$key}->{'submit'} - $db{$key}->{'queue'};
>   	$db{$key}->{'duration'} = $notify - $start;
>   
> -	$running{$ring} += $end - $start unless exists $db{$key}->{'no-end'};
> +	$running{$ring} += $end - $start if $correct_durations or
> +					    not exists $db{$key}->{'no-end'};
>   	$runnable{$ring} += $db{$key}->{'execute-delay'};
>   	$queued{$ring} += $start - $db{$key}->{'execute-delay'} - $db{$key}->{'queue'};
>   

Reviewed-by: John Harrison <John.C.Harrison@Intel.com>


[-- Attachment #1.2: Type: text/html, Size: 1765 bytes --]

[-- Attachment #2: Type: text/plain, Size: 160 bytes --]

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [igt-dev] [PATCH i-g-t 07/11] trace.pl: Fix engine busy accounting in split mode
@ 2018-07-12  6:38     ` John Harrison
  0 siblings, 0 replies; 45+ messages in thread
From: John Harrison @ 2018-07-12  6:38 UTC (permalink / raw)
  To: Tvrtko Ursulin, igt-dev; +Cc: intel-gfx, Tvrtko Ursulin


[-- Attachment #1.1: Type: text/plain, Size: 1123 bytes --]

On 7/9/2018 6:20 AM, Tvrtko Ursulin wrote:
> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>
> In split mode all requests have to be added up since they were previously
> re-arranged so there is no overlap.
>
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> Cc: John Harrison <John.C.Harrison@intel.com>
> ---
>   scripts/trace.pl | 3 ++-
>   1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/scripts/trace.pl b/scripts/trace.pl
> index 60a8e441c1d9..52372e224da5 100755
> --- a/scripts/trace.pl
> +++ b/scripts/trace.pl
> @@ -612,7 +612,8 @@ foreach my $key (@sorted_keys) {
>   	$db{$key}->{'submit-delay'} = $db{$key}->{'submit'} - $db{$key}->{'queue'};
>   	$db{$key}->{'duration'} = $notify - $start;
>   
> -	$running{$ring} += $end - $start unless exists $db{$key}->{'no-end'};
> +	$running{$ring} += $end - $start if $correct_durations or
> +					    not exists $db{$key}->{'no-end'};
>   	$runnable{$ring} += $db{$key}->{'execute-delay'};
>   	$queued{$ring} += $start - $db{$key}->{'execute-delay'} - $db{$key}->{'queue'};
>   

Reviewed-by: John Harrison <John.C.Harrison@Intel.com>


[-- Attachment #1.2: Type: text/html, Size: 1765 bytes --]

[-- Attachment #2: Type: text/plain, Size: 154 bytes --]

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 45+ messages in thread

end of thread, other threads:[~2018-07-12  6:38 UTC | newest]

Thread overview: 45+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-07-09 13:19 [PATCH i-g-t 00/11] trace.pl fixes and improvements Tvrtko Ursulin
2018-07-09 13:19 ` [Intel-gfx] " Tvrtko Ursulin
2018-07-09 13:19 ` [PATCH i-g-t 01/11] trace.pl: Fix no context colouring mode Tvrtko Ursulin
2018-07-09 13:19   ` [igt-dev] " Tvrtko Ursulin
2018-07-11 17:49   ` John Harrison
2018-07-11 17:49     ` [igt-dev] " John Harrison
2018-07-09 13:19 ` [PATCH i-g-t 02/11] trace.pl: Improve readability of graphical timeline representation Tvrtko Ursulin
2018-07-09 13:19   ` [igt-dev] " Tvrtko Ursulin
2018-07-11 22:07   ` John Harrison
2018-07-11 22:07     ` [Intel-gfx] " John Harrison
2018-07-09 13:19 ` [PATCH i-g-t 03/11] trace.pl: Scale timeline for better precision Tvrtko Ursulin
2018-07-09 13:19   ` [igt-dev] " Tvrtko Ursulin
2018-07-09 13:26   ` Chris Wilson
2018-07-09 13:26     ` Chris Wilson
2018-07-09 13:40     ` Tvrtko Ursulin
2018-07-09 13:40       ` [Intel-gfx] " Tvrtko Ursulin
2018-07-11 17:52   ` John Harrison
2018-07-11 17:52     ` [igt-dev] " John Harrison
2018-07-09 13:19 ` [PATCH i-g-t 04/11] trace.pl: Put single context at single vertical slot Tvrtko Ursulin
2018-07-09 13:19   ` [igt-dev] " Tvrtko Ursulin
2018-07-11 17:55   ` John Harrison
2018-07-11 17:55     ` [igt-dev] " John Harrison
2018-07-09 13:19 ` [PATCH i-g-t 05/11] trace.pl: Fix HTML timestamp generation Tvrtko Ursulin
2018-07-09 13:19   ` [igt-dev] " Tvrtko Ursulin
2018-07-11 18:01   ` John Harrison
2018-07-11 18:01     ` [igt-dev] " John Harrison
2018-07-09 13:19 ` [PATCH i-g-t 06/11] trace.pl: Improve context colouring for large context id's Tvrtko Ursulin
2018-07-09 13:19   ` [igt-dev] " Tvrtko Ursulin
2018-07-11 22:16   ` John Harrison
2018-07-11 22:16     ` [igt-dev] " John Harrison
2018-07-09 13:20 ` [PATCH i-g-t 07/11] trace.pl: Fix engine busy accounting in split mode Tvrtko Ursulin
2018-07-09 13:20   ` [igt-dev] " Tvrtko Ursulin
2018-07-12  6:38   ` John Harrison
2018-07-12  6:38     ` [igt-dev] " John Harrison
2018-07-09 13:20 ` [PATCH i-g-t 08/11] trace.pl: Context save only applies to last request of a bunch Tvrtko Ursulin
2018-07-09 13:20   ` [igt-dev] " Tvrtko Ursulin
2018-07-09 13:20 ` [PATCH i-g-t 09/11] trace.pl: Fix incomplete request handling Tvrtko Ursulin
2018-07-09 13:20   ` [igt-dev] " Tvrtko Ursulin
2018-07-09 13:20 ` [PATCH i-g-t 10/11] trace.pl: Basic preemption support Tvrtko Ursulin
2018-07-09 13:20   ` [igt-dev] " Tvrtko Ursulin
2018-07-09 13:20 ` [PATCH i-g-t 11/11] trace.pl: Fix request split mode Tvrtko Ursulin
2018-07-09 13:20   ` [igt-dev] " Tvrtko Ursulin
2018-07-09 14:53 ` [igt-dev] ✓ Fi.CI.BAT: success for trace.pl fixes and improvements Patchwork
2018-07-09 21:50 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork
2018-07-11 23:21 ` [igt-dev] ✗ Fi.CI.BAT: failure for trace.pl fixes and improvements (rev2) Patchwork

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.