From 4c5fda5634649aec25d42ac1a9c95936d99b48ba Mon Sep 17 00:00:00 2001 From: Kazumasa Mitsunari Date: Mon, 25 Jun 2018 18:59:34 +0900 Subject: Refactor: Integrate rework handles by application Integrate rework handles information by application. Window Manager handles request by "task" and block other requests until the task finishes. This is necessary because window mangaer task consists of 2 asyncronous parts, which are checking policy and redraw sync, and ensures the 2 parts should be managed consecutively. Bug-AGL: SPEC-1510 Change-Id: I9a1d5daad5b47dd5e68a437173b3d5f1b3923865 Signed-off-by: Kazumasa Mitsunari --- src/app.hpp | 66 +++++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 42 insertions(+), 24 deletions(-) (limited to 'src/app.hpp') diff --git a/src/app.hpp b/src/app.hpp index 4dce828..8037296 100644 --- a/src/app.hpp +++ b/src/app.hpp @@ -27,6 +27,8 @@ #include "layout.hpp" #include "wayland_ivi_wm.hpp" #include "hmi-debug.h" +#include "request.hpp" +#include "wm_error.hpp" namespace wl { @@ -150,7 +152,9 @@ struct App Event_SyncDraw, Event_FlushDraw, - Event_Val_Max = Event_FlushDraw, + Event_Error, + + Event_Val_Max = Event_Error, }; const std::vector kListEventName{ @@ -159,7 +163,8 @@ struct App "visible", "invisible", "syncdraw", - "flushdraw"}; + "flushdraw", + "error"}; struct controller_hooks chooks; @@ -178,8 +183,6 @@ struct App // Set by AFB API when wayland events need to be dispatched std::atomic pending_events; - std::vector pending_end_draw; - std::map map_afb_event; // Surface are info (x, y, w, h) @@ -197,16 +200,14 @@ struct App App &operator=(App &&) = delete; int init(); - int dispatch_pending_events(); - void set_pending_events(); - result api_request_surface(char const *drawing_name); - char const *api_request_surface(char const *drawing_name, char const *ivi_id); - void api_activate_surface(char const *drawing_name, char const *drawing_area, const reply_func &reply); - void api_deactivate_surface(char const *drawing_name, const reply_func &reply); - void api_enddraw(char const *drawing_name); + result api_request_surface(char const *appid, char const *drawing_name); + char const *api_request_surface(char const *appid, char const *drawing_name, char const *ivi_id); + void api_activate_surface(char const *appid, char const *drawing_name, char const *drawing_area, const reply_func &reply); + void api_deactivate_surface(char const *appid, char const *drawing_name, const reply_func &reply); + void api_enddraw(char const *appid, char const *drawing_name); result api_get_display_info(); result api_get_area_info(char const *drawing_name); void api_ping(); @@ -217,36 +218,53 @@ struct App void surface_created(uint32_t surface_id); void surface_removed(uint32_t surface_id); + void removeClient(const std::string &appid); + void exceptionProcessForTransition(); + // Do not use this function + void timerHandler(); + private: + bool pop_pending_events(); optional lookup_id(char const *name); optional lookup_name(int id); - - bool pop_pending_events(); - - void enqueue_flushdraw(int surface_id); - void check_flushdraw(int surface_id); - int init_layers(); - - void surface_set_layout(int surface_id, optional sub_surface_id = nullopt); + void surface_set_layout(int surface_id, const std::string& area = ""); void layout_commit(); - // TMC WM Events to clients + // WM Events to clients void emit_activated(char const *label); void emit_deactivated(char const *label); void emit_syncdraw(char const *label, char const *area, int x, int y, int w, int h); + void emit_syncdraw(const std::string &role, const std::string &area); void emit_flushdraw(char const *label); void emit_visible(char const *label, bool is_visible); void emit_invisible(char const *label); void emit_visible(char const *label); + WMError setRequest(const std::string &appid, const std::string &role, const std::string &area, + Task task, unsigned *req_num); + WMError doTransition(unsigned sequence_number); + WMError checkPolicy(unsigned req_num); + WMError startTransition(unsigned req_num); + WMError setInvisibleTask(const std::string &role, bool split); + + WMError doEndDraw(unsigned req_num); + WMError layoutChange(const WMAction &action); + WMError visibilityChange(const WMAction &action); + WMError setSurfaceSize(unsigned surface, const std::string& area); + WMError changeCurrentState(unsigned req_num); + + void setTimer(); + void stopTimer(); + void processNextRequest(); + + const char *check_surface_exist(const char *drawing_name); void activate(int id); void deactivate(int id); - bool can_split(struct LayoutState const &state, int new_id); - void try_layout(struct LayoutState &state, - struct LayoutState const &new_layout, - std::function apply); + + private: + std::unordered_map area2size; }; } // namespace wm -- cgit 1.2.3-korg