Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 70d815a3 authored by Frederic Weisbecker's avatar Frederic Weisbecker
Browse files

perf, sched migration: Make it vertically scrollable



With scheduler traces covering more than two cpus, rectangles
of the CPUs 3 and more are not visibles.

This makes the vertical navigation scrollable so that all of the
CPUs rectangles are available.

We also want to be able to zoom vertically, so that we can fit at
best the screen with CPU rectangles, but that's for later.

Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Nikhil Rao <ncrao@google.com>
Cc: Tom Zanussi <tzanussi@gmail.com>
parent 0cddf56a
Loading
Loading
Loading
Loading
+20 −9
Original line number Original line Diff line number Diff line
@@ -43,18 +43,20 @@ class RootFrame(wx.Frame):
		self.timeslices = timeslices
		self.timeslices = timeslices
		(self.ts_start, self.ts_end) = timeslices.interval()
		(self.ts_start, self.ts_end) = timeslices.interval()
		self.update_width_virtual()
		self.update_width_virtual()
		self.nr_cpus = timeslices.max_cpu() + 1
		self.height_virtual = RootFrame.Y_OFFSET + (self.nr_cpus * (RootFrame.CPU_HEIGHT + RootFrame.CPU_SPACE))


		# whole window panel
		# whole window panel
		self.panel = wx.Panel(self, size=(self.screen_width, self.screen_height))
		self.panel = wx.Panel(self, size=(self.screen_width, self.screen_height))


		# scrollable container
		# scrollable container
		self.scroll = wx.ScrolledWindow(self.panel)
		self.scroll = wx.ScrolledWindow(self.panel)
		self.scroll.SetScrollbars(self.scroll_scale, self.scroll_scale, self.width_virtual / self.scroll_scale, 100 / 10)
		self.scroll.SetScrollbars(self.scroll_scale, self.scroll_scale, self.width_virtual / self.scroll_scale, self.height_virtual / self.scroll_scale)
		self.scroll.EnableScrolling(True, True)
		self.scroll.EnableScrolling(True, True)
		self.scroll.SetFocus()
		self.scroll.SetFocus()


		# scrollable drawing area
		# scrollable drawing area
		self.scroll_panel = wx.Panel(self.scroll, size=(self.screen_width, self.screen_height / 2))
		self.scroll_panel = wx.Panel(self.scroll, size=(self.screen_width - 15, self.screen_height / 2))
		self.scroll_panel.Bind(wx.EVT_PAINT, self.on_paint)
		self.scroll_panel.Bind(wx.EVT_PAINT, self.on_paint)
		self.scroll_panel.Bind(wx.EVT_KEY_DOWN, self.on_key_press)
		self.scroll_panel.Bind(wx.EVT_KEY_DOWN, self.on_key_press)
		self.scroll_panel.Bind(wx.EVT_LEFT_DOWN, self.on_mouse_down)
		self.scroll_panel.Bind(wx.EVT_LEFT_DOWN, self.on_mouse_down)
@@ -65,9 +67,8 @@ class RootFrame(wx.Frame):
		self.scroll.Fit()
		self.scroll.Fit()
		self.Fit()
		self.Fit()


		self.scroll_panel.SetDimensions(-1, -1, self.width_virtual, -1, wx.SIZE_USE_EXISTING)
		self.scroll_panel.SetDimensions(-1, -1, self.width_virtual, self.height_virtual, wx.SIZE_USE_EXISTING)


		self.max_cpu = -1
		self.txt = None
		self.txt = None


		self.Show(True)
		self.Show(True)
@@ -143,8 +144,6 @@ class RootFrame(wx.Frame):


			for cpu in timeslice.rqs:
			for cpu in timeslice.rqs:
				self.update_rectangle_cpu(dc, timeslice, cpu, self.timeslices[0].start)
				self.update_rectangle_cpu(dc, timeslice, cpu, self.timeslices[0].start)
				if cpu > self.max_cpu:
					self.max_cpu = cpu


	def on_paint(self, event):
	def on_paint(self, event):
		color = wx.Colour(0xff, 0xff, 0xff)
		color = wx.Colour(0xff, 0xff, 0xff)
@@ -163,7 +162,7 @@ class RootFrame(wx.Frame):
		cpu = y / (RootFrame.CPU_HEIGHT + RootFrame.CPU_SPACE)
		cpu = y / (RootFrame.CPU_HEIGHT + RootFrame.CPU_SPACE)
		height = y % (RootFrame.CPU_HEIGHT + RootFrame.CPU_SPACE)
		height = y % (RootFrame.CPU_HEIGHT + RootFrame.CPU_SPACE)


		if cpu < 0 or cpu > self.max_cpu or height > RootFrame.CPU_HEIGHT:
		if cpu < 0 or cpu > self.nr_cpus - 1 or height > RootFrame.CPU_HEIGHT:
			return -1
			return -1


		return cpu
		return cpu
@@ -206,7 +205,7 @@ class RootFrame(wx.Frame):
		self.update_width_virtual()
		self.update_width_virtual()
		(xpos, ypos) = self.scroll.GetViewStart()
		(xpos, ypos) = self.scroll.GetViewStart()
		xpos = self.us_to_px(x) / self.scroll_scale
		xpos = self.us_to_px(x) / self.scroll_scale
		self.scroll.SetScrollbars(self.scroll_scale, self.scroll_scale, self.width_virtual / self.scroll_scale, 100 / 10, xpos, ypos)
		self.scroll.SetScrollbars(self.scroll_scale, self.scroll_scale, self.width_virtual / self.scroll_scale, self.height_virtual / self.scroll_scale, xpos, ypos)
		self.Refresh()
		self.Refresh()


	def zoom_in(self):
	def zoom_in(self):
@@ -235,6 +234,10 @@ class RootFrame(wx.Frame):
			self.scroll.Scroll(x + 1, y)
			self.scroll.Scroll(x + 1, y)
		elif key == wx.WXK_LEFT:
		elif key == wx.WXK_LEFT:
			self.scroll.Scroll(x - 1, y)
			self.scroll.Scroll(x - 1, y)
		elif key == wx.WXK_DOWN:
			self.scroll.Scroll(x, y + 1)
		elif key == wx.WXK_UP:
			self.scroll.Scroll(x, y - 1)




threads = { 0 : "idle"}
threads = { 0 : "idle"}
@@ -504,6 +507,14 @@ class TimeSliceList(UserList):


		return (self.data[0].start, self.data[-1].end)
		return (self.data[0].start, self.data[-1].end)


	def max_cpu(self):
		last_ts = self.data[-1]
		max_cpu = 0
		for cpu in last_ts.rqs:
			if cpu > max_cpu:
				max_cpu = cpu
		return max_cpu



class SchedEventProxy:
class SchedEventProxy:
	def __init__(self):
	def __init__(self):