rearrange power monitor with mulitplot

This commit is contained in:
petrucci4prez 2018-02-18 20:50:49 -05:00
parent 72e6e9b367
commit 23cd57d1aa
3 changed files with 151 additions and 96 deletions

2
core

@ -1 +1 @@
Subproject commit 5fd6e1b11239b1d24b6c1a18cbfb6c7f876acc96 Subproject commit 36cc286cb33dff4a649bee9d8b2620f6033fd14a

View File

@ -1,10 +1,12 @@
local Patterns = require 'Patterns'
local Text = require 'Text' local Text = require 'Text'
local TextColumn = require 'TextColumn'
local Line = require 'Line' local Line = require 'Line'
local ScalePlot = require 'ScalePlot' local ScalePlot = require 'ScalePlot'
local Util = require 'Util' local Util = require 'Util'
local _MODULE_Y_ = 348 local _MODULE_Y_ = 348
local _SEPARATOR_SPACING_ = 20 -- local _SEPARATOR_SPACING_ = 20
local _TEXT_SPACING_ = 20 local _TEXT_SPACING_ = 20
local _PLOT_SEC_BREAK_ = 20 local _PLOT_SEC_BREAK_ = 20
local _PLOT_HEIGHT_ = 56 local _PLOT_HEIGHT_ = 56
@ -28,57 +30,79 @@ local header = _G_Widget_.Header{
local _RIGHT_X_ = _G_INIT_DATA_.RIGHT_X + _G_INIT_DATA_.SECTION_WIDTH local _RIGHT_X_ = _G_INIT_DATA_.RIGHT_X + _G_INIT_DATA_.SECTION_WIDTH
local dram_igpu = { -- local dram_igpu = {
label = _G_Widget_.Text{ -- label = _G_Widget_.Text{
x = _G_INIT_DATA_.RIGHT_X, -- x = _G_INIT_DATA_.RIGHT_X,
y = header.bottom_y, -- y = header.bottom_y,
text = 'DRAM | iGPU' -- text = 'DRAM | iGPU'
}, -- },
value = _G_Widget_.Text{ -- value = _G_Widget_.Text{
x = _RIGHT_X_, -- x = _RIGHT_X_,
y = header.bottom_y, -- y = header.bottom_y,
x_align = 'right', -- x_align = 'right',
text_color = _G_Patterns_.BLUE, -- text_color = _G_Patterns_.BLUE,
append_end = ' W', -- append_end = ' W',
text = '<dram_igpu>' -- text = '<dram_igpu>'
} -- }
} -- }
local _SEP_Y_ = header.bottom_y + _SEPARATOR_SPACING_ -- local _SEP_Y_ = header.bottom_y + _SEPARATOR_SPACING_
local separator = _G_Widget_.Line{ -- local separator = _G_Widget_.Line{
p1 = {x = _G_INIT_DATA_.RIGHT_X, y = _SEP_Y_}, -- p1 = {x = _G_INIT_DATA_.RIGHT_X, y = _SEP_Y_},
p2 = {x = _RIGHT_X_, y = _SEP_Y_} -- p2 = {x = _RIGHT_X_, y = _SEP_Y_}
} -- }
local _PKG0_Y_ = _SEP_Y_ + _SEPARATOR_SPACING_ -- local _PKG0_Y_ = _SEP_Y_ + _SEPARATOR_SPACING_
local pkg0 = { local pkg0 = {
label = _G_Widget_.Text{ labels = _G_Widget_.TextColumn{
x = _G_INIT_DATA_.RIGHT_X, x = _G_INIT_DATA_.RIGHT_X,
y = _PKG0_Y_, y = header.bottom_y,
text = 'PKG 0' 'Cores',
'LLC+MC',
'iGPU'
}, },
value = _G_Widget_.Text{ core_value = _G_Widget_.Text{
x = _RIGHT_X_, x = _RIGHT_X_,
y = _PKG0_Y_, y = header.bottom_y,
x_align = 'right', x_align = 'right',
text_color = _G_Patterns_.BLUE, text_color = Patterns.BLUE,
text = '<pkg0>', text = '<core>',
append_end = ' W',
},
llcmc_value = _G_Widget_.Text{
x = _RIGHT_X_,
y = header.bottom_y + _TEXT_SPACING_,
x_align = 'right',
text_color = _G_Patterns_.PURPLE,
text = '<llcmc>',
append_end = ' W' append_end = ' W'
}, },
igpu_value = _G_Widget_.Text{
x = _RIGHT_X_,
y = header.bottom_y + _TEXT_SPACING_ * 2,
x_align = 'right',
text_color = Patterns.YELLOW,
text = '<igpu>',
append_end = ' W',
},
plot = _G_Widget_.ScalePlot{ plot = _G_Widget_.ScalePlot{
x = _G_INIT_DATA_.RIGHT_X, x = _G_INIT_DATA_.RIGHT_X,
y = _PKG0_Y_ + _PLOT_SEC_BREAK_, y = header.bottom_y + _TEXT_SPACING_ * 2 + _PLOT_SEC_BREAK_,
width = _G_INIT_DATA_.SECTION_WIDTH, width = _G_INIT_DATA_.SECTION_WIDTH,
height = _PLOT_HEIGHT_, height = _PLOT_HEIGHT_,
y_label_func = power_label_function, y_label_func = power_label_function,
{Patterns.PLOT_LINE_YELLOW, Patterns.PLOT_FILL_YELLOW},
{Patterns.PLOT_LINE_PURPLE, Patterns.PLOT_FILL_PURPLE},
{Patterns.PLOT_LINE_BLUE, Patterns.PLOT_FILL_BLUE}
} }
} }
local _CORE_Y_ = _PKG0_Y_ + _PLOT_SEC_BREAK_ * 2 + _PLOT_HEIGHT_ local _CORE_Y_ = header.bottom_y + _TEXT_SPACING_ * 2 + _PLOT_SEC_BREAK_ * 2 + _PLOT_HEIGHT_
local pp01 = { local dram = {
label = _G_Widget_.Text{ label = _G_Widget_.Text{
x = _G_INIT_DATA_.RIGHT_X, x = _G_INIT_DATA_.RIGHT_X,
y = _CORE_Y_, y = _CORE_Y_,
@ -140,21 +164,20 @@ local update = function(cr, update_frequency, is_using_ac)
local igpu_uj_cnt = Util.read_file(IGPU_PATH, nil, '*n') local igpu_uj_cnt = Util.read_file(IGPU_PATH, nil, '*n')
local dram_uj_cnt = Util.read_file(DRAM_PATH, nil, '*n') local dram_uj_cnt = Util.read_file(DRAM_PATH, nil, '*n')
Text.set(dram_igpu.value, cr,
Util.precision_round_to_string(
calculate_power(cr, prev_dram_uj_cnt, dram_uj_cnt, update_frequency), 3)
..' | '..
Util.precision_round_to_string(
calculate_power(cr, prev_igpu_uj_cnt, igpu_uj_cnt, update_frequency), 3))
local pkg0_power = calculate_power(cr, prev_pkg0_uj_cnt, pkg0_uj_cnt, update_frequency) local pkg0_power = calculate_power(cr, prev_pkg0_uj_cnt, pkg0_uj_cnt, update_frequency)
local core_power = calculate_power(cr, prev_core_uj_cnt, core_uj_cnt, update_frequency) local core_power = calculate_power(cr, prev_core_uj_cnt, core_uj_cnt, update_frequency)
local igpu_power = calculate_power(cr, prev_igpu_uj_cnt, igpu_uj_cnt, update_frequency)
Text.set(pkg0.value, cr, Util.precision_round_to_string(pkg0_power, 3)) Text.set(pkg0.core_value, cr, Util.precision_round_to_string(core_power, 3))
ScalePlot.update(pkg0.plot, cr, pkg0_power) Text.set(pkg0.igpu_value, cr, Util.precision_round_to_string(igpu_power, 3))
Text.set(pkg0.llcmc_value, cr, Util.precision_round_to_string(pkg0_power - core_power - igpu_power, 3))
Text.set(pp01.value, cr, Util.precision_round_to_string(core_power, 3)) ScalePlot.update(pkg0.plot, cr, igpu_power, pkg0_power - core_power, pkg0_power)
ScalePlot.update(pp01.plot, cr, core_power)
local dram_power = calculate_power(cr, prev_dram_uj_cnt, dram_uj_cnt, update_frequency)
Text.set(dram.value, cr, Util.precision_round_to_string(dram_power, 3))
ScalePlot.update(dram.plot, cr, dram_power)
prev_pkg0_uj_cnt = pkg0_uj_cnt prev_pkg0_uj_cnt = pkg0_uj_cnt
prev_core_uj_cnt = core_uj_cnt prev_core_uj_cnt = core_uj_cnt
@ -174,14 +197,15 @@ local update = function(cr, update_frequency, is_using_ac)
end end
end end
Patterns = nil
_MODULE_Y_ = nil _MODULE_Y_ = nil
_SEPARATOR_SPACING_ = nil -- _SEPARATOR_SPACING_ = nil
_TEXT_SPACING_ = nil _TEXT_SPACING_ = nil
_PLOT_SEC_BREAK_ = nil _PLOT_SEC_BREAK_ = nil
_PLOT_HEIGHT_ = nil _PLOT_HEIGHT_ = nil
_RIGHT_X_ = nil _RIGHT_X_ = nil
_SEP_Y_ = nil -- _SEP_Y_ = nil
_PKG0_Y_ = nil -- _PKG0_Y_ = nil
_CORE_Y_ = nil _CORE_Y_ = nil
_BATTERY_DRAW_Y_ = nil _BATTERY_DRAW_Y_ = nil
@ -192,18 +216,15 @@ local draw = function(cr, current_interface, update_frequency, is_using_ac)
Text.draw(header.text, cr) Text.draw(header.text, cr)
Line.draw(header.underline, cr) Line.draw(header.underline, cr)
Text.draw(dram_igpu.label, cr) TextColumn.draw(pkg0.labels, cr)
Text.draw(dram_igpu.value, cr) Text.draw(pkg0.llcmc_value, cr)
Text.draw(pkg0.core_value, cr)
Line.draw(separator, cr) Text.draw(pkg0.igpu_value, cr)
Text.draw(pkg0.label, cr)
Text.draw(pkg0.value, cr)
ScalePlot.draw(pkg0.plot, cr) ScalePlot.draw(pkg0.plot, cr)
Text.draw(pp01.label, cr) Text.draw(dram.label, cr)
Text.draw(pp01.value, cr) Text.draw(dram.value, cr)
ScalePlot.draw(pp01.plot, cr) ScalePlot.draw(dram.plot, cr)
Text.draw(battery_draw.label, cr) Text.draw(battery_draw.label, cr)
Text.draw(battery_draw.value, cr) Text.draw(battery_draw.value, cr)

View File

@ -3,69 +3,103 @@ local M = {}
local Color = require 'Color' local Color = require 'Color'
local Util = require 'Util' local Util = require 'Util'
local WHITE = 0xffffffff -- text colors
M.WHITE = Color.init{hex_rgba = 0xffffff}
local GREY1 = 0xeeeeeeff M.LIGHT_GREY = Color.init{hex_rgba = 0xeeeeee}
local GREY2 = 0xbfbfbfff M.MID_GREY = Color.init{hex_rgba = 0xd6d6d6}
local GREY3 = 0xd6d6d6ff M.DARK_GREY = Color.init{hex_rgba = 0x888888}
local GREY4 = 0x888888ff
local GREY5 = 0x565656ff
local GREY6 = 0x2f2f2fb2
local BLACK = 0x000000ff
local BLUE1 = 0x99CEFFff
local BLUE2 = 0xBFE1FFff
local BLUE3 = 0x316BA6ff
local RED1 = 0xFF3333ff
local RED2 = 0xFF8282ff
local RED3 = 0xFFB8B8ff
local PURPLE1 = 0xeecfffff
local PURPLE2 = 0xcb91ffff
local PURPLE3 = 0x9523ffff
M.WHITE = Color.init{hex_rgba = WHITE}
M.LIGHT_GREY = Color.init{hex_rgba = GREY1}
M.MID_GREY = Color.init{hex_rgba = GREY3}
M.DARK_GREY = Color.init{hex_rgba = GREY4}
M.BLUE = Color.init{hex_rgba = BLUE2}
M.RED = Color.init{hex_rgba = RED2}
M.PURPLE = Color.init{hex_rgba = PURPLE2}
M.BLUE = Color.init{hex_rgba = 0xbfe1ff}
M.RED = Color.init{hex_rgba = 0xff8282}
M.PURPLE = Color.init{hex_rgba = 0xcb91ff}
M.YELLOW = Color.init{hex_rgba = 0xefe7aa
}
-- arc patterns
local GREY2 = 0xbfbfbf
local GREY5 = 0x565656
M.GREY_ROUNDED = Color.Gradient{ M.GREY_ROUNDED = Color.Gradient{
Color.ColorStop{hex_rgba = GREY5, stop = 0.0}, Color.ColorStop{hex_rgba = GREY5, stop = 0.0},
Color.ColorStop{hex_rgba = GREY2, stop = 0.5}, Color.ColorStop{hex_rgba = GREY2, stop = 0.5},
Color.ColorStop{hex_rgba = GREY5, stop = 1.0} Color.ColorStop{hex_rgba = GREY5, stop = 1.0}
} }
local BLUE1 = 0x99CEFF
local BLUE3 = 0x316BA6
M.BLUE_ROUNDED = Color.Gradient{ M.BLUE_ROUNDED = Color.Gradient{
Color.ColorStop{hex_rgba = BLUE3, stop = 0.0}, Color.ColorStop{hex_rgba = BLUE3, stop = 0.0},
Color.ColorStop{hex_rgba = BLUE1, stop = 0.5}, Color.ColorStop{hex_rgba = BLUE1, stop = 0.5},
Color.ColorStop{hex_rgba = BLUE3, stop = 1.0} Color.ColorStop{hex_rgba = BLUE3, stop = 1.0}
} }
local RED1 = 0xFF3333
local RED3 = 0xFFB8B8
M.RED_ROUNDED = Color.Gradient{ M.RED_ROUNDED = Color.Gradient{
Color.ColorStop{hex_rgba = RED1, stop = 0.0}, Color.ColorStop{hex_rgba = RED1, stop = 0.0},
Color.ColorStop{hex_rgba = RED3, stop = 0.5}, Color.ColorStop{hex_rgba = RED3, stop = 0.5},
Color.ColorStop{hex_rgba = RED1, stop = 1.0} Color.ColorStop{hex_rgba = RED1, stop = 1.0}
} }
local PURPLE1 = 0xeecfff
local PURPLE3 = 0x9523ff
M.PURPLE_ROUNDED = Color.Gradient{ M.PURPLE_ROUNDED = Color.Gradient{
Color.ColorStop{hex_rgba = PURPLE3, stop = 0.0}, Color.ColorStop{hex_rgba = PURPLE3, stop = 0.0},
Color.ColorStop{hex_rgba = PURPLE1, stop = 0.5}, Color.ColorStop{hex_rgba = PURPLE1, stop = 0.5},
Color.ColorStop{hex_rgba = PURPLE3, stop = 1.0} Color.ColorStop{hex_rgba = PURPLE3, stop = 1.0}
} }
M.TRANSPARENT_BLACK = Color.init{hex_rgba = BLACK, force_alpha = 0.7}
M.TRANSPARENT_BLUE = Color.Gradient{ M.TRANSPARENT_BLUE = Color.Gradient{
Color.ColorStop{hex_rgba = BLUE3, stop = 0.0, force_alpha = 0.2}, Color.ColorStop{hex_rgba = BLUE3, stop = 0.0, alpha = 0.2},
Color.ColorStop{hex_rgba = BLUE1, stop = 1.0, force_alpha = 1.0} Color.ColorStop{hex_rgba = BLUE1, stop = 1.0, alpha = 1.0}
} }
-- plot patterns
local PLOT_BLUE1 = 0x003f7c
local PLOT_BLUE2 = 0x1e90ff
local PLOT_BLUE3 = 0x316ece
local PLOT_BLUE4 = 0x8cc7ff
M.PLOT_LINE_BLUE = Color.Gradient{
Color.ColorStop{hex_rgba = PLOT_BLUE1, stop = 0.0},
Color.ColorStop{hex_rgba = PLOT_BLUE2, stop = 1.0}
}
M.PLOT_FILL_BLUE = Color.Gradient{
Color.ColorStop{hex_rgba = PLOT_BLUE3, stop = 0.0, alpha = 0.2},
Color.ColorStop{hex_rgba = PLOT_BLUE4, stop = 1.0, alpha = 1.0}
}
local PLOT_PURPLE1 = 0x3e0077
local PLOT_PURPLE2 = 0x9523ff
local PLOT_PURPLE3 = 0x7a30a3
local PLOT_PURPLE4 = 0xeac4ff
M.PLOT_LINE_PURPLE = Color.Gradient{
Color.ColorStop{hex_rgba = PLOT_PURPLE1, stop = 0.0},
Color.ColorStop{hex_rgba = PLOT_PURPLE2, stop = 1.0}
}
M.PLOT_FILL_PURPLE = Color.Gradient{
Color.ColorStop{hex_rgba = PLOT_PURPLE3, stop = 0.0, alpha = 0.2},
Color.ColorStop{hex_rgba = PLOT_PURPLE4, stop = 1.0, alpha = 1.0}
}
local PLOT_YELLOW1 = 0x231f00
local PLOT_YELLOW2 = 0x7c6f00
local PLOT_YELLOW3 = 0x8c8225
local PLOT_YELLOW4 = 0xfff387
M.PLOT_LINE_YELLOW = Color.Gradient{
Color.ColorStop{hex_rgba = PLOT_YELLOW1, stop = 0.0},
Color.ColorStop{hex_rgba = PLOT_YELLOW2, stop = 1.0}
}
M.PLOT_FILL_YELLOW = Color.Gradient{
Color.ColorStop{hex_rgba = PLOT_YELLOW3, stop = 0.0, alpha = 0.2},
Color.ColorStop{hex_rgba = PLOT_YELLOW4, stop = 1.0, alpha = 1.0}
}
-- panel pattern
M.TRANSPARENT_BLACK = Color.init{hex_rgba = 0x000000, alpha = 0.7}
M = Util.set_finalizer(M, function() print('Cleaning up Patterns.lua') end) M = Util.set_finalizer(M, function() print('Cleaning up Patterns.lua') end)
return M return M