Ejemplo n.º 1
0
    def update_plot(self):
        self.ax.clear()
        for Plotsignal in self.Plotsignals:
            if Plotsignal.plotenable:
                if Plotsignal.plotnormalise:
                    data = Plotsignal.get_normalised_values()
                    self.ax.plot(data, color=Plotsignal.plotcolor)
                else:
                    data = Plotsignal.get_values()
                    self.ax.plot(convert_to_si(Plotsignal.unit, data)[1],
                                 color=Plotsignal.plotcolor)

        self.ax.grid(True)
        self.ax.get_yaxis().tick_right()
        self.ax.get_yaxis().set_visible(True)
        self.ax.get_xaxis().set_visible(False)
        all_normalised = True
        iter = self.signalstore.get_iter(0)
        while iter is not None:
            if self.signalstore[iter][1] == False:
                all_normalised = False
                break
            iter = self.signalstore.iter_next(iter)
        if all_normalised:
            self.ax.set_yticks(np.arange(0, 1.1, step=0.1))
        else:
            self.ax.yaxis.set_major_locator(AutoLocator())
        self.canvas.draw()
        self.canvas.flush_events()
Ejemplo n.º 2
0
    def init_signals(self, GPU):
        Plotsignals = []

        # Define signals with: names units max min path plotenable plotnormalise plotcolor parser and outputargument used from parser
        if GPU.gpu_clock != 'N/A':
            Plotsignals.append(
                Plotsignal("GPU Clock", "[MHz]", GPU.pstate_clock[-1],
                           GPU.pstate_clock[0], "/pp_dpm_sclk", True, True,
                           "#1f77b4", GPU.get_current_clock, 0))
            Plotsignals.append(
                Plotsignal("GPU State", "[-]",
                           len(GPU.pstate_clock) - 1, 0, "/pp_dpm_sclk", True,
                           True, "#ff7f0e", GPU.get_current_clock, 1))
        if GPU.mem_clock != 'N/A':
            Plotsignals.append(
                Plotsignal("MEM Clock", "[MHz]", GPU.pmem_clock[-1],
                           GPU.pmem_clock[0], "/pp_dpm_mclk", True, True,
                           "#d62728", GPU.get_current_clock, 0))
            Plotsignals.append(
                Plotsignal("MEM State", "[-]",
                           len(GPU.pmem_clock) - 1, 0, "/pp_dpm_mclk", True,
                           True, "#9467bd", GPU.get_current_clock, 1))

        self.add_available_signal(GPU.sensors,
                                  Plotsignals,
                                  hwmonpath=GPU.hwmonpath)

        # GPU busy percent only properly available in linux version 4.19+
        if (self.linux_kernelmain == 4
                and self.linux_kernelsub > 18) or (self.linux_kernelmain >= 5):
            Plotsignals.append(
                Plotsignal("GPU Usage", "[-]", 100, 0, "/gpu_busy_percent",
                           True, True, "#2ca02c", GPU.read_sensor))
        # as final check remove signals that return None:
        checked_plotlist = []
        for i, signal in enumerate(Plotsignals):
            signal.retrieve_data(self.maxpoints)
            if signal.get_last_value() is not None:
                checked_plotlist.append(signal)
            else:
                print(
                    f"Removing {signal.name} from plotsignals, returning Nonetype"
                )

        if len(checked_plotlist) == 0:
            print("Nothing to plot! Hiding the plot pane.")
            self.builder.get_object("Plot").hide()
        return checked_plotlist
Ejemplo n.º 3
0
 def update_signals(self):
     # Retrieve signal and set appropriate values in signalstore to update left pane in GUI
     for i, Plotsignal in enumerate(self.Plotsignals):
         Plotsignal.retrieve_data(self.maxpoints)
         self.signalstore[i][4] = str(
             np.around(
                 convert_to_si(Plotsignal.unit, Plotsignal.get_mean())[1],
                 self.precision))
         self.signalstore[i][5] = str(
             np.around(
                 convert_to_si(Plotsignal.unit, Plotsignal.get_max())[1],
                 self.precision))
         self.signalstore[i][6] = str(
             np.around(
                 convert_to_si(Plotsignal.unit,
                               Plotsignal.get_last_value())[1],
                 self.precision))
Ejemplo n.º 4
0
    def update_plot(self):
        if len(self.Plotsignals) == 0:
            return
        self.ax.clear()
        for Plotsignal in self.Plotsignals:
            if Plotsignal.plotenable:
                if Plotsignal.plotnormalise:
                    data = Plotsignal.get_normalised_values() * 100
                    self.ax.plot(data, color=Plotsignal.plotcolor)
                else:
                    data = Plotsignal.get_values()
                    self.ax.plot(convert_to_si(Plotsignal.unit, data)[1],
                                 color=Plotsignal.plotcolor)

        self.ax.grid(True)
        self.ax.get_yaxis().tick_right()
        self.ax.get_yaxis().set_label_position("right")
        self.ax.get_yaxis().set_visible(True)
        self.ax.get_xaxis().set_visible(False)
        all_normalised = True
        all_same_unit = True
        unit = ""
        iter = self.signalstore.get_iter(0)
        while iter is not None:
            if self.signalstore[iter][0] == True:
                if unit == "":
                    unit = self.signalstore[iter][4]
                if self.signalstore[iter][1] == False:
                    all_normalised = False
                if self.signalstore[iter][4] != unit:
                    all_same_unit = False
            if not all_normalised and not all_same_unit:
                break
            iter = self.signalstore.iter_next(iter)
        if all_normalised:
            self.ax.set_yticks(np.arange(0, 101, step=25))
            self.ax.set_ylabel('Percent [%]')
        else:
            self.ax.yaxis.set_major_locator(AutoLocator())
            if all_same_unit:
                self.ax.set_ylabel(unit)
            else:
                self.ax.set_ylabel("")
        self.canvas.draw()
        self.canvas.flush_events()
Ejemplo n.º 5
0
 def add_available_signal(self,
                          signals,
                          Plotsignals,
                          hwmonpath="",
                          subsystem="",
                          stop_recursion=False):
     for key, value in signals.items():
         if key in subsystem_unit_color:
             subsystem = key
             stop_recursion = False
         if "path" in value:
             if subsystem == "":
                 continue
             if any(path_sensor_to_plot in value["path"]
                    for path_sensor_to_plot in sensors_to_plot):
                 signallabel = value["path"][1:].split("_")[0]
                 signalmax = 0
                 signalmin = 0
                 signalpath = hwmonpath + value["path"]
                 if "min" in signals:
                     signalmin = signals['min']['value']
                     stop_recursion = True
                 if "max" in signals:
                     signalmax = signals['max']['value']
                     stop_recursion = True
                 if "crit" in signals:
                     signalmax = signals['crit']['value']
                     stop_recursion = True
                 if "label" in signals:
                     signallabel = signals["label"]["value"]
                     if signallabel == "vddgfx" and len(
                             self.GPU.volt_range) > 0:
                         signalmax = self.GPU.volt_range[1]
                         signalmin = 0
                     stop_recursion = True
                 if "cap" in signals:
                     signalmax = signals["cap"]["value"]
                     stop_recursion = True
                 if "pwm" in value["path"]:
                     signalmax = 255
                     signallabel = "(fan)" + signallabel
                 Plotsignals.append(
                     Plotsignal(signallabel,
                                subsystem_unit_color[subsystem]["unit"],
                                signalmax, signalmin, signalpath, True,
                                True,
                                subsystem_unit_color[subsystem]["color"],
                                read))
         else:
             if not stop_recursion:
                 self.add_available_signal(value,
                                           Plotsignals,
                                           hwmonpath=hwmonpath,
                                           subsystem=subsystem,
                                           stop_recursion=stop_recursion)
             else:
                 continue
Ejemplo n.º 6
0
    def init_signals(self, GPU):
        Plotsignals = []

        # Define signals with: names units max min path plotenable plotnormalise plotcolor parser and outputargument used from parser
        Plotsignals.append(
            Plotsignal("GPU Clock", "[MHz]", GPU.pstate_clock[-1],
                       GPU.pstate_clock[0], "/pp_dpm_sclk", True, True,
                       "#1f77b4", GPU.get_current_clock, 0))
        Plotsignals.append(
            Plotsignal("GPU State", "[-]",
                       len(GPU.pstate_clock) - 1, 0, "/pp_dpm_sclk", True,
                       True, "#ff7f0e", GPU.get_current_clock, 1))
        Plotsignals.append(
            Plotsignal("MEM Clock", "[MHz]", GPU.pmem_clock[-1],
                       GPU.pmem_clock[0], "/pp_dpm_mclk", True, True,
                       "#d62728", GPU.get_current_clock, 0))
        Plotsignals.append(
            Plotsignal("MEM State", "[-]",
                       len(GPU.pmem_clock) - 1, 0, "/pp_dpm_mclk", True, True,
                       "#9467bd", GPU.get_current_clock, 1))
        if GPU.fanpwmsensors is not None:
            Plotsignals.append(
                Plotsignal("FAN Speed", "[0-255]",
                           GPU.fanpwmsensors.read_attribute('_max', True), 0,
                           GPU.fanpwmsensors.path, True, True, "#8c564b",
                           GPU.fanpwmsensors.read))
        if GPU.tempsensors is not None:
            Plotsignals.append(
                Plotsignal("TEMP 1", "[m°C]",
                           GPU.tempsensors.read_attribute('_crit', True), 0,
                           GPU.tempsensors.path, True, True, "#e377c2",
                           GPU.tempsensors.read))
        if GPU.powersensors is not None:
            Plotsignals.append(
                Plotsignal("POWER", "[µW]",
                           GPU.powersensors.read_attribute('_cap', True), 0,
                           GPU.powersensors.path, True, True, "#7f7f7f",
                           GPU.powersensors.read))

        # GPU busy percent only properly available in linux version 4.19+
        if (self.linux_kernelmain == 4
                and self.linux_kernelsub > 18) or (self.linux_kernelmain >= 5):
            Plotsignals.append(
                Plotsignal("GPU Usage",
                           "[-]",
                           100,
                           0,
                           "/gpu_busy_percent",
                           True,
                           True,
                           "#2ca02c",
                           parser=GPU.read_sensor))

        return Plotsignals
Ejemplo n.º 7
0
 def update_signals(self):
     # Retrieve signal and set appropriate values in signalstore to update left pane in GUI
     for i, Plotsignal in enumerate(self.Plotsignals):
         Plotsignal.retrieve_data(self.maxpoints)
         disable_scaling = len(
             Plotsignal.get_values()) > 3 and Plotsignal.all_equal(
             ) and Plotsignal.plotnormalise and (Plotsignal.max
                                                 == Plotsignal.min)
         self.signalstore[i][2] = not disable_scaling
         if disable_scaling:
             print(
                 f"cannot scale values of {self.signalstore[i][3]} disabling scaling"
             )
             self.on_normalise_toggled(self.normaliserenderer,
                                       i,
                                       disable_refresh=True)
             if disable_plots_if_scaling_error:
                 print(
                     f"disabling {self.signalstore[i][3]} plot since disable_plots_if_scaling_error is set"
                 )
                 self.on_plot_toggled(self.plotrenderer, i)
         self.signalstore[i][5] = str(
             np.around(
                 convert_to_si(Plotsignal.unit, Plotsignal.get_min())[1],
                 self.precision))
         self.signalstore[i][6] = str(
             np.around(
                 convert_to_si(Plotsignal.unit, Plotsignal.get_mean())[1],
                 self.precision))
         self.signalstore[i][7] = str(
             np.around(
                 convert_to_si(Plotsignal.unit, Plotsignal.get_max())[1],
                 self.precision))
         self.signalstore[i][8] = str(
             np.around(
                 convert_to_si(Plotsignal.unit,
                               Plotsignal.get_last_value())[1],
                 self.precision))