From 5f4ead01bb91a30216bc0aca6eaf3c9fb4980273 Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Mon, 2 Jan 2017 13:02:02 +0100 Subject: [PATCH] server/wm: API transition Ref #1987 --- .../gems/src/server/wm/decorator_nitpicker.h | 32 ++++---- repos/gems/src/server/wm/layouter_nitpicker.h | 4 - repos/gems/src/server/wm/main.cc | 57 ++++++------- repos/gems/src/server/wm/nitpicker.h | 80 ++++++++++--------- repos/gems/src/server/wm/target.mk | 2 +- 5 files changed, 84 insertions(+), 91 deletions(-) diff --git a/repos/gems/src/server/wm/decorator_nitpicker.h b/repos/gems/src/server/wm/decorator_nitpicker.h index 62d0782091..ec2cc27b9a 100644 --- a/repos/gems/src/server/wm/decorator_nitpicker.h +++ b/repos/gems/src/server/wm/decorator_nitpicker.h @@ -17,8 +17,7 @@ /* Genode includes */ #include #include -#include -#include +#include #include #include #include @@ -32,14 +31,13 @@ namespace Wm { class Main; using Genode::size_t; using Genode::Allocator; - using Server::Entrypoint; using Genode::Ram_session_client; using Genode::Ram_session_capability; using Genode::Arg_string; using Genode::Object_pool; using Genode::Attached_dataspace; using Genode::Attached_ram_dataspace; - using Genode::Signal_rpc_member; + using Genode::Signal_handler; using Genode::Reporter; } @@ -159,15 +157,17 @@ struct Wm::Decorator_nitpicker_session : Genode::Rpc_object, typedef Nitpicker::View_capability View_capability; typedef Nitpicker::Session::View_handle View_handle; + Genode::Env &_env; + Ram_session_client _ram; - Nitpicker::Connection _nitpicker_session { "decorator" }; + Nitpicker::Connection _nitpicker_session { _env, "decorator" }; Genode::Signal_context_capability _mode_sigh; typedef Nitpicker::Session::Command_buffer Command_buffer; - Attached_ram_dataspace _command_ds { &_ram, sizeof(Command_buffer) }; + Attached_ram_dataspace _command_ds { _ram, _env.rm(), sizeof(Command_buffer) }; Command_buffer &_command_buffer = *_command_ds.local_addr(); @@ -182,41 +182,41 @@ struct Wm::Decorator_nitpicker_session : Genode::Rpc_object, /* XXX don't allocate content-registry entries from heap */ Decorator_content_registry _content_registry { *Genode::env()->heap() }; - Entrypoint &_ep; - Allocator &_md_alloc; /* Nitpicker::Connection requires a valid input session */ Input::Session_component _dummy_input_component; Input::Session_capability _dummy_input_component_cap = - _ep.manage(_dummy_input_component); + _env.ep().manage(_dummy_input_component); - Signal_rpc_member - _input_dispatcher { _ep, *this, &Decorator_nitpicker_session::_input_handler }; + Signal_handler + _input_handler { _env.ep(), *this, &Decorator_nitpicker_session::_handle_input }; /** * Constructor * * \param ep entrypoint used for dispatching signals */ - Decorator_nitpicker_session(Ram_session_capability ram, - Entrypoint &ep, Allocator &md_alloc, + Decorator_nitpicker_session(Genode::Env &env, + Ram_session_capability ram, + Allocator &md_alloc, Reporter &pointer_reporter, Last_motion &last_motion, Input::Session_component &window_layouter_input, Decorator_content_callback &content_callback) : + _env(env), _ram(ram), _pointer_reporter(pointer_reporter), _last_motion(last_motion), _window_layouter_input(window_layouter_input), _content_callback(content_callback), - _ep(ep), _md_alloc(md_alloc) + _md_alloc(md_alloc) { - _nitpicker_session.input()->sigh(_input_dispatcher); + _nitpicker_session.input()->sigh(_input_handler); } - void _input_handler(unsigned) + void _handle_input() { while (_nitpicker_session.input()->pending()) _nitpicker_session.input()->for_each_event([&] (Input::Event const &ev) { diff --git a/repos/gems/src/server/wm/layouter_nitpicker.h b/repos/gems/src/server/wm/layouter_nitpicker.h index b9e1b8912d..bf2fef2c3b 100644 --- a/repos/gems/src/server/wm/layouter_nitpicker.h +++ b/repos/gems/src/server/wm/layouter_nitpicker.h @@ -15,13 +15,9 @@ #define _LAYOUTER_NITPICKER_H_ /* Genode includes */ -#include #include #include -namespace Wm { using Server::Entrypoint; } - - namespace Wm { struct Layouter_nitpicker_session; struct Layouter_nitpicker_service; diff --git a/repos/gems/src/server/wm/main.cc b/repos/gems/src/server/wm/main.cc index 3dc69b6a5e..6b466edde5 100644 --- a/repos/gems/src/server/wm/main.cc +++ b/repos/gems/src/server/wm/main.cc @@ -12,11 +12,11 @@ */ /* Genode includes */ -#include #include #include -#include -#include +#include +#include +#include #include #include @@ -38,15 +38,15 @@ namespace Wm { struct Wm::Main { - Server::Entrypoint &ep; + Genode::Env &env; - Genode::Cap_connection cap; + Genode::Heap heap { env.ram(), env.rm() }; /* currently focused window, reported by the layouter */ - Attached_rom_dataspace focus_rom { "focus" }; + Attached_rom_dataspace focus_rom { env, "focus" }; /* resize requests, issued by the layouter */ - Attached_rom_dataspace resize_request_rom { "resize_request" }; + Attached_rom_dataspace resize_request_rom { env, "resize_request" }; /* pointer position to be consumed by the layouter */ Reporter pointer_reporter = { "pointer" }; @@ -57,16 +57,16 @@ struct Wm::Main /* request to the layouter to set the focus */ Reporter focus_request_reporter = { "focus_request" }; - Window_registry window_registry { *env()->heap(), window_list_reporter }; + Window_registry window_registry { heap, window_list_reporter }; Nitpicker::Connection focus_nitpicker_session; - Nitpicker::Root nitpicker_root { ep, window_registry, - *env()->heap(), env()->ram_session_cap(), + Nitpicker::Root nitpicker_root { env, window_registry, + heap, env.ram_session_cap(), pointer_reporter, focus_request_reporter, focus_nitpicker_session }; - void handle_focus_update(unsigned) + void handle_focus_update() { try { focus_rom.update(); @@ -90,9 +90,10 @@ struct Wm::Main } } - Genode::Signal_rpc_member
focus_dispatcher = { ep, *this, &Main::handle_focus_update }; + Genode::Signal_handler
focus_handler = { + env.ep(), *this, &Main::handle_focus_update }; - void handle_resize_request_update(unsigned) + void handle_resize_request_update() { try { resize_request_rom.update(); @@ -122,10 +123,10 @@ struct Wm::Main } catch (...) { /* no resize-request model available */ } } - Genode::Signal_rpc_member
resize_request_dispatcher = - { ep, *this, &Main::handle_resize_request_update }; + Genode::Signal_handler
resize_request_handler = + { env.ep(), *this, &Main::handle_resize_request_update }; - Main(Server::Entrypoint &ep) : ep(ep) + Main(Genode::Env &env) : env(env) { pointer_reporter.enabled(true); @@ -135,24 +136,18 @@ struct Wm::Main focus_request_reporter.enabled(true); - focus_rom.sigh(focus_dispatcher); - resize_request_rom.sigh(resize_request_dispatcher); + focus_rom.sigh(focus_handler); + resize_request_rom.sigh(resize_request_handler); } }; -/************ - ** Server ** - ************/ +/*************** + ** Component ** + ***************/ -namespace Server { +Genode::size_t Component::stack_size() { + return 16*1024*sizeof(long); } - char const *name() { return "desktop_ep"; } - - size_t stack_size() { return 16*1024*sizeof(long); } - - void construct(Entrypoint &ep) - { - static Wm::Main desktop(ep); - } -} +void Component::construct(Genode::Env &env) { + static Wm::Main desktop(env); } diff --git a/repos/gems/src/server/wm/nitpicker.h b/repos/gems/src/server/wm/nitpicker.h index 8804e6de91..4dc3959355 100644 --- a/repos/gems/src/server/wm/nitpicker.h +++ b/repos/gems/src/server/wm/nitpicker.h @@ -17,13 +17,11 @@ /* Genode includes */ #include #include -#include #include -#include +#include #include #include #include -#include #include #include #include @@ -43,7 +41,7 @@ namespace Wm { using Genode::Allocator; using Genode::Affinity; using Genode::static_cap_cast; - using Genode::Signal_rpc_member; + using Genode::Signal_handler; using Genode::Ram_session_capability; using Genode::Weak_ptr; using Genode::Locked_ptr; @@ -434,13 +432,14 @@ class Wm::Nitpicker::Session_component : public Rpc_object, typedef Nitpicker::Session::View_handle View_handle; + Genode::Env &_env; + Session_label _session_label; Ram_session_client _ram; - Nitpicker::Connection _session { _session_label.string() }; + Nitpicker::Connection _session { _env, _session_label.string() }; Window_registry &_window_registry; Session_control_fn &_session_control_fn; - Entrypoint &_ep; Tslab _top_level_view_alloc; Tslab _child_view_alloc; List _top_level_views; @@ -476,8 +475,8 @@ class Wm::Nitpicker::Session_component : public Rpc_object, Input::Session_client _nitpicker_input { _session.input_session() }; Attached_dataspace _nitpicker_input_ds { _nitpicker_input.dataspace() }; - Signal_rpc_member _input_dispatcher { - _ep, *this, &Session_component::_input_handler }; + Signal_handler _input_handler { + _env.ep(), *this, &Session_component::_handle_input }; Point _input_origin() const { @@ -538,7 +537,7 @@ class Wm::Nitpicker::Session_component : public Rpc_object, bool _first_motion = true; - void _input_handler(unsigned) + void _handle_input() { Point const input_origin = _input_origin(); @@ -610,14 +609,14 @@ class Wm::Nitpicker::Session_component : public Rpc_object, void _destroy_top_level_view(Top_level_view &view) { _top_level_views.remove(&view); - _ep.dissolve(view); + _env.ep().dissolve(view); Genode::destroy(&_top_level_view_alloc, &view); } void _destroy_child_view(Child_view &view) { _child_views.remove(&view); - _ep.dissolve(view); + _env.ep().dissolve(view); Genode::destroy(&_child_view_alloc, &view); } @@ -709,26 +708,26 @@ class Wm::Nitpicker::Session_component : public Rpc_object, * * \param ep entrypoint used for managing the views */ - Session_component(Ram_session_capability ram, + Session_component(Genode::Env &env, + Ram_session_capability ram, Window_registry &window_registry, - Entrypoint &ep, Allocator &session_alloc, Session_label const &session_label, Click_handler &click_handler, Session_control_fn &session_control_fn) : + _env(env), _session_label(session_label), _ram(ram), _window_registry(window_registry), _session_control_fn(session_control_fn), - _ep(ep), _top_level_view_alloc(&session_alloc), _child_view_alloc(&session_alloc), - _input_session_cap(_ep.manage(_input_session)), + _input_session_cap(env.ep().manage(_input_session)), _click_handler(click_handler), _view_handle_registry(session_alloc) { - _nitpicker_input.sigh(_input_dispatcher); + _nitpicker_input.sigh(_input_handler); _input_session.event_queue().enabled(true); } @@ -740,7 +739,7 @@ class Wm::Nitpicker::Session_component : public Rpc_object, while (Child_view *view = _child_views.first()) _destroy_view_object(*view); - _ep.dissolve(_input_session); + _env.ep().dissolve(_input_session); } void upgrade(char const *args) @@ -847,7 +846,7 @@ class Wm::Nitpicker::Session_component : public Rpc_object, { try { View &view = _create_view_object(parent); - _ep.manage(view); + _env.ep().manage(view); return _view_handle_registry.alloc(view); } catch (View_handle_registry::Lookup_failed) { @@ -868,7 +867,7 @@ class Wm::Nitpicker::Session_component : public Rpc_object, View_handle view_handle(View_capability view_cap, View_handle handle) override { - return _ep.rpc_ep().apply(view_cap, [&] (View *view) { + return _env.ep().rpc_ep().apply(view_cap, [&] (View *view) { return (view) ? _view_handle_registry.alloc(*view, handle) : View_handle(); }); } @@ -994,7 +993,9 @@ class Wm::Nitpicker::Root : public Genode::Rpc_objectparent()->announce(_ep.manage(*this)); + env.parent().announce(env.ep().manage(*this)); } @@ -1127,7 +1128,8 @@ class Wm::Nitpicker::Root : public Genode::Rpc_objectram_session(), _window_layouter_input_cap); - return _ep.manage(*_layouter_session); + return _env.ep().manage(*_layouter_session); } case ROLE_DIRECT: @@ -1182,7 +1184,7 @@ class Wm::Nitpicker::Root : public Genode::Rpc_objectupgrade(args.string()); }; - _ep.rpc_ep().apply(session_cap, lambda); + _env.ep().rpc_ep().apply(session_cap, lambda); } void close(Genode::Session_capability session_cap) override { - Genode::Rpc_entrypoint &ep = _ep.rpc_ep(); + Genode::Rpc_entrypoint &ep = _env.ep().rpc_ep(); Session_component *regular_session = ep.apply(session_cap, [this] (Session_component *session) { if (session) { _sessions.remove(session); - _ep.dissolve(*session); + _env.ep().dissolve(*session); } return session; }); @@ -1240,7 +1242,7 @@ class Wm::Nitpicker::Root : public Genode::Rpc_object_env.ep().dissolve(*_layouter_session); _layouter_session = nullptr; return session; }; diff --git a/repos/gems/src/server/wm/target.mk b/repos/gems/src/server/wm/target.mk index 1d59dfe223..6626626237 100644 --- a/repos/gems/src/server/wm/target.mk +++ b/repos/gems/src/server/wm/target.mk @@ -1,4 +1,4 @@ TARGET = wm SRC_CC = main.cc -LIBS = base server config +LIBS = base INC_DIR += $(PRG_DIR)