diff options
author | Kazumasa Mitsunari <knimitz@witz-inc.co.jp> | 2018-06-25 18:59:34 +0900 |
---|---|---|
committer | Kazumasa Mitsunari <knimitz@witz-inc.co.jp> | 2018-06-27 08:18:57 +0000 |
commit | 4c5fda5634649aec25d42ac1a9c95936d99b48ba (patch) | |
tree | 208500a21cc482486c427b07243202b2e86d517b /src/app.hpp | |
parent | 847dde9621cef9b9a44eda95c63c0fe3f528468d (diff) |
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 <knimitz@witz-inc.co.jp>
Diffstat (limited to 'src/app.hpp')
-rw-r--r-- | src/app.hpp | 66 |
1 files changed, 42 insertions, 24 deletions
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<const char *> 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<bool> pending_events; - std::vector<int> pending_end_draw; - std::map<const char *, struct afb_event> 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<int> 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<int> 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<json_object *> api_get_display_info(); result<json_object *> 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<int> lookup_id(char const *name); optional<std::string> 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<int> 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<void(LayoutState const &nl)> apply); + + private: + std::unordered_map<std::string, struct compositor::rect> area2size; }; } // namespace wm |