diff --git a/config/config.dhall b/config/config.dhall index abf01c6..933d4c9 100644 --- a/config/config.dhall +++ b/config/config.dhall @@ -11,8 +11,8 @@ let TextGeo = { Type = { text_spacing : Natural }, default.text_spacing = 20 } let SepGeo = { Type = { sep_spacing : Natural }, default.sep_spacing = 20 } let PlotGeo_ = - { Type = { sec_break : Natural, height : Natural } - , default = { sec_break = 20, height = 56 } + { Type = { sec_break : Natural, height : Natural, ticks_y : Natural } + , default = { sec_break = 20, height = 56, ticks_y = 4 } } let PlotGeo = { Type = { plot : PlotGeo_.Type }, default.plot = PlotGeo_::{=} } @@ -156,10 +156,9 @@ let PlotGeometry = { spacing : Natural , height : Natural , seconds : Natural - , ticks : Vector2 Natural + , ticks_x : Natural } - , default = - { seconds = 90, ticks = { x = 9, y = 4 }, height = 56, spacing = 20 } + , default = { seconds = 90, ticks_x = 9, height = 56, spacing = 20 } } let TableGeometry = diff --git a/src/modules/common.lua b/src/modules/common.lua index 10e8975..e5ee797 100644 --- a/src/modules/common.lua +++ b/src/modules/common.lua @@ -103,19 +103,23 @@ return function(config) ----------------------------------------------------------------------------- -- timeseries helper functions - local _default_grid_config = timeseries.grid_config( - geometry.plot.ticks.x, - geometry.plot.ticks.y, - patterns.plot.grid - ) + local _default_grid_config = function(ticks_y) + return timeseries.grid_config( + geometry.plot.ticks_x, + ticks_y, + patterns.plot.grid + ) + end - local _default_plot_config = timeseries.config( - geometry.plot.seconds, - patterns.plot.outline, - patterns.plot.data.border, - patterns.plot.data.fill, - _default_grid_config - ) + local _default_plot_config = function(ticks_y) + return timeseries.config( + geometry.plot.seconds, + patterns.plot.outline, + patterns.plot.data.border, + patterns.plot.data.fill, + _default_grid_config(ticks_y) + ) + end local _format_percent_label = function(_) return function(z) return __string_format('%i%%', math.floor(z * 100)) end @@ -131,18 +135,20 @@ return function(config) _format_percent_label ) - local _make_timeseries = function(x, y, w, h, label_config, update_freq) + local _make_timeseries = function(x, y, w, h, ticks_y, label_config, update_freq) return timeseries.make( geom.make_box(x, y, w, h), update_freq, - _default_plot_config, + _default_plot_config(ticks_y), label_config ) end local gplot = geometry.plot - local _make_tagged_percent_timeseries = function(x, y, w, h, spacing, label, update_freq, _format) + local _make_tagged_percent_timeseries = function(x, y, w, h, ticks_y, + spacing, label, update_freq, + _format) return { label = _left_text(geom.make_point(x, y), label), value = text_threshold.make_formatted( @@ -157,6 +163,7 @@ return function(config) y + _maybe_config(gplot.spacing, spacing), w, _maybe_config(gplot.height, h), + ticks_y, update_freq ), } @@ -169,11 +176,11 @@ return function(config) return scaled_timeseries.scaling_parameters(2, m, 0.9) end - local _make_scaled_timeseries = function(x, y, w, h, f, min_domain, update_freq) + local _make_scaled_timeseries = function(x, y, w, h, ticks_y, f, min_domain, update_freq) return scaled_timeseries.make( geom.make_box(x, y, w, h), update_freq, - _default_plot_config, + _default_plot_config(ticks_y), timeseries.label_config(patterns.text.inactive, label_font_spec, f), _base_2_scale_data(min_domain) ) @@ -216,22 +223,24 @@ return function(config) ----------------------------------------------------------------------------- -- percent timeseries - M.make_percent_timeseries = function(x, y, w, h, update_freq) - return _make_timeseries(x, y, w, h, _percent_label_config, update_freq) + M.make_percent_timeseries = function(x, y, w, h, ticks_y, update_freq) + return _make_timeseries(x, y, w, h, ticks_y, _percent_label_config, update_freq) end ----------------------------------------------------------------------------- -- tagged percent timeseries - M.make_tagged_percent_timeseries = function(x, y, w, h, spacing, label, update_freq) + M.make_tagged_percent_timeseries = function(x, y, w, h, ticks_y, spacing, + label, update_freq) return _make_tagged_percent_timeseries( - x, y, w, h, spacing, label, update_freq, '%s%%' + x, y, w, h, ticks_y, spacing, label, update_freq, '%s%%' ) end - M.make_tagged_maybe_percent_timeseries = function(x, y, w, h, spacing, label, update_freq) + M.make_tagged_maybe_percent_timeseries = function(x, y, w, h, ticks_y, + spacing, label, update_freq) return _make_tagged_percent_timeseries( - x, y, w, h, spacing, label, update_freq, _format_percent_maybe + x, y, w, h, ticks_y, spacing, label, update_freq, _format_percent_maybe ) end @@ -294,9 +303,9 @@ return function(config) ----------------------------------------------------------------------------- -- tagged scaled plot - M.make_tagged_scaled_timeseries = function(x, y, w, h, format_fun, label_fun, - spacing, label, min_domain, - update_freq) + M.make_tagged_scaled_timeseries = function(x, y, w, h, ticks_y, format_fun, + label_fun, spacing, label, + min_domain, update_freq) return { label = _left_text(geom.make_point(x, y), label), value = text.make_formatted( @@ -310,6 +319,7 @@ return function(config) y + spacing, w, h, + ticks_y, label_fun, min_domain, update_freq @@ -341,8 +351,9 @@ return function(config) end end - M.make_rate_timeseries = function(x, y, w, h, format_fun, label_fun, spacing, - label, min_domain, update_freq, init) + M.make_rate_timeseries = function(x, y, w, h, ticks_y, format_fun, + label_fun, spacing, label, min_domain, + update_freq, init) return { label = _left_text(geom.make_point(x, y), label), value = text.make_formatted( @@ -356,6 +367,7 @@ return function(config) y + spacing, w, h, + ticks_y, label_fun, min_domain, update_freq diff --git a/src/modules/graphics.lua b/src/modules/graphics.lua index 264a82a..add0293 100644 --- a/src/modules/graphics.lua +++ b/src/modules/graphics.lua @@ -3,10 +3,10 @@ local i_o = require 'i_o' return function(update_freq, config, common, width, point) local geo = config.geometry - local SEPARATOR_SPACING = geo.sep_spacing - local TEXT_SPACING = geo.text_spacing - local PLOT_SEC_BREAK = geo.plot.sec_break - local PLOT_HEIGHT = geo.plot.height + local sep_spacing = geo.sep_spacing + local text_spacing = geo.text_spacing + local plot_sec_break = geo.plot.sec_break + local plot_height = geo.plot.height local NA = 'N/A' local NVIDIA_EXE = 'nvidia-settings' local __string_match = string.match @@ -89,8 +89,9 @@ return function(update_freq, config, common, width, point) point.x, y, width, - PLOT_HEIGHT, - PLOT_SEC_BREAK, + plot_height, + geo.plot.ticks_y, + plot_sec_break, label, update_freq ) @@ -103,7 +104,7 @@ return function(update_freq, config, common, width, point) local dynamic = pure.partial(common.tagged_percent_timeseries_draw_dynamic, obj) return common.mk_acc( width, - PLOT_HEIGHT + PLOT_SEC_BREAK, + plot_height + plot_sec_break, update, static, dynamic @@ -155,7 +156,7 @@ return function(update_freq, config, common, width, point) point.x, y, width, - TEXT_SPACING, + text_spacing, {'GPU Clock Speed', 'Memory Clock Speed'} ) local update = function() @@ -169,7 +170,7 @@ return function(update_freq, config, common, width, point) end local static = pure.partial(common.text_rows_draw_static, obj) local dynamic = pure.partial(common.text_rows_draw_dynamic, obj) - return common.mk_acc(width, TEXT_SPACING, update, static, dynamic) + return common.mk_acc(width, text_spacing, update, static, dynamic) end ----------------------------------------------------------------------------- @@ -207,19 +208,19 @@ return function(update_freq, config, common, width, point) point = point, width = width, set_state = update_state, - top = {{mk_status, true, SEPARATOR_SPACING}}, + top = {{mk_status, true, sep_spacing}}, common.mk_section( - SEPARATOR_SPACING, - {mk_temp, config.show_temp, SEPARATOR_SPACING} + sep_spacing, + {mk_temp, config.show_temp, sep_spacing} ), common.mk_section( - SEPARATOR_SPACING, - {mk_clock, config.show_clock, SEPARATOR_SPACING} + sep_spacing, + {mk_clock, config.show_clock, sep_spacing} ), common.mk_section( - SEPARATOR_SPACING, - {mk_gpu_util, config.show_gpu_util, PLOT_SEC_BREAK}, - {mk_mem_util, config.show_mem_util, PLOT_SEC_BREAK}, + sep_spacing, + {mk_gpu_util, config.show_gpu_util, plot_sec_break}, + {mk_mem_util, config.show_mem_util, plot_sec_break}, {mk_vid_util, config.show_vid_util, 0} ) } diff --git a/src/modules/memory.lua b/src/modules/memory.lua index c898c2a..e7f1b7a 100644 --- a/src/modules/memory.lua +++ b/src/modules/memory.lua @@ -6,14 +6,14 @@ local sys = require 'sys' return function(update_freq, config, common, width, point) local geo = config.geometry - local DIAL_THICKNESS = 8 - local DIAL_RADIUS = 32 - local DIAL_X_SPACING = 40 - local CACHE_Y_OFFSET = 7 - local CACHE_X_OFFSET = 50 - local PLOT_SECTION_BREAK = geo.plot.sec_break - local PLOT_HEIGHT = geo.plot.height - local TABLE_SECTION_BREAK = geo.table.sec_break + local dial_thickness = 8 + local dial_radius = 32 + local dial_x_spacing = 40 + local cache_y_offset = 7 + local cache_x_offset = 50 + local plot_sec_break = geo.plot.sec_break + local plot_height = geo.plot.height + local table_sec_break = geo.table.sec_break local __math_floor = math.floor local __string_format = string.format @@ -49,33 +49,33 @@ return function(update_freq, config, common, width, point) -- mem stats (dial + text) local mk_stats = function(y) - local MEM_X = point.x + DIAL_RADIUS + DIAL_THICKNESS / 2 - local DIAL_DIAMETER = DIAL_RADIUS * 2 + DIAL_THICKNESS - local CACHE_X - local SWAP_X + local mem_x = point.x + dial_radius + dial_thickness / 2 + local dial_diameter = dial_radius * 2 + dial_thickness + local cache_x + local swap_x if _show_swap == true then - SWAP_X = MEM_X + DIAL_DIAMETER + DIAL_X_SPACING - CACHE_X = SWAP_X + CACHE_X_OFFSET + DIAL_DIAMETER / 2 + swap_x = mem_x + dial_diameter + dial_x_spacing + cache_x = swap_x + cache_x_offset + dial_diameter / 2 else - CACHE_X = MEM_X + CACHE_X_OFFSET + DIAL_DIAMETER / 2 + cache_x = mem_x + cache_x_offset + dial_diameter / 2 end - local CACHE_WIDTH = point.x + width - CACHE_X + local cache_width = point.x + width - cache_x local format_percent = pure.partial(__string_format, '%i%%', true) -- memory bits (used no matter what) local mem = common.make_dial( - MEM_X, - y + DIAL_RADIUS, - DIAL_RADIUS, - DIAL_THICKNESS, + mem_x, + y + dial_radius, + dial_radius, + dial_thickness, 80, format_percent, __math_floor ) local cache = common.make_text_rows_formatted( - CACHE_X, - y + CACHE_Y_OFFSET, - CACHE_WIDTH, + cache_x, + y + cache_y_offset, + cache_width, geo.text_spacing, {'Page Cache', 'Buffers', 'Shared', 'Kernel Slab'}, '%.1f%%' @@ -98,15 +98,15 @@ return function(update_freq, config, common, width, point) common.dial_draw_dynamic(mem, cr) common.text_rows_draw_dynamic(cache, cr) end - local ret = pure.partial(common.mk_acc, width, DIAL_DIAMETER) + local ret = pure.partial(common.mk_acc, width, dial_diameter) -- add swap bits if needed if _show_swap == true then local swap = common.make_dial( - SWAP_X, - y + DIAL_RADIUS, - DIAL_RADIUS, - DIAL_THICKNESS, + swap_x, + y + dial_radius, + dial_radius, + dial_thickness, 80, format_percent, __math_floor @@ -135,12 +135,13 @@ return function(update_freq, config, common, width, point) point.x, y, width, - PLOT_HEIGHT, + plot_height, + geo.plot.ticks_y, update_freq ) return common.mk_acc( width, - PLOT_HEIGHT, + plot_height, function() timeseries.update(obj, mod_state.mem.used_percent) end, pure.partial(timeseries.draw_static, obj), pure.partial(timeseries.draw_dynamic, obj) @@ -152,14 +153,15 @@ return function(update_freq, config, common, width, point) point.x, y, width, - PLOT_HEIGHT, - PLOT_SECTION_BREAK, + plot_height, + geo.plot.ticks_y, + plot_sec_break, "Total Memory", update_freq ) return common.mk_acc( width, - PLOT_HEIGHT + PLOT_SECTION_BREAK, + plot_height + plot_sec_break, function() common.tagged_percent_timeseries_set( obj, @@ -216,8 +218,8 @@ return function(update_freq, config, common, width, point) width = width, set_state = read_state, top = { - {mk_stats, config.show_stats, PLOT_SECTION_BREAK}, - {mk_plot, config.show_plot, TABLE_SECTION_BREAK}, + {mk_stats, config.show_stats, plot_sec_break}, + {mk_plot, config.show_plot, table_sec_break}, {mk_tbl, config.table_rows > 0, 0}, } } diff --git a/src/modules/network.lua b/src/modules/network.lua index 7836901..6d4a223 100644 --- a/src/modules/network.lua +++ b/src/modules/network.lua @@ -5,8 +5,8 @@ local sys = require 'sys' return function(update_freq, config, common, width, point) local geo = config.geometry - local PLOT_SEC_BREAK = geo.plot.sec_break - local PLOT_HEIGHT = geo.plot.height + local plot_sec_break = geo.plot.sec_break + local plot_height = geo.plot.height local interface_paths = sys.get_net_interface_paths() local get_bits = function(path) @@ -41,10 +41,11 @@ return function(update_freq, config, common, width, point) point.x, y, width, - PLOT_HEIGHT, + plot_height, + geo.plot.ticks_y, value_format_function, common.converted_y_label_format_generator('b'), - PLOT_SEC_BREAK, + plot_sec_break, label, 2, update_freq, @@ -52,7 +53,7 @@ return function(update_freq, config, common, width, point) ) return common.mk_acc( width, - PLOT_HEIGHT + PLOT_SEC_BREAK, + plot_height + plot_sec_break, function() common.update_rate_timeseries(obj, mod_state[key]) end, pure.partial(common.tagged_scaled_timeseries_draw_static, obj), pure.partial(common.tagged_scaled_timeseries_draw_dynamic, obj) @@ -71,7 +72,7 @@ return function(update_freq, config, common, width, point) width = width, set_state = read_interfaces, top = { - {mk_rx, true, PLOT_SEC_BREAK}, + {mk_rx, true, plot_sec_break}, {mk_tx, true, 0}, } } diff --git a/src/modules/power.lua b/src/modules/power.lua index a8da106..c211c2e 100644 --- a/src/modules/power.lua +++ b/src/modules/power.lua @@ -4,8 +4,8 @@ local sys = require 'sys' return function(update_freq, config, common, width, point) local geo = config.geometry - local PLOT_SEC_BREAK = geo.plot.sec_break - local PLOT_HEIGHT = geo.plot.height + local plot_sec_break = geo.plot.sec_break + local plot_height = geo.plot.height local power_label_function = function(plot_max) local fmt = common.y_label_format_string(plot_max, 'W') @@ -30,10 +30,11 @@ return function(update_freq, config, common, width, point) point.x, y, width, - PLOT_HEIGHT, + plot_height, + geo.plot.ticks_y, format_rapl, power_label_function, - PLOT_SEC_BREAK, + plot_sec_break, label, 0, update_freq, @@ -41,7 +42,7 @@ return function(update_freq, config, common, width, point) ) return common.mk_acc( width, - PLOT_HEIGHT + PLOT_SEC_BREAK, + plot_height + plot_sec_break, function(_) common.update_rate_timeseries(obj, read_joules()) end, mk_static(obj), mk_dynamic(obj) @@ -72,17 +73,18 @@ return function(update_freq, config, common, width, point) point.x, y, width, - PLOT_HEIGHT, + plot_height, + geo.plot.ticks_y, format_ac, power_label_function, - PLOT_SEC_BREAK, + plot_sec_break, 'Battery Draw', 0, update_freq ) return common.mk_acc( width, - PLOT_HEIGHT + PLOT_SEC_BREAK, + plot_height + plot_sec_break, function() common.tagged_scaled_timeseries_set( obj, diff --git a/src/modules/processor.lua b/src/modules/processor.lua index 02d38d9..b9e979d 100644 --- a/src/modules/processor.lua +++ b/src/modules/processor.lua @@ -7,16 +7,16 @@ local pure = require 'pure' local __math_floor = math.floor return function(update_freq, main_state, config, common, width, point) + local dial_inner_radius = 30 + local dial_outer_radius = 42 + local dial_thickness = 5.5 + local dial_y_spacing = 20 + local geo = config.geometry - local DIAL_INNER_RADIUS = 30 - local DIAL_OUTER_RADIUS = 42 - local DIAL_THICKNESS = 5.5 - local DIAL_Y_SPACING = 20 - local SEPARATOR_SPACING = geo.sep_spacing - local TEXT_SPACING = geo.text_spacing - local PLOT_SECTION_BREAK = geo.plot.sec_break - local PLOT_HEIGHT = geo.plot.height - local TABLE_SECTION_BREAK = geo.table.sec_break + local sep_spacing = geo.sep_spacing + local text_spacing = geo.text_spacing + local plot_sec_break = geo.plot.sec_break + local plot_height = geo.plot.height ----------------------------------------------------------------------------- -- processor state @@ -52,26 +52,26 @@ return function(update_freq, main_state, config, common, width, point) local dial_x = point.x + (core_cols == 1 and (width / 2) - or (config.core_padding + DIAL_OUTER_RADIUS + - (width - 2 * (DIAL_OUTER_RADIUS + config.core_padding)) + or (config.core_padding + dial_outer_radius + + (width - 2 * (dial_outer_radius + config.core_padding)) * math.fmod(c - 1, core_cols) / (core_cols - 1))) - local dial_y = y + DIAL_OUTER_RADIUS + - (2 * DIAL_OUTER_RADIUS + DIAL_Y_SPACING) + local dial_y = y + dial_outer_radius + + (2 * dial_outer_radius + dial_y_spacing) * math.floor((c - 1) / core_cols) return { loads = common.make_compound_dial( dial_x, dial_y, - DIAL_OUTER_RADIUS, - DIAL_INNER_RADIUS, - DIAL_THICKNESS, + dial_outer_radius, + dial_inner_radius, + dial_thickness, 80, nthreads ), coretemp = common.make_text_circle( dial_x, dial_y, - DIAL_INNER_RADIUS - 2, + dial_inner_radius - 2, '%s°C', 80, __math_floor @@ -116,8 +116,8 @@ return function(update_freq, main_state, config, common, width, point) end return common.mk_acc( width, - (DIAL_OUTER_RADIUS * 2 + DIAL_Y_SPACING) * config.core_rows - - DIAL_Y_SPACING, + (dial_outer_radius * 2 + dial_y_spacing) * config.core_rows + - dial_y_spacing, update, static, dynamic @@ -133,7 +133,7 @@ return function(update_freq, main_state, config, common, width, point) point.x, y, width, - TEXT_SPACING, + text_spacing, {'HWP Preference', 'Ave Freq'} ) local update = function() @@ -149,7 +149,7 @@ return function(update_freq, main_state, config, common, width, point) local dynamic = pure.partial(common.text_rows_draw_dynamic, cpu_status) return common.mk_acc( width, - TEXT_SPACING, + text_spacing, update, static, dynamic @@ -164,8 +164,9 @@ return function(update_freq, main_state, config, common, width, point) point.x, y, width, - PLOT_HEIGHT, - PLOT_SECTION_BREAK, + plot_height, + geo.plot.ticks_y, + plot_sec_break, "Total Load", update_freq ) @@ -178,7 +179,7 @@ return function(update_freq, main_state, config, common, width, point) end return common.mk_acc( width, - PLOT_HEIGHT + PLOT_SECTION_BREAK, + plot_height + plot_sec_break, update, pure.partial(common.tagged_percent_timeseries_draw_static, total_load), pure.partial(common.tagged_percent_timeseries_draw_dynamic, total_load) @@ -230,12 +231,12 @@ return function(update_freq, main_state, config, common, width, point) width = width, set_state = update_state, top = { - {mk_cores, show_cores, TEXT_SPACING}, - {mk_hwp_freq, config.show_stats, SEPARATOR_SPACING}, + {mk_cores, show_cores, text_spacing}, + {mk_hwp_freq, config.show_stats, sep_spacing}, }, common.mk_section( - SEPARATOR_SPACING, - {mk_load_plot, config.show_plot, TABLE_SECTION_BREAK}, + sep_spacing, + {mk_load_plot, config.show_plot, geo.table.sec_break}, {mk_tbl, config.table_rows > 0, 0} ) } diff --git a/src/modules/readwrite.lua b/src/modules/readwrite.lua index 5824d44..e65ced9 100644 --- a/src/modules/readwrite.lua +++ b/src/modules/readwrite.lua @@ -6,8 +6,8 @@ local impure = require 'impure' return function(update_freq, config, common, width, point) local geo = config.geometry - local PLOT_SEC_BREAK = geo.plot.sec_break - local PLOT_HEIGHT = geo.plot.height + local plot_sec_break = geo.plot.sec_break + local plot_height = geo.plot.height local mod_state = {read = 0, write = 0} local device_paths = sys.get_disk_paths(config.devices) @@ -34,10 +34,11 @@ return function(update_freq, config, common, width, point) point.x, y, width, - PLOT_HEIGHT, + plot_height, + geo.plot.ticks_y, format_value_function, common.converted_y_label_format_generator('B'), - PLOT_SEC_BREAK, + plot_sec_break, label, 2, update_freq, @@ -45,7 +46,7 @@ return function(update_freq, config, common, width, point) ) return common.mk_acc( width, - PLOT_HEIGHT + PLOT_SEC_BREAK, + plot_height + plot_sec_break, function() common.update_rate_timeseries(obj, mod_state[key]) end, pure.partial(common.tagged_scaled_timeseries_draw_static, obj), pure.partial(common.tagged_scaled_timeseries_draw_dynamic, obj) @@ -64,7 +65,7 @@ return function(update_freq, config, common, width, point) width = width, set_state = update_state, top = { - {mk_reads, true, PLOT_SEC_BREAK}, + {mk_reads, true, plot_sec_break}, {mk_writes, true, 0}, } } diff --git a/src/modules/system.lua b/src/modules/system.lua index 4c14193..ddda7c1 100644 --- a/src/modules/system.lua +++ b/src/modules/system.lua @@ -2,7 +2,7 @@ local i_o = require 'i_o' local pure = require 'pure' return function(main_state, config, common, width, point) - local TEXT_SPACING = config.geometry.text_spacing + local text_spacing = config.geometry.text_spacing local __string_match = string.match @@ -11,7 +11,7 @@ return function(main_state, config, common, width, point) point.x, y, width, - TEXT_SPACING, + text_spacing, {'Kernel', 'Uptime', 'Last Upgrade', 'Last Sync'} ) -- just update this once @@ -35,7 +35,7 @@ return function(main_state, config, common, width, point) local dynamic = pure.partial(common.text_rows_draw_dynamic, obj) return common.mk_acc( width, - TEXT_SPACING * 3, + text_spacing * 3, update, static, dynamic