aboutsummaryrefslogtreecommitdiffstats
path: root/src/app.hpp
diff options
context:
space:
mode:
authorKazumasa Mitsunari <knimitz@witz-inc.co.jp>2018-06-25 18:59:34 +0900
committerKazumasa Mitsunari <knimitz@witz-inc.co.jp>2018-06-27 08:18:57 +0000
commit4c5fda5634649aec25d42ac1a9c95936d99b48ba (patch)
tree208500a21cc482486c427b07243202b2e86d517b /src/app.hpp
parent847dde9621cef9b9a44eda95c63c0fe3f528468d (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.hpp66
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