mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-30 10:38:55 +00:00
sculpt: add system-control in resource dialog
This patch allows for the interactive assignment of the system-control role to a new component via the resource dialog. This is useful for integrating low-level components like the Intel frequency/power monitoring tool. Fixes #5033
This commit is contained in:
parent
b3a9a2eb4e
commit
94d04b724a
@ -48,9 +48,10 @@ struct Sculpt::Component : Noncopyable
|
|||||||
affinity_space.height() };
|
affinity_space.height() };
|
||||||
Priority priority = Priority::DEFAULT;
|
Priority priority = Priority::DEFAULT;
|
||||||
|
|
||||||
bool monitor { false };
|
bool monitor { false };
|
||||||
bool wait { false };
|
bool wait { false };
|
||||||
bool wx { false };
|
bool wx { false };
|
||||||
|
bool system_control { false };
|
||||||
|
|
||||||
struct Blueprint_info
|
struct Blueprint_info
|
||||||
{
|
{
|
||||||
@ -175,6 +176,12 @@ struct Sculpt::Component : Noncopyable
|
|||||||
xml.attribute("priority", (int)priority);
|
xml.attribute("priority", (int)priority);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void gen_system_control(Xml_generator &xml) const
|
||||||
|
{
|
||||||
|
if (system_control)
|
||||||
|
xml.attribute("managing_system", "yes");
|
||||||
|
}
|
||||||
|
|
||||||
void gen_affinity(Xml_generator &xml) const
|
void gen_affinity(Xml_generator &xml) const
|
||||||
{
|
{
|
||||||
bool const all_cpus = affinity_space.width() == affinity_location.width()
|
bool const all_cpus = affinity_space.width() == affinity_location.width()
|
||||||
|
@ -183,8 +183,8 @@ class Sculpt::Runtime_state : public Runtime_info
|
|||||||
xml.attribute("pkg", construction->path);
|
xml.attribute("pkg", construction->path);
|
||||||
|
|
||||||
construction->gen_priority(xml);
|
construction->gen_priority(xml);
|
||||||
|
construction->gen_system_control(xml);
|
||||||
construction->gen_affinity(xml);
|
construction->gen_affinity(xml);
|
||||||
|
|
||||||
construction->gen_monitor(xml);
|
construction->gen_monitor(xml);
|
||||||
|
|
||||||
xml.node("route", [&] () {
|
xml.node("route", [&] () {
|
||||||
|
@ -173,13 +173,12 @@ void Resource_dialog::_gen_priority_section(Xml_generator &xml) const
|
|||||||
|
|
||||||
void Resource_dialog::click(Component &component)
|
void Resource_dialog::click(Component &component)
|
||||||
{
|
{
|
||||||
if (component.affinity_space.total() <= 1)
|
if (component.affinity_space.total() > 1) {
|
||||||
return;
|
Hoverable_item::Id const clicked_space = _space_item._hovered;
|
||||||
|
if (clicked_space.valid()) {
|
||||||
Hoverable_item::Id const clicked_space = _space_item._hovered;
|
_click_space(component, clicked_space);
|
||||||
if (clicked_space.valid()) {
|
return;
|
||||||
_click_space(component, clicked_space);
|
}
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Hoverable_item::Id const clicked_priority = _priority_item._hovered;
|
Hoverable_item::Id const clicked_priority = _priority_item._hovered;
|
||||||
@ -187,6 +186,11 @@ void Resource_dialog::click(Component &component)
|
|||||||
_click_priority(component, clicked_priority);
|
_click_priority(component, clicked_priority);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_option_item.hovered("system_control")) {
|
||||||
|
_system_control = !_system_control;
|
||||||
|
component.system_control = _system_control;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -34,6 +34,9 @@ struct Sculpt::Resource_dialog : Noncopyable, Deprecated_dialog
|
|||||||
Affinity::Location _location;
|
Affinity::Location _location;
|
||||||
Hoverable_item _space_item { };
|
Hoverable_item _space_item { };
|
||||||
Selectable_item _priority_item { };
|
Selectable_item _priority_item { };
|
||||||
|
Hoverable_item _option_item { };
|
||||||
|
|
||||||
|
bool _system_control = false;
|
||||||
|
|
||||||
static char const *_priority_id(Priority priority)
|
static char const *_priority_id(Priority priority)
|
||||||
{
|
{
|
||||||
@ -72,7 +75,9 @@ struct Sculpt::Resource_dialog : Noncopyable, Deprecated_dialog
|
|||||||
),
|
),
|
||||||
_priority_item.match(hover,
|
_priority_item.match(hover,
|
||||||
"vbox", "float", "hbox", /* _gen_dialog_section */
|
"vbox", "float", "hbox", /* _gen_dialog_section */
|
||||||
"vbox", "hbox", "float", "hbox", "name"));
|
"vbox", "hbox", "float", "hbox", "name"),
|
||||||
|
_option_item.match(hover, "vbox", "hbox", "name")
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void click(Component &);
|
void click(Component &);
|
||||||
@ -122,6 +127,38 @@ struct Sculpt::Resource_dialog : Noncopyable, Deprecated_dialog
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _gen_option(Xml_generator &xml, auto const &name, auto const &text, bool selected) const
|
||||||
|
{
|
||||||
|
gen_named_node(xml, "hbox", name, [&] () {
|
||||||
|
|
||||||
|
gen_named_node(xml, "float", "left", [&] () {
|
||||||
|
xml.attribute("west", "yes");
|
||||||
|
|
||||||
|
xml.node("hbox", [&] () {
|
||||||
|
|
||||||
|
/* align with the "Resource assignment ..." dialog */
|
||||||
|
gen_named_node(xml, "button", "left", [&] () {
|
||||||
|
xml.attribute("style", "invisible");
|
||||||
|
xml.node("hbox", [&] () { }); });
|
||||||
|
|
||||||
|
gen_named_node(xml, "button", "button", [&] () {
|
||||||
|
|
||||||
|
if (selected)
|
||||||
|
xml.attribute("selected", "yes");
|
||||||
|
|
||||||
|
xml.attribute("style", "checkbox");
|
||||||
|
_option_item.gen_hovered_attr(xml, name);
|
||||||
|
xml.node("hbox", [&] () { });
|
||||||
|
});
|
||||||
|
gen_named_node(xml, "label", "name", [&] () {
|
||||||
|
xml.attribute("text", Path(" ", text)); });
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
gen_named_node(xml, "hbox", "right", [&] () { });
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
void generate(Xml_generator &xml) const override
|
void generate(Xml_generator &xml) const override
|
||||||
{
|
{
|
||||||
auto gen_vspacer = [&] (auto id) {
|
auto gen_vspacer = [&] (auto id) {
|
||||||
@ -135,6 +172,8 @@ struct Sculpt::Resource_dialog : Noncopyable, Deprecated_dialog
|
|||||||
gen_vspacer("spacer2");
|
gen_vspacer("spacer2");
|
||||||
_gen_priority_section(xml);
|
_gen_priority_section(xml);
|
||||||
gen_vspacer("spacer3");
|
gen_vspacer("spacer3");
|
||||||
|
_gen_option(xml, "system_control", "System control", _system_control);
|
||||||
|
gen_vspacer("spacer4");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -143,6 +182,8 @@ struct Sculpt::Resource_dialog : Noncopyable, Deprecated_dialog
|
|||||||
_space_item._hovered = Hoverable_item::Id();
|
_space_item._hovered = Hoverable_item::Id();
|
||||||
_priority_item.reset();
|
_priority_item.reset();
|
||||||
_location = Affinity::Location();
|
_location = Affinity::Location();
|
||||||
|
_system_control = false;
|
||||||
|
_option_item._hovered = Hoverable_item::Id();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user