diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/applist.cpp | 16 | ||||
-rw-r--r-- | src/applist.hpp | 2 | ||||
-rw-r--r-- | src/json_helper.cpp | 20 | ||||
-rw-r--r-- | src/json_helper.hpp | 8 | ||||
-rw-r--r-- | src/main.cpp | 215 | ||||
-rw-r--r-- | src/pm_wrapper.cpp | 41 | ||||
-rw-r--r-- | src/request.hpp | 6 | ||||
-rw-r--r-- | src/util.cpp | 89 | ||||
-rw-r--r-- | src/util.hpp | 97 | ||||
-rw-r--r-- | src/wayland_ivi_wm.cpp | 76 | ||||
-rw-r--r-- | src/window_manager.cpp | 208 | ||||
-rw-r--r-- | src/window_manager.hpp | 18 | ||||
-rw-r--r-- | src/wm_client.cpp | 18 | ||||
-rw-r--r-- | src/wm_layer.cpp (renamed from src/layers.cpp) | 42 | ||||
-rw-r--r-- | src/wm_layer.hpp (renamed from src/layers.hpp) | 6 |
16 files changed, 424 insertions, 440 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 91908e8..223dd33 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -33,7 +33,7 @@ add_library(${TARGETS_WM} MODULE ${IVI_CON_PROTO} json_helper.cpp window_manager.cpp - layers.cpp + wm_layer.cpp wm_client.cpp wm_error.cpp applist.cpp diff --git a/src/applist.cpp b/src/applist.cpp index a5ae9f0..79df62c 100644 --- a/src/applist.cpp +++ b/src/applist.cpp @@ -16,7 +16,7 @@ #include <iostream> #include <algorithm> #include "applist.hpp" -#include "../include/hmi-debug.h" +#include "util.hpp" using std::shared_ptr; using std::string; @@ -65,7 +65,7 @@ AppList::~AppList() {} * @attention This function should be called once for the app * Caller should take care not to be called more than once. */ -void AppList::addClient(const std::string &appid, unsigned layer, unsigned surface, const std::string &role) +void AppList::addClient(const string &appid, unsigned layer, unsigned surface, const string &role) { std::lock_guard<std::mutex> lock(this->mtx); shared_ptr<WMClient> client = std::make_shared<WMClient>(appid, layer, surface, role); @@ -82,7 +82,7 @@ void AppList::removeClient(const string &appid) { std::lock_guard<std::mutex> lock(this->mtx); this->app2client.erase(appid); - HMI_INFO("wm", "Remove client %s", appid.c_str()); + HMI_INFO("Remove client %s", appid.c_str()); } /** @@ -111,7 +111,7 @@ void AppList::removeSurface(unsigned surface){ { ret = x.second->removeSurfaceIfExist(surface); if(ret){ - HMI_DEBUG("wm", "remove surface %d from Client %s finish", + HMI_DEBUG("remove surface %d from Client %s finish", surface, x.second->appID().c_str()); break; } @@ -351,7 +351,7 @@ WMError AppList::setAction(unsigned req_num, const struct WMAction &action) * otherwise (visible is false) app should be invisible. Then enddraw_finished param is set to true. * This function doesn't support actions for focus yet. */ -WMError AppList::setAction(unsigned req_num, const string &appid, const string &role, const string &area, TaskVisible visible) +WMError AppList::setAction(unsigned req_num, shared_ptr<WMClient> client, const string &role, const string &area, TaskVisible visible) { std::lock_guard<std::mutex> lock(this->mtx); WMError result = WMError::FAIL; @@ -363,7 +363,7 @@ WMError AppList::setAction(unsigned req_num, const string &appid, const string & } // If visible task is not invisible, redraw is required -> true bool edraw_f = (visible != TaskVisible::INVISIBLE) ? false : true; - WMAction action{appid, role, area, visible, edraw_f}; + WMAction action{req_num, client, role, area, visible, edraw_f}; x.sync_draw_req.push_back(action); result = WMError::SUCCESS; @@ -399,7 +399,7 @@ bool AppList::setEndDrawFinished(unsigned req_num, const string &appid, const st { for (auto &y : x.sync_draw_req) { - if (y.appid == appid && y.role == role) + if (y.client->appID() == appid && y.role == role) { HMI_SEQ_INFO(req_num, "Role %s finish redraw", y.role.c_str()); y.end_draw_finished = true; @@ -514,7 +514,7 @@ void AppList::reqDump() { DUMP( "Action : (APPID :%s, ROLE :%s, AREA :%s, VISIBLE : %s, END_DRAW_FINISHED: %d)", - y.appid.c_str(), + y.client->appID().c_str(), y.role.c_str(), y.area.c_str(), (y.visible == TaskVisible::INVISIBLE) ? "invisible" : "visible", diff --git a/src/applist.hpp b/src/applist.hpp index a794b53..54ccdd1 100644 --- a/src/applist.hpp +++ b/src/applist.hpp @@ -56,7 +56,7 @@ class AppList unsigned getRequestNumber(const std::string &appid) const; unsigned addRequest(WMRequest req); WMError setAction(unsigned req_num, const struct WMAction &action); - WMError setAction(unsigned req_num, const std::string &appid, + WMError setAction(unsigned req_num, std::shared_ptr<WMClient> client, const std::string &role, const std::string &area, TaskVisible visible); bool setEndDrawFinished(unsigned req_num, const std::string &appid, const std::string &role); bool endDrawFullfilled(unsigned req_num); diff --git a/src/json_helper.cpp b/src/json_helper.cpp index b97f21d..cf13363 100644 --- a/src/json_helper.cpp +++ b/src/json_helper.cpp @@ -15,9 +15,7 @@ */ #include "json_helper.hpp" -#include "hmi-debug.h" - -#include <json.h> +#include "util.hpp" json_object *to_json(compositor::surface_properties const &s) { @@ -117,7 +115,7 @@ const char* getStringFromJson(json_object* obj, const char* key) json_object* tmp; if (!json_object_object_get_ex(obj, key, &tmp)) { - HMI_DEBUG("wm:jh", "Not found key \"%s\"", key); + HMI_DEBUG("Not found key \"%s\"", key); return nullptr; } @@ -129,7 +127,7 @@ int getIntFromJson(json_object *obj, const char *key) json_object *tmp; if (!json_object_object_get_ex(obj, key, &tmp)) { - HMI_DEBUG("wm:jh", "Not found key \"%s\"", key); + HMI_DEBUG("Not found key \"%s\"", key); return 0; } @@ -141,7 +139,7 @@ json_bool getBoolFromJson(json_object *obj, const char *key) json_object *tmp; if (!json_object_object_get_ex(obj, key, &tmp)) { - HMI_DEBUG("wm:jh", "Not found key \"%s\"", key); + HMI_DEBUG("Not found key \"%s\"", key); return FALSE; } @@ -153,13 +151,13 @@ int inputJsonFilie(const char* file, json_object** obj) const int input_size = 128; int ret = -1; - HMI_DEBUG("wm:jh", "Input file: %s", file); + HMI_DEBUG("Input file: %s", file); // Open json file FILE *fp = fopen(file, "rb"); if (nullptr == fp) { - HMI_ERROR("wm:jh", "Could not open file"); + HMI_ERROR("Could not open file"); return ret; } @@ -174,7 +172,7 @@ int inputJsonFilie(const char* file, json_object** obj) *obj = json_tokener_parse_ex(tokener, buffer, len); if (nullptr != *obj) { - HMI_DEBUG("wm:jh", "File input is success"); + HMI_DEBUG("File input is success"); ret = 0; break; } @@ -183,9 +181,9 @@ int inputJsonFilie(const char* file, json_object** obj) if ((json_tokener_continue != json_error) || (input_size > len)) { - HMI_ERROR("wm:jh", "Failed to parse file (byte:%d err:%s)", + HMI_ERROR("Failed to parse file (byte:%d err:%s)", (input_size * block_cnt), json_tokener_error_desc(json_error)); - HMI_ERROR("wm:jh", "\n%s", buffer); + HMI_ERROR("\n%s", buffer); *obj = nullptr; break; } diff --git a/src/json_helper.hpp b/src/json_helper.hpp index 5333130..2321f8b 100644 --- a/src/json_helper.hpp +++ b/src/json_helper.hpp @@ -14,11 +14,11 @@ * limitations under the License. */ -#ifndef TMCAGLWM_JSON_HELPER_HPP -#define TMCAGLWM_JSON_HELPER_HPP +#ifndef JSON_HELPER_HPP +#define JSON_HELPER_HPP #include <json-c/json.h> -#include "../include/json.hpp" +#include <vector> #include "wayland_ivi_wm.hpp" struct json_object; @@ -34,4 +34,4 @@ json_bool getBoolFromJson(json_object *obj, const char *key); int inputJsonFilie(const char* file, json_object** obj); } // namespace jh -#endif // TMCAGLWM_JSON_HELPER_HPP +#endif // JSON_HELPER_HPP diff --git a/src/main.cpp b/src/main.cpp index 0447f86..d9f0302 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -18,7 +18,6 @@ #include <algorithm> #include <mutex> #include <json.h> -#include "../include/json.hpp" #include "window_manager.hpp" #include "json_helper.hpp" #include "wayland_ivi_wm.hpp" @@ -61,11 +60,9 @@ int afb_instance::init() int display_event_callback(sd_event_source *evs, int /*fd*/, uint32_t events, void * /*data*/) { - ST(); - if ((events & EPOLLHUP) != 0) { - HMI_ERROR("wm", "The compositor hung up, dying now."); + HMI_ERROR("The compositor hung up, dying now."); delete g_afb_instance; g_afb_instance = nullptr; goto error; @@ -74,17 +71,14 @@ int display_event_callback(sd_event_source *evs, int /*fd*/, uint32_t events, if ((events & EPOLLIN) != 0u) { { - STN(display_read_events); g_afb_instance->wmgr.display->read_events(); g_afb_instance->wmgr.set_pending_events(); } { // We want do dispatch pending wayland events from within // the API context - STN(winman_ping_api_call); afb_service_call("windowmanager", "ping", json_object_new_object(), [](void *c, int st, json_object *j) { - STN(winman_ping_api_call_return); }, nullptr); } @@ -103,17 +97,17 @@ error: int _binding_init() { - HMI_NOTICE("wm", "WinMan ver. %s", WINMAN_VERSION_STRING); + HMI_NOTICE("WinMan ver. %s", WINMAN_VERSION_STRING); if (g_afb_instance != nullptr) { - HMI_ERROR("wm", "Wayland context already initialized?"); + HMI_ERROR("Wayland context already initialized?"); return 0; } if (getenv("XDG_RUNTIME_DIR") == nullptr) { - HMI_ERROR("wm", "Environment variable XDG_RUNTIME_DIR not set"); + HMI_ERROR("Environment variable XDG_RUNTIME_DIR not set"); goto error; } @@ -126,10 +120,10 @@ int _binding_init() cnt++; if (20 <= cnt) { - HMI_ERROR("wm", "Could not connect to compositor"); + HMI_ERROR("Could not connect to compositor"); goto error; } - HMI_ERROR("wm", "Wait to start weston ..."); + HMI_ERROR("Wait to start weston ..."); sleep(1); delete g_afb_instance; g_afb_instance = new afb_instance; @@ -138,7 +132,7 @@ int _binding_init() if (g_afb_instance->init() == -1) { - HMI_ERROR("wm", "Could not connect to compositor"); + HMI_ERROR("Could not connect to compositor"); goto error; } @@ -148,7 +142,7 @@ int _binding_init() display_event_callback, g_afb_instance); if (ret < 0) { - HMI_ERROR("wm", "Could not initialize afb_instance event handler: %d", -ret); + HMI_ERROR("Could not initialize afb_instance event handler: %d", -ret); goto error; } } @@ -171,7 +165,7 @@ int binding_init() noexcept } catch (std::exception &e) { - HMI_ERROR("wm", "Uncaught exception in binding_init(): %s", e.what()); + HMI_ERROR("Uncaught exception in binding_init(): %s", e.what()); } return -1; } @@ -183,19 +177,13 @@ static void cbRemoveClientCtxt(void *data) { return; } - HMI_DEBUG("wm", "remove app %s", ctxt->name.c_str()); + HMI_DEBUG("remove app %s", ctxt->name.c_str()); // Policy Manager does not know this app was killed, // so notify it by deactivate request. g_afb_instance->wmgr.api_deactivate_surface( ctxt->name.c_str(), ctxt->role.c_str(), - [](const char *errmsg) { - if (errmsg != nullptr) - { - HMI_ERROR("wm", errmsg); - return; - } - }); + [](const char *) {}); g_afb_instance->wmgr.removeClient(ctxt->name); delete ctxt; @@ -209,7 +197,7 @@ static void createSecurityContext(afb_req req, const char* appid, const char* ro // Create Security Context at first time const char *new_role = g_afb_instance->wmgr.convertRoleOldToNew(role); WMClientCtxt *ctxt = new WMClientCtxt(appid, new_role); - HMI_DEBUG("wm", "create session for %s", ctxt->name.c_str()); + HMI_DEBUG("create session for %s", ctxt->name.c_str()); afb_req_session_set_LOA(req, 1); afb_req_context_set(req, ctxt, cbRemoveClientCtxt); } @@ -218,9 +206,6 @@ static void createSecurityContext(afb_req req, const char* appid, const char* ro void windowmanager_requestsurface(afb_req req) noexcept { std::lock_guard<std::mutex> guard(binding_m); -#ifdef ST - ST(); -#endif if (g_afb_instance == nullptr) { afb_req_fail(req, "failed", "Binding not initialized, did the compositor die?"); @@ -236,18 +221,26 @@ void windowmanager_requestsurface(afb_req req) noexcept return; } - const char *appid = afb_req_get_application_id(req); - auto ret = g_afb_instance->wmgr.api_request_surface( - appid, a_drawing_name); - if (ret.is_err()) + char *appid = afb_req_get_application_id(req); + if(appid) { - afb_req_fail(req, "failed", ret.unwrap_err()); - return; + auto ret = g_afb_instance->wmgr.api_request_surface( + appid, a_drawing_name); + if (ret.is_err()) + { + afb_req_fail(req, "failed", ret.unwrap_err()); + } + else + { + createSecurityContext(req, appid, a_drawing_name); + afb_req_success(req, json_object_new_int(ret.unwrap()), "success"); + } + free(appid); + } + else + { + afb_req_fail(req, "failed", nullptr); } - - createSecurityContext(req, appid, a_drawing_name); - - afb_req_success(req, json_object_new_int(ret.unwrap()), "success"); } catch (std::exception &e) { @@ -259,9 +252,6 @@ void windowmanager_requestsurface(afb_req req) noexcept void windowmanager_requestsurfacexdg(afb_req req) noexcept { std::lock_guard<std::mutex> guard(binding_m); -#ifdef ST - ST(); -#endif if (g_afb_instance == nullptr) { afb_req_fail(req, "failed", "Binding not initialized, did the compositor die?"); @@ -287,19 +277,23 @@ void windowmanager_requestsurfacexdg(afb_req req) noexcept return; } char const *a_ivi_id = json_object_get_string(j_ivi_id); - char const *appid = afb_req_get_application_id(req); - auto ret = g_afb_instance->wmgr.api_request_surface( - appid, a_drawing_name, a_ivi_id); - - if (ret != nullptr) + char *appid = afb_req_get_application_id(req); + if(appid) { - afb_req_fail(req, "failed", ret); - return; - } + auto ret = g_afb_instance->wmgr.api_request_surface( + appid, a_drawing_name, a_ivi_id); - createSecurityContext(req, appid, a_drawing_name); - - afb_req_success(req, NULL, "success"); + if (ret != nullptr) + { + afb_req_fail(req, "failed", ret); + } + else + { + createSecurityContext(req, appid, a_drawing_name); + afb_req_success(req, NULL, "success"); + } + free(appid); + } } catch (std::exception &e) { @@ -311,9 +305,6 @@ void windowmanager_requestsurfacexdg(afb_req req) noexcept void windowmanager_activatewindow(afb_req req) noexcept { std::lock_guard<std::mutex> guard(binding_m); -#ifdef ST - ST(); -#endif if (g_afb_instance == nullptr) { afb_req_fail(req, "failed", "Binding not initialized, did the compositor die?"); @@ -336,22 +327,26 @@ void windowmanager_activatewindow(afb_req req) noexcept return; } - g_afb_instance->wmgr.api_activate_surface( - afb_req_get_application_id(req), - a_drawing_name, a_drawing_area, - [&req](const char *errmsg) { - if (errmsg != nullptr) - { - HMI_ERROR("wm", errmsg); - afb_req_fail(req, "failed", errmsg); - return; - } - afb_req_success(req, NULL, "success"); - }); + char* appid = afb_req_get_application_id(req); + if(appid) + { + g_afb_instance->wmgr.api_activate_surface( + appid, a_drawing_name, a_drawing_area, + [&req](const char *errmsg) { + if (errmsg != nullptr) + { + HMI_ERROR(errmsg); + afb_req_fail(req, "failed", errmsg); + return; + } + afb_req_success(req, NULL, "success"); + }); + free(appid); + } } catch (std::exception &e) { - HMI_WARNING("wm", "failed: Uncaught exception while calling activatesurface: %s", e.what()); + HMI_WARNING("failed: Uncaught exception while calling activatesurface: %s", e.what()); g_afb_instance->wmgr.exceptionProcessForTransition(); return; } @@ -360,9 +355,6 @@ void windowmanager_activatewindow(afb_req req) noexcept void windowmanager_deactivatewindow(afb_req req) noexcept { std::lock_guard<std::mutex> guard(binding_m); -#ifdef ST - ST(); -#endif if (g_afb_instance == nullptr) { afb_req_fail(req, "failed", "Binding not initialized, did the compositor die?"); @@ -378,21 +370,26 @@ void windowmanager_deactivatewindow(afb_req req) noexcept return; } - g_afb_instance->wmgr.api_deactivate_surface( - afb_req_get_application_id(req), a_drawing_name, - [&req](const char *errmsg) { - if (errmsg != nullptr) - { - HMI_ERROR("wm", errmsg); - afb_req_fail(req, "failed", errmsg); - return; - } - afb_req_success(req, NULL, "success"); - }); + char* appid = afb_req_get_application_id(req); + if(appid) + { + g_afb_instance->wmgr.api_deactivate_surface( + appid, a_drawing_name, + [&req](const char *errmsg) { + if (errmsg != nullptr) + { + HMI_ERROR(errmsg); + afb_req_fail(req, "failed", errmsg); + return; + } + afb_req_success(req, NULL, "success"); + }); + free(appid); + } } catch (std::exception &e) { - HMI_WARNING("wm", "failed: Uncaught exception while calling deactivatesurface: %s", e.what()); + HMI_WARNING("failed: Uncaught exception while calling deactivatesurface: %s", e.what()); g_afb_instance->wmgr.exceptionProcessForTransition(); return; } @@ -401,9 +398,6 @@ void windowmanager_deactivatewindow(afb_req req) noexcept void windowmanager_enddraw(afb_req req) noexcept { std::lock_guard<std::mutex> guard(binding_m); -#ifdef ST - ST(); -#endif if (g_afb_instance == nullptr) { afb_req_fail(req, "failed", "Binding not initialized, did the compositor die?"); @@ -420,12 +414,16 @@ void windowmanager_enddraw(afb_req req) noexcept } afb_req_success(req, NULL, "success"); - g_afb_instance->wmgr.api_enddraw( - afb_req_get_application_id(req), a_drawing_name); + char* appid = afb_req_get_application_id(req); + if(appid) + { + g_afb_instance->wmgr.api_enddraw(appid, a_drawing_name); + free(appid); + } } catch (std::exception &e) { - HMI_WARNING("wm", "failed: Uncaught exception while calling enddraw: %s", e.what()); + HMI_WARNING("failed: Uncaught exception while calling enddraw: %s", e.what()); g_afb_instance->wmgr.exceptionProcessForTransition(); return; } @@ -434,9 +432,6 @@ void windowmanager_enddraw(afb_req req) noexcept void windowmanager_getdisplayinfo_thunk(afb_req req) noexcept { std::lock_guard<std::mutex> guard(binding_m); -#ifdef ST - ST(); -#endif if (g_afb_instance == nullptr) { afb_req_fail(req, "failed", "Binding not initialized, did the compositor die?"); @@ -464,9 +459,6 @@ void windowmanager_getdisplayinfo_thunk(afb_req req) noexcept void windowmanager_getareainfo_thunk(afb_req req) noexcept { std::lock_guard<std::mutex> guard(binding_m); -#ifdef ST - ST(); -#endif if (g_afb_instance == nullptr) { afb_req_fail(req, "failed", "Binding not initialized, did the compositor die?"); @@ -504,9 +496,6 @@ void windowmanager_getareainfo_thunk(afb_req req) noexcept void windowmanager_wm_subscribe(afb_req req) noexcept { std::lock_guard<std::mutex> guard(binding_m); -#ifdef ST - ST(); -#endif if (g_afb_instance == nullptr) { afb_req_fail(req, "failed", "Binding not initialized, did the compositor die?"); @@ -543,9 +532,6 @@ void windowmanager_wm_subscribe(afb_req req) noexcept void windowmanager_list_drawing_names(afb_req req) noexcept { std::lock_guard<std::mutex> guard(binding_m); -#ifdef ST - ST(); -#endif if (g_afb_instance == nullptr) { afb_req_fail(req, "failed", "Binding not initialized, did the compositor die?"); @@ -575,9 +561,6 @@ void windowmanager_list_drawing_names(afb_req req) noexcept void windowmanager_ping(afb_req req) noexcept { std::lock_guard<std::mutex> guard(binding_m); -#ifdef ST - ST(); -#endif if (g_afb_instance == nullptr) { afb_req_fail(req, "failed", "Binding not initialized, did the compositor die?"); @@ -601,9 +584,6 @@ void windowmanager_ping(afb_req req) noexcept void windowmanager_debug_status(afb_req req) noexcept { std::lock_guard<std::mutex> guard(binding_m); -#ifdef ST - ST(); -#endif if (g_afb_instance == nullptr) { afb_req_fail(req, "failed", "Binding not initialized, did the compositor die?"); @@ -630,9 +610,6 @@ void windowmanager_debug_status(afb_req req) noexcept void windowmanager_debug_layers(afb_req req) noexcept { std::lock_guard<std::mutex> guard(binding_m); -#ifdef ST - ST(); -#endif if (g_afb_instance == nullptr) { afb_req_fail(req, "failed", "Binding not initialized, did the compositor die?"); @@ -655,9 +632,6 @@ void windowmanager_debug_layers(afb_req req) noexcept void windowmanager_debug_surfaces(afb_req req) noexcept { std::lock_guard<std::mutex> guard(binding_m); -#ifdef ST - ST(); -#endif if (g_afb_instance == nullptr) { afb_req_fail(req, "failed", "Binding not initialized, did the compositor die?"); @@ -686,9 +660,6 @@ void windowmanager_debug_surfaces(afb_req req) noexcept void windowmanager_debug_terminate(afb_req req) noexcept { std::lock_guard<std::mutex> guard(binding_m); -#ifdef ST - ST(); -#endif if (g_afb_instance == nullptr) { afb_req_fail(req, "failed", "Binding not initialized, did the compositor die?"); @@ -714,13 +685,13 @@ void windowmanager_debug_terminate(afb_req req) noexcept } const struct afb_verb_v2 windowmanager_verbs[] = { - {"requestsurface", windowmanager_requestsurface, nullptr, nullptr, AFB_SESSION_NONE}, - {"requestsurfacexdg", windowmanager_requestsurfacexdg, nullptr, nullptr, AFB_SESSION_NONE}, - {"activatewindow", windowmanager_activatewindow, nullptr, nullptr, AFB_SESSION_NONE}, - {"deactivatewindow", windowmanager_deactivatewindow, nullptr, nullptr, AFB_SESSION_NONE}, - {"enddraw", windowmanager_enddraw, nullptr, nullptr, AFB_SESSION_NONE}, - {"getdisplayinfo", windowmanager_getdisplayinfo_thunk, nullptr, nullptr, AFB_SESSION_NONE}, - {"getareainfo", windowmanager_getareainfo_thunk, nullptr, nullptr, AFB_SESSION_NONE}, + {"requestSurface", windowmanager_requestsurface, nullptr, nullptr, AFB_SESSION_NONE}, + {"requestSurfaceXDG", windowmanager_requestsurfacexdg, nullptr, nullptr, AFB_SESSION_NONE}, + {"activateWindow", windowmanager_activatewindow, nullptr, nullptr, AFB_SESSION_NONE}, + {"deactivateWindow", windowmanager_deactivatewindow, nullptr, nullptr, AFB_SESSION_NONE}, + {"endDraw", windowmanager_enddraw, nullptr, nullptr, AFB_SESSION_NONE}, + {"getDisplayInfo", windowmanager_getdisplayinfo_thunk, nullptr, nullptr, AFB_SESSION_NONE}, + {"getAreaInfo", windowmanager_getareainfo_thunk, nullptr, nullptr, AFB_SESSION_NONE}, {"wm_subscribe", windowmanager_wm_subscribe, nullptr, nullptr, AFB_SESSION_NONE}, {"list_drawing_names", windowmanager_list_drawing_names, nullptr, nullptr, AFB_SESSION_NONE}, {"ping", windowmanager_ping, nullptr, nullptr, AFB_SESSION_NONE}, diff --git a/src/pm_wrapper.cpp b/src/pm_wrapper.cpp index 1454bf9..8706128 100644 --- a/src/pm_wrapper.cpp +++ b/src/pm_wrapper.cpp @@ -16,7 +16,7 @@ #include "pm_wrapper.hpp" #include "json_helper.hpp" -#include "hmi-debug.h" +#include "util.hpp" namespace wm { @@ -33,7 +33,7 @@ static void onStateTransitioned(json_object *json_out) static void onError(json_object *json_out) { - HMI_DEBUG("wm", "error message from PolicyManager:%s", + HMI_DEBUG("error message from PolicyManager:%s", json_object_get_string(json_out)); g_context->processError(); @@ -50,7 +50,7 @@ int PMWrapper::initialize() ret = this->pm.initialize(); if (0 > ret) { - HMI_ERROR("wm:pmw", "Faild to initialize PolicyManager"); + HMI_ERROR("Faild to initialize PolicyManager"); } g_context = this; @@ -95,7 +95,7 @@ int PMWrapper::setInputEventData(Task task, std::string role, std::string area) ret = this->pm.setInputEventData(json_in); if (0 > ret) { - HMI_ERROR("wm:pmw", "Faild to set input event data to PolicyManager"); + HMI_ERROR("Faild to set input event data to PolicyManager"); } json_object_put(json_in); @@ -108,7 +108,7 @@ int PMWrapper::executeStateTransition() ret = this->pm.executeStateTransition(); if (0 > ret) { - HMI_ERROR("wm:pmw", "Failed to execute state transition for PolicyManager"); + HMI_ERROR("Failed to execute state transition for PolicyManager"); } return ret; @@ -125,7 +125,7 @@ void PMWrapper::updateStates(json_object *json_out) { std::vector<WMAction> actions; - HMI_DEBUG("wm", "json_out dump:%s", json_object_get_string(json_out)); + HMI_DEBUG("json_out dump:%s", json_object_get_string(json_out)); this->createLayoutChangeAction(json_out, actions); @@ -138,12 +138,12 @@ void PMWrapper::createLayoutChangeAction(json_object *json_out, std::vector<WMAc json_object *json_layers; if (!json_object_object_get_ex(json_out, "layers", &json_layers)) { - HMI_DEBUG("wm", "Not found key \"layers\""); + HMI_DEBUG("Not found key \"layers\""); return; } int len = json_object_array_length(json_layers); - HMI_DEBUG("wm", "json_layers len:%d", len); + HMI_DEBUG("json_layers len:%d", len); for (int i = 0; i < len; i++) { @@ -151,19 +151,19 @@ void PMWrapper::createLayoutChangeAction(json_object *json_out, std::vector<WMAc std::string layer_name = jh::getStringFromJson(json_tmp, "name"); json_bool changed = jh::getBoolFromJson(json_tmp, "changed"); - HMI_DEBUG("wm", "layer:%s changed:%d", layer_name.c_str(), changed); + HMI_DEBUG("layer:%s changed:%d", layer_name.c_str(), changed); if (changed) { json_object *json_areas; if (!json_object_object_get_ex(json_tmp, "areas", &json_areas)) { - HMI_DEBUG("wm", "Not found key \"areas\""); + HMI_DEBUG("Not found key \"areas\""); return; } int len = json_object_array_length(json_areas); - HMI_DEBUG("wm", "json_layers len:%d", len); + HMI_DEBUG("json_layers len:%d", len); // Store previous role state in this layer this->prvlayer2rolestate[layer_name] = this->crrlayer2rolestate[layer_name]; @@ -180,19 +180,20 @@ void PMWrapper::createLayoutChangeAction(json_object *json_out, std::vector<WMAc crr_roles[role_name] = area_name; auto i_prv = prv_roles.find(role_name); - HMI_DEBUG("wm", "current role:%s area:%s", + HMI_DEBUG("current role:%s area:%s", role_name.c_str(), area_name.c_str()); // If current role does not exist in previous if (prv_roles.end() == i_prv) { - HMI_DEBUG("wm", "current role does not exist in previous"); + HMI_DEBUG("current role does not exist in previous"); // Set activate action bool end_draw_finished = false; WMAction act { - "", + 0, + nullptr, role_name, area_name, TaskVisible::VISIBLE, @@ -202,19 +203,20 @@ void PMWrapper::createLayoutChangeAction(json_object *json_out, std::vector<WMAc } else { - HMI_DEBUG("wm", "previous role:%s area:%s", + HMI_DEBUG("previous role:%s area:%s", i_prv->first.c_str(), i_prv->second.c_str()); // If current role exists in previous and area is different with previous if (area_name != i_prv->second) { - HMI_DEBUG("wm", "current role exists in previous and area is different with previous"); + HMI_DEBUG("current role exists in previous and area is different with previous"); // Set activate action bool end_draw_finished = false; WMAction act { - "", + 0, + nullptr, role_name, area_name, TaskVisible::VISIBLE, @@ -232,13 +234,14 @@ void PMWrapper::createLayoutChangeAction(json_object *json_out, std::vector<WMAc // because these are not displayed in current layout for (auto i_prv : prv_roles) { - HMI_DEBUG("wm", "Deactivate role:%s", i_prv.first.c_str()); + HMI_DEBUG("Deactivate role:%s", i_prv.first.c_str()); // Set deactivate action bool end_draw_finished = true; WMAction act { - "", + 0, + nullptr, i_prv.first, "", TaskVisible::INVISIBLE, diff --git a/src/request.hpp b/src/request.hpp index 6b2bda1..073dd27 100644 --- a/src/request.hpp +++ b/src/request.hpp @@ -19,10 +19,13 @@ #include <string> #include <vector> +#include <memory> namespace wm { +class WMClient; + enum Task { TASK_ALLOCATE, @@ -47,7 +50,8 @@ struct WMTrigger struct WMAction { - std::string appid; + unsigned req_num; + std::shared_ptr<WMClient> client; std::string role; std::string area; TaskVisible visible; diff --git a/src/util.cpp b/src/util.cpp index 672b089..37977f2 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -16,30 +16,14 @@ #include "util.hpp" -#include <cerrno> -#include <cstdarg> -#include <cstdio> -#include <cstdlib> -#include <ctime> +#include <time.h> +#include <stdio.h> +#include <stdarg.h> +#include <stdlib.h> #include <unistd.h> -#ifdef SCOPE_TRACING -thread_local int ScopeTrace::indent = 0; -ScopeTrace::ScopeTrace(char const *func) : f(func) -{ - fprintf(stderr, "%lu %*s%s -->\n", pthread_self(), 2 * indent++, "", this->f); -} -ScopeTrace::~ScopeTrace() { fprintf(stderr, "%lu %*s%s <--\n", pthread_self(), 2 * --indent, "", this->f); } -#endif - -unique_fd::~unique_fd() -{ - if (this->fd != -1) - { - close(this->fd); - } -} +static char ERROR_FLAG[6][20] = {"NONE", "ERROR", "WARNING", "NOTICE", "INFO", "DEBUG"}; void rectangle::fit(unsigned long to_width, unsigned long to_height) { @@ -93,3 +77,66 @@ void rectangle::set_aspect(double ratio) } } +void _HMI_LOG(enum LOG_LEVEL level, const char* file, const char* func, const int line, const char* prefix, const char* log, ...) +{ + const int log_level = (getenv("USE_HMI_DEBUG") == NULL)?LOG_LEVEL_ERROR:atoi(getenv("USE_HMI_DEBUG")); + if(log_level < level) + { + return; + } + + char *message; + struct timespec tp; + unsigned int time; + + clock_gettime(CLOCK_REALTIME, &tp); + time = (tp.tv_sec * 1000000L) + (tp.tv_nsec / 1000); + + va_list args; + va_start(args, log); + if (log == NULL || vasprintf(&message, log, args) < 0) + message = NULL; + fprintf(stderr, "[%10.3f] [%s %s] [%s, %s(), Line:%d] >>> %s \n", time / 1000.0, prefix, ERROR_FLAG[level], file, func, line, message); + va_end(args); + free(message); +} + +void _HMI_SEQ_LOG(enum LOG_LEVEL level, const char* file, const char* func, const int line, unsigned seq_num, const char* log, ...){ + const int log_level = (getenv("USE_HMI_DEBUG") == NULL) ? LOG_LEVEL_ERROR:atoi(getenv("USE_HMI_DEBUG")); + if(log_level < level) + { + return; + } + + char *message; + struct timespec tp; + unsigned int time; + + clock_gettime(CLOCK_REALTIME, &tp); + time = (tp.tv_sec * 1000000L) + (tp.tv_nsec / 1000); + + va_list args; + va_start(args, log); + if (log == NULL || vasprintf(&message, log, args) < 0) + message = NULL; + fprintf(stderr, "[%10.3f] [wm %s] [%s, %s(), Line:%d] >>> req %d: %s \n", time / 1000.0, ERROR_FLAG[level], file, func, line, seq_num, message); + va_end(args); + free(message); +} + +void _DUMP(enum LOG_LEVEL level, const char *log, ...) +{ + const int log_level = (getenv("USE_HMI_DEBUG") == NULL) ? LOG_LEVEL_ERROR : atoi(getenv("USE_HMI_DEBUG")); + if (log_level < level) + { + return; + } + char *message; + va_list args; + va_start(args, log); + if (log == NULL || vasprintf(&message, log, args) < 0) + message = NULL; + fprintf(stderr, "%s \n", message); + va_end(args); + free(message); +}
\ No newline at end of file diff --git a/src/util.hpp b/src/util.hpp index 2f17845..812a130 100644 --- a/src/util.hpp +++ b/src/util.hpp @@ -19,75 +19,38 @@ #include <functional> #include <thread> -#include <vector> - #include <sys/poll.h> - -#ifndef DO_NOT_USE_AFB -extern "C" -{ -#include <afb/afb-binding.h> +#include <string.h> + +#define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__) + +#define HMI_ERROR(args,...) _HMI_LOG(LOG_LEVEL_ERROR, __FILENAME__, __FUNCTION__, __LINE__,"wm",args, ##__VA_ARGS__) +#define HMI_WARNING(args,...) _HMI_LOG(LOG_LEVEL_WARNING, __FILENAME__, __FUNCTION__,__LINE__, "wm", args,##__VA_ARGS__) +#define HMI_NOTICE(args,...) _HMI_LOG(LOG_LEVEL_NOTICE, __FILENAME__, __FUNCTION__,__LINE__, "wm", args,##__VA_ARGS__) +#define HMI_INFO(args,...) _HMI_LOG(LOG_LEVEL_INFO, __FILENAME__, __FUNCTION__,__LINE__, "wm", args,##__VA_ARGS__) +#define HMI_DEBUG(args,...) _HMI_LOG(LOG_LEVEL_DEBUG, __FILENAME__, __FUNCTION__,__LINE__, "wm", args,##__VA_ARGS__) + +#define HMI_SEQ_ERROR(seq_num, args,...) _HMI_SEQ_LOG(LOG_LEVEL_ERROR, __FILENAME__, __FUNCTION__, __LINE__, seq_num, args, ##__VA_ARGS__) +#define HMI_SEQ_WARNING(seq_num, args,...) _HMI_SEQ_LOG(LOG_LEVEL_WARNING, __FILENAME__, __FUNCTION__, __LINE__, seq_num, args, ##__VA_ARGS__) +#define HMI_SEQ_NOTICE(seq_num, args,...) _HMI_SEQ_LOG(LOG_LEVEL_NOTICE, __FILENAME__, __FUNCTION__, __LINE__, seq_num, args, ##__VA_ARGS__) +#define HMI_SEQ_INFO(seq_num, args,...) _HMI_SEQ_LOG(LOG_LEVEL_INFO, __FILENAME__, __FUNCTION__, __LINE__, seq_num, args, ##__VA_ARGS__) +#define HMI_SEQ_DEBUG(seq_num, args,...) _HMI_SEQ_LOG(LOG_LEVEL_DEBUG, __FILENAME__, __FUNCTION__, __LINE__, seq_num, args, ##__VA_ARGS__) + +#define DUMP(args, ...) _DUMP(LOG_LEVEL_DEBUG, args, ##__VA_ARGS__) + +enum LOG_LEVEL{ + LOG_LEVEL_NONE = 0, + LOG_LEVEL_ERROR, + LOG_LEVEL_WARNING, + LOG_LEVEL_NOTICE, + LOG_LEVEL_INFO, + LOG_LEVEL_DEBUG, + LOG_LEVEL_MAX = LOG_LEVEL_DEBUG }; -#endif - -#define CONCAT_(X, Y) X##Y -#define CONCAT(X, Y) CONCAT_(X, Y) - -#ifdef __GNUC__ -#define ATTR_FORMAT(stringindex, firsttocheck) \ - __attribute__((format(printf, stringindex, firsttocheck))) -#define ATTR_NORETURN __attribute__((noreturn)) -#else -#define ATTR_FORMAT(stringindex, firsttocheck) -#define ATTR_NORETURN -#endif - -#ifdef AFB_BINDING_VERSION -#define lognotice(...) AFB_NOTICE(__VA_ARGS__) -#define logerror(...) AFB_ERROR(__VA_ARGS__) -#define fatal(...) \ - do \ - { \ - AFB_ERROR(__VA_ARGS__); \ - abort(); \ - } while (0) -#else -#define lognotice(...) -#define logerror(...) -#define fatal(...) \ - do \ - { \ - abort(); \ - } while (0) -#endif - -#ifdef DEBUG_OUTPUT -#ifdef AFB_BINDING_VERSION -#define logdebug(...) AFB_DEBUG(__VA_ARGS__) -#else -#define logdebug(...) -#endif -#else -#define logdebug(...) -#endif - -#ifndef SCOPE_TRACING -#define ST() -#define STN(N) -#else -#define ST() \ - ScopeTrace __attribute__((unused)) CONCAT(trace_scope_, __LINE__)(__func__) -#define STN(N) \ - ScopeTrace __attribute__((unused)) CONCAT(named_trace_scope_, __LINE__)(#N) - -struct ScopeTrace -{ - thread_local static int indent; - char const *f{}; - explicit ScopeTrace(char const *func); - ~ScopeTrace(); -}; -#endif + +void _HMI_LOG(enum LOG_LEVEL level, const char* file, const char* func, const int line, const char* prefix, const char* log, ...); +void _HMI_SEQ_LOG(enum LOG_LEVEL level, const char* file, const char* func, const int line, unsigned seq_num, const char* log, ...); +void _DUMP(enum LOG_LEVEL level, const char *log, ...); /** * @struct unique_fd diff --git a/src/wayland_ivi_wm.cpp b/src/wayland_ivi_wm.cpp index 8b04c64..bbf745b 100644 --- a/src/wayland_ivi_wm.cpp +++ b/src/wayland_ivi_wm.cpp @@ -15,7 +15,6 @@ */ #include "wayland_ivi_wm.hpp" -#include "hmi-debug.h" /** * namespace wl @@ -41,10 +40,8 @@ int display::dispatch_pending() { return wl_display_dispatch_pending(this->d.get int display::read_events() { - ST(); while (wl_display_prepare_read(this->d.get()) == -1) { - STN(pending_events_dispatch); if (wl_display_dispatch_pending(this->d.get()) == -1) { return -1; @@ -112,7 +109,7 @@ void registry::global_created(uint32_t name, char const *iface, uint32_t v) { b->second(this->proxy.get(), name, v); } - HMI_DEBUG("wm", "wl::registry @ %p global n %u i %s v %u", this->proxy.get(), name, + HMI_DEBUG("wl::registry @ %p global n %u i %s v %u", this->proxy.get(), name, iface, v); } @@ -163,8 +160,7 @@ void output::geometry(int32_t x, int32_t y, int32_t pw, int32_t ph, int32_t subpel, char const *make, char const *model, int32_t tx) { - HMI_DEBUG("wm", - "wl::output %s @ %p x %i y %i w %i h %i spel %x make %s model %s tx %i", + HMI_DEBUG("wl::output %s @ %p x %i y %i w %i h %i spel %x make %s model %s tx %i", __func__, this->proxy.get(), x, y, pw, ph, subpel, make, model, tx); this->physical_width = pw; this->physical_height = ph; @@ -173,7 +169,7 @@ void output::geometry(int32_t x, int32_t y, int32_t pw, int32_t ph, void output::mode(uint32_t flags, int32_t w, int32_t h, int32_t r) { - HMI_DEBUG("wm", "wl::output %s @ %p f %x w %i h %i r %i", __func__, + HMI_DEBUG("wl::output %s @ %p f %x w %i h %i r %i", __func__, this->proxy.get(), flags, w, h, r); if ((flags & WL_OUTPUT_MODE_CURRENT) != 0u) { @@ -185,7 +181,7 @@ void output::mode(uint32_t flags, int32_t w, int32_t h, int32_t r) void output::done() { - HMI_DEBUG("wm", "wl::output %s @ %p done", __func__, this->proxy.get()); + HMI_DEBUG("wl::output %s @ %p done", __func__, this->proxy.get()); // Pivot and flipped if (this->transform == WL_OUTPUT_TRANSFORM_90 || this->transform == WL_OUTPUT_TRANSFORM_270 || @@ -199,7 +195,7 @@ void output::done() void output::scale(int32_t factor) { - HMI_DEBUG("wm", "wl::output %s @ %p f %i", __func__, this->proxy.get(), factor); + HMI_DEBUG("wl::output %s @ %p f %i", __func__, this->proxy.get(), factor); } } // namespace wl @@ -363,14 +359,14 @@ void layer_added(void *data, struct ivi_wm_screen *ivi_wm_screen, uint32_t layer_id) { - HMI_DEBUG("wm", "added layer_id:%d", layer_id); + HMI_DEBUG("added layer_id:%d", layer_id); } void connector_name(void *data, struct ivi_wm_screen *ivi_wm_screen, const char *process_name) { - HMI_DEBUG("wm", "process_name:%s", process_name); + HMI_DEBUG("process_name:%s", process_name); } void screen_error(void *data, @@ -378,7 +374,7 @@ void screen_error(void *data, uint32_t error, const char *message) { - HMI_DEBUG("wm", "screen error:%d message:%s", error, message); + HMI_DEBUG("screen error:%d message:%s", error, message); } constexpr struct ivi_wm_screen_listener screen_listener = { @@ -400,7 +396,7 @@ surface::surface(uint32_t i, struct controller *c) void surface::set_visibility(uint32_t visibility) { - HMI_DEBUG("wm", "compositor::surface id:%d v:%d", this->id, visibility); + HMI_DEBUG("compositor::surface id:%d v:%d", this->id, visibility); ivi_wm_set_surface_visibility(this->parent->proxy.get(), this->id, visibility); } @@ -459,7 +455,7 @@ screen::screen(uint32_t i, struct controller *c, struct wl_output *o) : wayland_proxy(ivi_wm_create_screen(c->proxy.get(), o)), controller_child(c, i) { - HMI_DEBUG("wm", "compositor::screen @ %p id %u o %p", this->proxy.get(), i, o); + HMI_DEBUG("compositor::screen @ %p id %u o %p", this->proxy.get(), i, o); // Add listener for screen ivi_wm_screen_add_listener(this->proxy.get(), &screen_listener, this); @@ -469,7 +465,7 @@ void screen::clear() { ivi_wm_screen_clear(this->proxy.get()); } void screen::screen_created(struct screen *screen, uint32_t id) { - HMI_DEBUG("wm", "compositor::screen @ %p screen %u (%x) @ %p", this->proxy.get(), + HMI_DEBUG("compositor::screen @ %p screen %u (%x) @ %p", this->proxy.get(), id, id, screen); this->id = id; this->parent->screens[id] = screen; @@ -484,7 +480,7 @@ void screen::set_render_order(std::vector<uint32_t> const &ro) for (i = 0; i < ro.size(); i++) { - HMI_DEBUG("wm", "compositor::screen @ %p add layer %u", this->proxy.get(), ro[i]); + HMI_DEBUG("compositor::screen @ %p add layer %u", this->proxy.get(), ro[i]); // Add the layer to screen render order at nearest z-position ivi_wm_screen_add_layer(this->proxy.get(), ro[i]); } @@ -538,10 +534,10 @@ void controller::get_surface_properties(uint32_t surface_id, int param) void controller::layer_created(uint32_t id) { - HMI_DEBUG("wm", "compositor::controller @ %p layer %u (%x)", this->proxy.get(), id, id); + HMI_DEBUG("compositor::controller @ %p layer %u (%x)", this->proxy.get(), id, id); if (this->layers.find(id) != this->layers.end()) { - HMI_DEBUG("wm", "WindowManager has created layer %u (%x) already", id, id); + HMI_DEBUG("WindowManager has created layer %u (%x) already", id, id); } else { @@ -552,13 +548,13 @@ void controller::layer_created(uint32_t id) void controller::layer_error_detected(uint32_t object_id, uint32_t error_code, const char *error_text) { - HMI_DEBUG("wm", "compositor::controller @ %p error o %d c %d text %s", + HMI_DEBUG("compositor::controller @ %p error o %d c %d text %s", this->proxy.get(), object_id, error_code, error_text); } void controller::surface_visibility_changed(uint32_t id, int32_t visibility) { - HMI_DEBUG("wm", "compositor::surface %s @ %d v %i", __func__, id, + HMI_DEBUG("compositor::surface %s @ %d v %i", __func__, id, visibility); this->sprops[id].visibility = visibility; this->chooks->surface_visibility(id, visibility); @@ -566,7 +562,7 @@ void controller::surface_visibility_changed(uint32_t id, int32_t visibility) void controller::surface_opacity_changed(uint32_t id, float opacity) { - HMI_DEBUG("wm", "compositor::surface %s @ %d o %f", + HMI_DEBUG("compositor::surface %s @ %d o %f", __func__, id, opacity); this->sprops[id].opacity = opacity; } @@ -575,7 +571,7 @@ void controller::surface_source_rectangle_changed(uint32_t id, int32_t x, int32_t y, int32_t width, int32_t height) { - HMI_DEBUG("wm", "compositor::surface %s @ %d x %i y %i w %i h %i", __func__, + HMI_DEBUG("compositor::surface %s @ %d x %i y %i w %i h %i", __func__, id, x, y, width, height); this->sprops[id].src_rect = rect{width, height, x, y}; } @@ -584,7 +580,7 @@ void controller::surface_destination_rectangle_changed(uint32_t id, int32_t x, int32_t y, int32_t width, int32_t height) { - HMI_DEBUG("wm", "compositor::surface %s @ %d x %i y %i w %i h %i", __func__, + HMI_DEBUG("compositor::surface %s @ %d x %i y %i w %i h %i", __func__, id, x, y, width, height); this->sprops[id].dst_rect = rect{width, height, x, y}; this->chooks->surface_destination_rectangle(id, x, y, width, height); @@ -593,7 +589,7 @@ void controller::surface_destination_rectangle_changed(uint32_t id, int32_t x, void controller::surface_size_changed(uint32_t id, int32_t width, int32_t height) { - HMI_DEBUG("wm", "compositor::surface %s @ %d w %i h %i", __func__, id, + HMI_DEBUG("compositor::surface %s @ %d w %i h %i", __func__, id, width, height); this->sprops[id].size = size{uint32_t(width), uint32_t(height)}; this->surfaces[id]->set_source_rectangle(0, 0, width, height); @@ -601,20 +597,20 @@ void controller::surface_size_changed(uint32_t id, int32_t width, void controller::surface_added_to_layer(uint32_t layer_id, uint32_t surface_id) { - HMI_DEBUG("wm", "compositor::surface %s @ %d l %u", + HMI_DEBUG("compositor::surface %s @ %d l %u", __func__, layer_id, surface_id); } void controller::surface_stats_received(uint32_t surface_id, uint32_t frame_count, uint32_t pid) { - HMI_DEBUG("wm", "compositor::surface %s @ %d f %u pid %u", + HMI_DEBUG("compositor::surface %s @ %d f %u pid %u", __func__, surface_id, frame_count, pid); } void controller::surface_created(uint32_t id) { - HMI_DEBUG("wm", "compositor::controller @ %p surface %u (%x)", this->proxy.get(), id, + HMI_DEBUG("compositor::controller @ %p surface %u (%x)", this->proxy.get(), id, id); if (this->surfaces.find(id) == this->surfaces.end()) { @@ -632,7 +628,7 @@ void controller::surface_created(uint32_t id) void controller::surface_destroyed(uint32_t surface_id) { - HMI_DEBUG("wm", "compositor::surface %s @ %d", __func__, surface_id); + HMI_DEBUG("compositor::surface %s @ %d", __func__, surface_id); this->chooks->surface_removed(surface_id); this->sprops.erase(surface_id); this->surfaces.erase(surface_id); @@ -641,19 +637,19 @@ void controller::surface_destroyed(uint32_t surface_id) void controller::surface_error_detected(uint32_t object_id, uint32_t error_code, const char *error_text) { - HMI_DEBUG("wm", "compositor::controller @ %p error o %d c %d text %s", + HMI_DEBUG("compositor::controller @ %p error o %d c %d text %s", this->proxy.get(), object_id, error_code, error_text); } void controller::layer_visibility_changed(uint32_t layer_id, int32_t visibility) { - HMI_DEBUG("wm", "compositor::layer %s @ %d v %i", __func__, layer_id, visibility); + HMI_DEBUG("compositor::layer %s @ %d v %i", __func__, layer_id, visibility); this->lprops[layer_id].visibility = visibility; } void controller::layer_opacity_changed(uint32_t layer_id, float opacity) { - HMI_DEBUG("wm", "compositor::layer %s @ %d o %f", __func__, layer_id, opacity); + HMI_DEBUG("compositor::layer %s @ %d o %f", __func__, layer_id, opacity); this->lprops[layer_id].opacity = opacity; } @@ -661,7 +657,7 @@ void controller::layer_source_rectangle_changed(uint32_t layer_id, int32_t x, int32_t y, int32_t width, int32_t height) { - HMI_DEBUG("wm", "compositor::layer %s @ %d x %i y %i w %i h %i", + HMI_DEBUG("compositor::layer %s @ %d x %i y %i w %i h %i", __func__, layer_id, x, y, width, height); this->lprops[layer_id].src_rect = rect{width, height, x, y}; } @@ -670,14 +666,14 @@ void controller::layer_destination_rectangle_changed(uint32_t layer_id, int32_t x, int32_t y, int32_t width, int32_t height) { - HMI_DEBUG("wm", "compositor::layer %s @ %d x %i y %i w %i h %i", + HMI_DEBUG("compositor::layer %s @ %d x %i y %i w %i h %i", __func__, layer_id, x, y, width, height); this->lprops[layer_id].dst_rect = rect{width, height, x, y}; } void controller::layer_destroyed(uint32_t layer_id) { - HMI_DEBUG("wm", "compositor::layer %s @ %d", __func__, layer_id); + HMI_DEBUG("compositor::layer %s @ %d", __func__, layer_id); this->lprops.erase(layer_id); this->layers.erase(layer_id); } @@ -685,40 +681,40 @@ void controller::layer_destroyed(uint32_t layer_id) void controller::add_proxy_to_sid_mapping(struct ivi_wm *p, uint32_t id) { - HMI_DEBUG("wm", "Add surface proxy mapping for %p (%u)", p, id); + HMI_DEBUG("Add surface proxy mapping for %p (%u)", p, id); this->surface_proxy_to_id[uintptr_t(p)] = id; this->sprops[id].id = id; } void controller::remove_proxy_to_sid_mapping(struct ivi_wm *p) { - HMI_DEBUG("wm", "Remove surface proxy mapping for %p", p); + HMI_DEBUG("Remove surface proxy mapping for %p", p); this->surface_proxy_to_id.erase(uintptr_t(p)); } void controller::add_proxy_to_lid_mapping(struct ivi_wm *p, uint32_t id) { - HMI_DEBUG("wm", "Add layer proxy mapping for %p (%u)", p, id); + HMI_DEBUG("Add layer proxy mapping for %p (%u)", p, id); this->layer_proxy_to_id[uintptr_t(p)] = id; this->lprops[id].id = id; } void controller::remove_proxy_to_lid_mapping(struct ivi_wm *p) { - HMI_DEBUG("wm", "Remove layer proxy mapping for %p", p); + HMI_DEBUG("Remove layer proxy mapping for %p", p); this->layer_proxy_to_id.erase(uintptr_t(p)); } void controller::add_proxy_to_id_mapping(struct wl_output *p, uint32_t id) { - HMI_DEBUG("wm", "Add screen proxy mapping for %p (%u)", p, id); + HMI_DEBUG("Add screen proxy mapping for %p (%u)", p, id); this->screen_proxy_to_id[uintptr_t(p)] = id; } void controller::remove_proxy_to_id_mapping(struct wl_output *p) { - HMI_DEBUG("wm", "Remove screen proxy mapping for %p", p); + HMI_DEBUG("Remove screen proxy mapping for %p", p); this->screen_proxy_to_id.erase(uintptr_t(p)); } diff --git a/src/window_manager.cpp b/src/window_manager.cpp index 42930dc..3e1a8bc 100644 --- a/src/window_manager.cpp +++ b/src/window_manager.cpp @@ -26,6 +26,9 @@ extern "C" #include <systemd/sd-event.h> } +using std::string; +using std::vector; + namespace wm { @@ -68,7 +71,7 @@ result<json> file_to_json(char const *filename) std::ifstream i(filename); if (i.fail()) { - HMI_DEBUG("wm", "Could not open config file, so use default layer information"); + HMI_DEBUG("Could not open config file, so use default layer information"); j = default_layers_json; } else @@ -81,7 +84,7 @@ result<json> file_to_json(char const *filename) struct result<layer_map> load_layer_map(char const *filename) { - HMI_DEBUG("wm", "loading IDs from %s", filename); + HMI_DEBUG("loading IDs from %s", filename); auto j = file_to_json(filename); if (j.is_err()) @@ -95,12 +98,12 @@ struct result<layer_map> load_layer_map(char const *filename) static int processTimerHandler(sd_event_source *s, uint64_t usec, void *userdata) { - HMI_NOTICE("wm", "Time out occurs because the client replys endDraw slow, so revert the request"); + HMI_NOTICE("Time out occurs because the client replys endDraw slow, so revert the request"); reinterpret_cast<wm::WindowManager *>(userdata)->timerHandler(); return 0; } -static void onStateTransitioned(std::vector<WMAction> actions) +static void onStateTransitioned(vector<WMAction> actions) { g_context->startTransitionWrapper(actions); } @@ -124,15 +127,15 @@ WindowManager::WindowManager(wl::display *d) pending_events(false) { char const *path_layers_json = getenv("AFM_APP_INSTALL_DIR"); - std::string path; + string path; if (!path_layers_json) { - HMI_ERROR("wm", "AFM_APP_INSTALL_DIR is not defined"); - path = std::string(path_layers_json); + HMI_ERROR("AFM_APP_INSTALL_DIR is not defined"); + path = string(path_layers_json); } else { - path = std::string(path_layers_json) + std::string("/etc/layers.json"); + path = string(path_layers_json) + string("/etc/layers.json"); } try @@ -145,13 +148,13 @@ WindowManager::WindowManager(wl::display *d) } else { - HMI_ERROR("wm", "%s", l.err().value()); + HMI_ERROR("%s", l.err().value()); } } } catch (std::exception &e) { - HMI_ERROR("wm", "Loading of configuration failed: %s", e.what()); + HMI_ERROR("Loading of configuration failed: %s", e.what()); } } @@ -164,7 +167,7 @@ int WindowManager::init() if (this->layers.mapping.empty()) { - HMI_ERROR("wm", "No surface -> layer mapping loaded"); + HMI_ERROR("No surface -> layer mapping loaded"); return -1; } @@ -245,14 +248,14 @@ result<int> WindowManager::api_request_surface(char const *appid, char const *dr // so convert role old to new const char *role = this->convertRoleOldToNew(drawing_name); - auto lid = this->layers.get_layer_id(std::string(role)); + auto lid = this->layers.get_layer_id(string(role)); if (!lid) { /** * register drawing_name as fallback and make it displayed. */ - lid = this->layers.get_layer_id(std::string("fallback")); - HMI_DEBUG("wm", "%s is not registered in layers.json, then fallback as normal app", role); + lid = this->layers.get_layer_id(string("fallback")); + HMI_DEBUG("%s is not registered in layers.json, then fallback as normal app", role); if (!lid) { return Err<int>("Drawing name does not match any role, fallback is disabled"); @@ -271,15 +274,15 @@ result<int> WindowManager::api_request_surface(char const *appid, char const *dr this->layers.main_surface_name == drawing_name) { this->layers.main_surface = id; - HMI_DEBUG("wm", "Set main_surface id to %u", id); + HMI_DEBUG("Set main_surface id to %u", id); } // add client into the db - std::string appid_str(appid); - g_app_list.addClient(appid_str, *lid, id, std::string(role)); + string appid_str(appid); + g_app_list.addClient(appid_str, *lid, id, string(role)); // Set role map of (new, old) - this->rolenew2old[role] = std::string(drawing_name); + this->rolenew2old[role] = string(drawing_name); return Ok<int>(id); } @@ -291,13 +294,11 @@ result<int> WindowManager::api_request_surface(char const *appid, char const *dr char const *WindowManager::api_request_surface(char const *appid, char const *drawing_name, char const *ivi_id) { - ST(); - // TODO: application requests by old role, // so convert role old to new const char *role = this->convertRoleOldToNew(drawing_name); - auto lid = this->layers.get_layer_id(std::string(role)); + auto lid = this->layers.get_layer_id(string(role)); unsigned sid = std::stol(ivi_id); if (!lid) @@ -305,8 +306,8 @@ char const *WindowManager::api_request_surface(char const *appid, char const *dr /** * register drawing_name as fallback and make it displayed. */ - lid = this->layers.get_layer_id(std::string("fallback")); - HMI_DEBUG("wm", "%s is not registered in layers.json, then fallback as normal app", role); + lid = this->layers.get_layer_id(string("fallback")); + HMI_DEBUG("%s is not registered in layers.json, then fallback as normal app", role); if (!lid) { return "Drawing name does not match any role, fallback is disabled"; @@ -325,17 +326,17 @@ char const *WindowManager::api_request_surface(char const *appid, char const *dr this->layers.add_surface(sid, *lid); // this surface is already created - HMI_DEBUG("wm", "surface_id is %u, layer_id is %u", sid, *lid); + HMI_DEBUG("surface_id is %u, layer_id is %u", sid, *lid); this->controller->layers[*lid]->add_surface(sid); this->layout_commit(); // add client into the db - std::string appid_str(appid); - g_app_list.addClient(appid_str, *lid, sid, std::string(role)); + string appid_str(appid); + g_app_list.addClient(appid_str, *lid, sid, string(role)); // Set role map of (new, old) - this->rolenew2old[role] = std::string(drawing_name); + this->rolenew2old[role] = string(drawing_name); return nullptr; } @@ -343,15 +344,13 @@ char const *WindowManager::api_request_surface(char const *appid, char const *dr void WindowManager::api_activate_surface(char const *appid, char const *drawing_name, char const *drawing_area, const reply_func &reply) { - ST(); - // TODO: application requests by old role, // so convert role old to new const char *c_role = this->convertRoleOldToNew(drawing_name); - std::string id = appid; - std::string role = c_role; - std::string area = drawing_area; + string id = appid; + string role = c_role; + string area = drawing_area; Task task = Task::TASK_ALLOCATE; unsigned req_num = 0; WMError ret = WMError::UNKNOWN; @@ -360,7 +359,7 @@ void WindowManager::api_activate_surface(char const *appid, char const *drawing_ if(ret != WMError::SUCCESS) { - HMI_ERROR("wm", errorDescription(ret)); + HMI_ERROR(errorDescription(ret)); reply("Failed to set request"); return; } @@ -390,8 +389,6 @@ void WindowManager::api_activate_surface(char const *appid, char const *drawing_ void WindowManager::api_deactivate_surface(char const *appid, char const *drawing_name, const reply_func &reply) { - ST(); - // TODO: application requests by old role, // so convert role old to new const char *c_role = this->convertRoleOldToNew(drawing_name); @@ -399,9 +396,9 @@ void WindowManager::api_deactivate_surface(char const *appid, char const *drawin /* * Check Phase */ - std::string id = appid; - std::string role = c_role; - std::string area = ""; //drawing_area; + string id = appid; + string role = c_role; + string area = ""; //drawing_area; Task task = Task::TASK_RELEASE; unsigned req_num = 0; WMError ret = WMError::UNKNOWN; @@ -410,7 +407,7 @@ void WindowManager::api_deactivate_surface(char const *appid, char const *drawin if (ret != WMError::SUCCESS) { - HMI_ERROR("wm", errorDescription(ret)); + HMI_ERROR(errorDescription(ret)); reply("Failed to set request"); return; } @@ -443,14 +440,14 @@ void WindowManager::api_enddraw(char const *appid, char const *drawing_name) // so convert role old to new const char *c_role = this->convertRoleOldToNew(drawing_name); - std::string id = appid; - std::string role = c_role; + string id = appid; + string role = c_role; unsigned current_req = g_app_list.currentRequestNumber(); bool result = g_app_list.setEndDrawFinished(current_req, id, role); if (!result) { - HMI_ERROR("wm", "%s is not in transition state", id.c_str()); + HMI_ERROR("%s is not in transition state", id.c_str()); return; } @@ -504,7 +501,7 @@ result<json_object *> WindowManager::api_get_display_info() result<json_object *> WindowManager::api_get_area_info(char const *drawing_name) { - HMI_DEBUG("wm", "called"); + HMI_DEBUG("called"); // TODO: application requests by old role, // so convert role old to new @@ -543,7 +540,7 @@ void WindowManager::api_ping() { this->dispatch_pending_events(); } void WindowManager::send_event(char const *evname, char const *label) { - HMI_DEBUG("wm", "%s: %s(%s)", __func__, evname, label); + HMI_DEBUG("%s: %s(%s)", __func__, evname, label); json_object *j = json_object_new_object(); json_object_object_add(j, kKeyDrawingName, json_object_new_string(label)); @@ -551,14 +548,14 @@ void WindowManager::send_event(char const *evname, char const *label) int ret = afb_event_push(this->map_afb_event[evname], j); if (ret != 0) { - HMI_DEBUG("wm", "afb_event_push failed: %m"); + HMI_DEBUG("afb_event_push failed: %m"); } } void WindowManager::send_event(char const *evname, char const *label, char const *area, int x, int y, int w, int h) { - HMI_DEBUG("wm", "%s: %s(%s, %s) x:%d y:%d w:%d h:%d", + HMI_DEBUG("%s: %s(%s, %s) x:%d y:%d w:%d h:%d", __func__, evname, label, area, x, y, w, h); json_object *j_rect = json_object_new_object(); @@ -575,7 +572,7 @@ void WindowManager::send_event(char const *evname, char const *label, char const int ret = afb_event_push(this->map_afb_event[evname], j); if (ret != 0) { - HMI_DEBUG("wm", "afb_event_push failed: %m"); + HMI_DEBUG("afb_event_push failed: %m"); } } @@ -589,12 +586,12 @@ void WindowManager::surface_created(uint32_t surface_id) auto layer_id = this->layers.get_layer_id(surface_id); if (!layer_id) { - HMI_DEBUG("wm", "Newly created surfce %d is not associated with any layer!", + HMI_DEBUG("Newly created surfce %d is not associated with any layer!", surface_id); return; } - HMI_DEBUG("wm", "surface_id is %u, layer_id is %u", surface_id, *layer_id); + HMI_DEBUG("surface_id is %u, layer_id is %u", surface_id, *layer_id); this->controller->layers[*layer_id]->add_surface(surface_id); this->layout_commit(); @@ -602,15 +599,15 @@ void WindowManager::surface_created(uint32_t surface_id) void WindowManager::surface_removed(uint32_t surface_id) { - HMI_DEBUG("wm", "Delete surface_id %u", surface_id); + HMI_DEBUG("Delete surface_id %u", surface_id); this->id_alloc.remove_id(surface_id); this->layers.remove_surface(surface_id); g_app_list.removeSurface(surface_id); } -void WindowManager::removeClient(const std::string &appid) +void WindowManager::removeClient(const string &appid) { - HMI_DEBUG("wm", "Remove clinet %s from list", appid.c_str()); + HMI_DEBUG("Remove clinet %s from list", appid.c_str()); g_app_list.removeClient(appid); } @@ -632,7 +629,7 @@ void WindowManager::timerHandler() this->processNextRequest(); } -void WindowManager::startTransitionWrapper(std::vector<WMAction> &actions) +void WindowManager::startTransitionWrapper(vector<WMAction> &actions) { WMError ret; unsigned req_num = g_app_list.currentRequestNumber(); @@ -661,7 +658,7 @@ void WindowManager::startTransitionWrapper(std::vector<WMAction> &actions) { goto proc_remove_request; } - std::string appid = g_app_list.getAppID(*surface_id, act.role, &found); + string appid = g_app_list.getAppID(*surface_id, act.role, &found); if (!found) { if (TaskVisible::INVISIBLE == act.visible) @@ -676,7 +673,9 @@ void WindowManager::startTransitionWrapper(std::vector<WMAction> &actions) goto error; } } - act.appid = appid; + auto client = g_app_list.lookUpClient(appid); + act.req_num = req_num; + act.client = client; } ret = g_app_list.setAction(req_num, act); @@ -737,9 +736,9 @@ bool WindowManager::pop_pending_events() optional<int> WindowManager::lookup_id(char const *name) { - return this->id_alloc.lookup(std::string(name)); + return this->id_alloc.lookup(string(name)); } -optional<std::string> WindowManager::lookup_name(int id) +optional<string> WindowManager::lookup_name(int id) { return this->id_alloc.lookup(id); } @@ -751,13 +750,13 @@ int WindowManager::init_layers() { if (!this->controller) { - HMI_ERROR("wm", "ivi_controller global not available"); + HMI_ERROR("ivi_controller global not available"); return -1; } if (this->outputs.empty()) { - HMI_ERROR("wm", "no output was set up!"); + HMI_ERROR("no output was set up!"); return -1; } @@ -773,7 +772,7 @@ int WindowManager::init_layers() uint32_t(o->physical_height)}; - HMI_DEBUG("wm", "SCALING: screen (%dx%d), physical (%dx%d)", + HMI_DEBUG("SCALING: screen (%dx%d), physical (%dx%d)", o->width, o->height, o->physical_width, o->physical_height); this->layers.loadAreaDb(); @@ -784,7 +783,7 @@ int WindowManager::init_layers() dp_bg.set_aspect(static_cast<double>(css_bg.w) / css_bg.h); dp_bg.fit(o->width, o->height); dp_bg.center(o->width, o->height); - HMI_DEBUG("wm", "SCALING: CSS BG(%dx%d) -> DDP %dx%d,(%dx%d)", + HMI_DEBUG("SCALING: CSS BG(%dx%d) -> DDP %dx%d,(%dx%d)", css_bg.w, css_bg.h, dp_bg.left(), dp_bg.top(), dp_bg.width(), dp_bg.height()); // Clear scene @@ -800,7 +799,7 @@ int WindowManager::init_layers() auto &l = layers[i.second.layer_id]; l->set_destination_rectangle(dp_bg.left(), dp_bg.top(), dp_bg.width(), dp_bg.height()); l->set_visibility(1); - HMI_DEBUG("wm", "Setting up layer %s (%d) for surface role match \"%s\"", + HMI_DEBUG("Setting up layer %s (%d) for surface role match \"%s\"", i.second.name.c_str(), i.second.layer_id, i.second.role.c_str()); } @@ -815,11 +814,11 @@ int WindowManager::init_layers() return 0; } -void WindowManager::surface_set_layout(int surface_id, const std::string& area) +void WindowManager::surface_set_layout(int surface_id, const string& area) { if (!this->controller->surface_exists(surface_id)) { - HMI_ERROR("wm", "Surface %d does not exist", surface_id); + HMI_ERROR("Surface %d does not exist", surface_id); return; } @@ -827,7 +826,7 @@ void WindowManager::surface_set_layout(int surface_id, const std::string& area) if (!o_layer_id) { - HMI_ERROR("wm", "Surface %d is not associated with any layer!", surface_id); + HMI_ERROR("Surface %d is not associated with any layer!", surface_id); return; } @@ -844,7 +843,7 @@ void WindowManager::surface_set_layout(int surface_id, const std::string& area) int w = rect.w; int h = rect.h; - HMI_DEBUG("wm", "surface_set_layout for surface %u on layer %u", surface_id, + HMI_DEBUG("surface_set_layout for surface %u on layer %u", surface_id, layer_id); // set destination to the display rectangle @@ -856,7 +855,7 @@ void WindowManager::surface_set_layout(int surface_id, const std::string& area) this->area_info[surface_id].w = w; this->area_info[surface_id].h = h; - HMI_DEBUG("wm", "Surface %u now on layer %u with rect { %d, %d, %d, %d }", + HMI_DEBUG("Surface %u now on layer %u with rect { %d, %d, %d, %d }", surface_id, layer_id, x, y, w, h); } @@ -881,7 +880,7 @@ void WindowManager::emit_syncdraw(char const *label, char const *area, int x, in this->send_event(kListEventName[Event_SyncDraw], label, area, x, y, w, h); } -void WindowManager::emit_syncdraw(const std::string &role, const std::string &area) +void WindowManager::emit_syncdraw(const string &role, const string &area) { compositor::rect rect = this->layers.getAreaSize(area); this->send_event(kListEventName[Event_SyncDraw], @@ -928,16 +927,16 @@ void WindowManager::activate(int id) this->surface_bg.erase(i); // Remove from BG layer (999) - HMI_DEBUG("wm", "Remove %s(%d) from BG layer", label, id); + HMI_DEBUG("Remove %s(%d) from BG layer", label, id); this->controller->layers[999]->remove_surface(id); // Add to FG layer (1001) - HMI_DEBUG("wm", "Add %s(%d) to FG layer", label, id); + HMI_DEBUG("Add %s(%d) to FG layer", label, id); this->controller->layers[1001]->add_surface(id); for (int j : this->surface_bg) { - HMI_DEBUG("wm", "Stored id:%d", j); + HMI_DEBUG("Stored id:%d", j); } break; } @@ -975,16 +974,16 @@ void WindowManager::deactivate(int id) this->surface_bg.push_back(id); // Remove from FG layer (1001) - HMI_DEBUG("wm", "Remove %s(%d) from FG layer", label, id); + HMI_DEBUG("Remove %s(%d) from FG layer", label, id); this->controller->layers[1001]->remove_surface(id); // Add to BG layer (999) - HMI_DEBUG("wm", "Add %s(%d) to BG layer", label, id); + HMI_DEBUG("Add %s(%d) to BG layer", label, id); this->controller->layers[999]->add_surface(id); for (int j : surface_bg) { - HMI_DEBUG("wm", "Stored id:%d", j); + HMI_DEBUG("Stored id:%d", j); } } else @@ -1004,7 +1003,7 @@ void WindowManager::deactivate(int id) } } -WMError WindowManager::setRequest(const std::string& appid, const std::string &role, const std::string &area, +WMError WindowManager::setRequest(const string& appid, const string &role, const string &area, Task task, unsigned* req_num) { if (!g_app_list.contains(appid)) @@ -1057,7 +1056,7 @@ WMError WindowManager::checkPolicy(unsigned req_num) ret = WMError::NO_ENTRY; return ret; } - std::string req_area = trigger.area; + string req_area = trigger.area; if (trigger.task == Task::TASK_ALLOCATE) { @@ -1113,7 +1112,7 @@ WMError WindowManager::startTransition(unsigned req_num) // TODO: application requests by old role, // so convert role new to old for emitting event - std::string old_role = this->rolenew2old[action.role]; + string old_role = this->rolenew2old[action.role]; this->emit_syncdraw(old_role, action.area); /* TODO: emit event for app not subscriber @@ -1132,9 +1131,9 @@ WMError WindowManager::startTransition(unsigned req_num) // Make it deactivate here for (const auto &x : actions) { - if (g_app_list.contains(x.appid)) + if (g_app_list.contains(x.client->appID())) { - auto client = g_app_list.lookUpClient(x.appid); + auto client = g_app_list.lookUpClient(x.client->appID()); this->deactivate(client->surfaceID(x.role)); } } @@ -1163,7 +1162,7 @@ WMError WindowManager::doEndDraw(unsigned req_num) if(act.visible != TaskVisible::NO_CHANGE) { // layout change - if(!g_app_list.contains(act.appid)){ + if(!g_app_list.contains(act.client->appID())){ ret = WMError::NOT_REGISTERED; } ret = this->layoutChange(act); @@ -1194,7 +1193,7 @@ WMError WindowManager::doEndDraw(unsigned req_num) { // TODO: application requests by old role, // so convert role new to old for emitting event - std::string old_role = this->rolenew2old[act_flush.role]; + string old_role = this->rolenew2old[act_flush.role]; this->emit_flushdraw(old_role.c_str()); } @@ -1210,7 +1209,7 @@ WMError WindowManager::layoutChange(const WMAction &action) // Visibility is not change -> no redraw is required return WMError::SUCCESS; } - auto client = g_app_list.lookUpClient(action.appid); + auto client = g_app_list.lookUpClient(action.client->appID()); unsigned surface = client->surfaceID(action.role); if (surface == 0) { @@ -1226,10 +1225,11 @@ WMError WindowManager::layoutChange(const WMAction &action) WMError WindowManager::visibilityChange(const WMAction &action) { HMI_SEQ_DEBUG(g_app_list.currentRequestNumber(), "Change visibility"); - if(!g_app_list.contains(action.appid)){ + if(!g_app_list.contains(action.client->appID())) + { return WMError::NOT_REGISTERED; } - auto client = g_app_list.lookUpClient(action.appid); + auto client = g_app_list.lookUpClient(action.client->appID()); unsigned surface = client->surfaceID(action.role); if(surface == 0) { @@ -1249,7 +1249,7 @@ WMError WindowManager::visibilityChange(const WMAction &action) return WMError::SUCCESS; } -WMError WindowManager::setSurfaceSize(unsigned surface, const std::string &area) +WMError WindowManager::setSurfaceSize(unsigned surface, const string &area) { this->surface_set_layout(surface, area); @@ -1271,7 +1271,7 @@ void WindowManager::emitScreenUpdated(unsigned req_num) { if(action.visible != TaskVisible::INVISIBLE) { - json_object_array_add(jarray, json_object_new_string(action.appid.c_str())); + json_object_array_add(jarray, json_object_new_string(action.client->appID().c_str())); } } json_object_object_add(j, kKeyIds, jarray); @@ -1281,7 +1281,7 @@ void WindowManager::emitScreenUpdated(unsigned req_num) this->map_afb_event[kListEventName[Event_ScreenUpdated]], j); if (ret != 0) { - HMI_DEBUG("wm", "afb_event_push failed: %m"); + HMI_DEBUG("afb_event_push failed: %m"); } } @@ -1289,7 +1289,7 @@ void WindowManager::setTimer() { struct timespec ts; if (clock_gettime(CLOCK_BOOTTIME, &ts) != 0) { - HMI_ERROR("wm", "Could't set time (clock_gettime() returns with error"); + HMI_ERROR("Could't set time (clock_gettime() returns with error"); return; } @@ -1301,7 +1301,7 @@ void WindowManager::setTimer() CLOCK_BOOTTIME, (uint64_t)(ts.tv_sec + kTimeOut) * 1000000ULL, 1, processTimerHandler, this); if (ret < 0) { - HMI_ERROR("wm", "Could't set timer"); + HMI_ERROR("Could't set timer"); } } else @@ -1364,7 +1364,7 @@ const char* WindowManager::convertRoleOldToNew(char const *old_role) new_role = old_role; } - HMI_DEBUG("wm", "old:%s -> new:%s", old_role, new_role); + HMI_DEBUG("old:%s -> new:%s", old_role, new_role); return new_role; } @@ -1373,16 +1373,16 @@ int WindowManager::loadOldRoleDb() { // Get afm application installed dir char const *afm_app_install_dir = getenv("AFM_APP_INSTALL_DIR"); - HMI_DEBUG("wm", "afm_app_install_dir:%s", afm_app_install_dir); + HMI_DEBUG("afm_app_install_dir:%s", afm_app_install_dir); - std::string file_name; + string file_name; if (!afm_app_install_dir) { - HMI_ERROR("wm", "AFM_APP_INSTALL_DIR is not defined"); + HMI_ERROR("AFM_APP_INSTALL_DIR is not defined"); } else { - file_name = std::string(afm_app_install_dir) + std::string("/etc/old_roles.db"); + file_name = string(afm_app_install_dir) + string("/etc/old_roles.db"); } // Load old_role.db @@ -1390,22 +1390,22 @@ int WindowManager::loadOldRoleDb() int ret = jh::inputJsonFilie(file_name.c_str(), &json_obj); if (0 > ret) { - HMI_ERROR("wm", "Could not open old_role.db, so use default old_role information"); + HMI_ERROR("Could not open old_role.db, so use default old_role information"); json_obj = json_tokener_parse(kDefaultOldRoleDb); } - HMI_DEBUG("wm", "json_obj dump:%s", json_object_get_string(json_obj)); + HMI_DEBUG("json_obj dump:%s", json_object_get_string(json_obj)); // Perse apps json_object* json_cfg; if (!json_object_object_get_ex(json_obj, "old_roles", &json_cfg)) { - HMI_ERROR("wm", "Parse Error!!"); + HMI_ERROR("Parse Error!!"); return -1; } int len = json_object_array_length(json_cfg); - HMI_DEBUG("wm", "json_cfg len:%d", len); - HMI_DEBUG("wm", "json_cfg dump:%s", json_object_get_string(json_cfg)); + HMI_DEBUG("json_cfg len:%d", len); + HMI_DEBUG("json_cfg dump:%s", json_object_get_string(json_cfg)); for (int i=0; i<len; i++) { @@ -1414,25 +1414,25 @@ int WindowManager::loadOldRoleDb() const char* old_role = jh::getStringFromJson(json_tmp, "name"); if (nullptr == old_role) { - HMI_ERROR("wm", "Parse Error!!"); + HMI_ERROR("Parse Error!!"); return -1; } const char* new_role = jh::getStringFromJson(json_tmp, "new"); if (nullptr == new_role) { - HMI_ERROR("wm", "Parse Error!!"); + HMI_ERROR("Parse Error!!"); return -1; } - this->roleold2new[old_role] = std::string(new_role); + this->roleold2new[old_role] = string(new_role); } // Check for(auto itr = this->roleold2new.begin(); itr != this->roleold2new.end(); ++itr) { - HMI_DEBUG("wm", ">>> role old:%s new:%s", + HMI_DEBUG(">>> role old:%s new:%s", itr->first.c_str(), itr->second.c_str()); } @@ -1462,7 +1462,7 @@ const char *WindowManager::check_surface_exist(const char *drawing_name) return "Surface is not on any layer!"; } - HMI_DEBUG("wm", "surface %d is detected", *surface_id); + HMI_DEBUG("surface %d is detected", *surface_id); return nullptr; } diff --git a/src/window_manager.hpp b/src/window_manager.hpp index 6cbd355..b591149 100644 --- a/src/window_manager.hpp +++ b/src/window_manager.hpp @@ -14,21 +14,25 @@ * limitations under the License. */ -#ifndef TMCAGLWM_APP_HPP -#define TMCAGLWM_APP_HPP +#ifndef WINDOW_MANAGER_HPP +#define WINDOW_MANAGER_HPP #include <atomic> #include <memory> #include <unordered_map> #include <experimental/optional> +#include "util.hpp" #include "controller_hooks.hpp" -#include "layers.hpp" +#include "wm_layer.hpp" #include "layout.hpp" #include "wayland_ivi_wm.hpp" #include "pm_wrapper.hpp" -#include "hmi-debug.h" #include "request.hpp" #include "wm_error.hpp" +extern "C" +{ +#include <afb/afb-binding.h> +} struct json_object; @@ -88,7 +92,7 @@ struct id_allocator unsigned sid = this->next++; this->id2name[sid] = name; this->name2id[name] = sid; - HMI_DEBUG("wm", "allocated new id %u with name %s", sid, name.c_str()); + HMI_DEBUG("allocated new id %u with name %s", sid, name.c_str()); return sid; } @@ -97,7 +101,7 @@ struct id_allocator { this->id2name[sid] = name; this->name2id[name] = sid; - HMI_DEBUG("wm", "register id %u with name %s", sid, name.c_str()); + HMI_DEBUG("register id %u with name %s", sid, name.c_str()); return; } @@ -286,4 +290,4 @@ class WindowManager } // namespace wm -#endif // TMCAGLWM_APP_HPP +#endif // WINDOW_MANAGER_HPP diff --git a/src/wm_client.cpp b/src/wm_client.cpp index 09e2e00..2e12a69 100644 --- a/src/wm_client.cpp +++ b/src/wm_client.cpp @@ -16,7 +16,7 @@ #include <json-c/json.h> #include "wm_client.hpp" -#include "hmi-debug.h" +#include "util.hpp" #define INVALID_SURFACE_ID 0 @@ -137,10 +137,10 @@ void WMClient::registerLayer(unsigned layer) */ bool WMClient::addSurface(const string &role, unsigned surface) { - HMI_DEBUG("wm", "Add role %s with surface %d", role.c_str(), surface); + HMI_DEBUG("Add role %s with surface %d", role.c_str(), surface); if (0 != this->role2surface.count(role)) { - HMI_NOTICE("wm", "override surfaceID %d with %d", this->role2surface[role], surface); + HMI_NOTICE("override surfaceID %d with %d", this->role2surface[role], surface); } this->role2surface[role] = surface; return true; @@ -153,7 +153,7 @@ bool WMClient::removeSurfaceIfExist(unsigned surface) { if (surface == x.second) { - HMI_INFO("wm", "Remove surface from client %s: role %s, surface: %d", + HMI_INFO("Remove surface from client %s: role %s, surface: %d", this->id.c_str(), x.first.c_str(), x.second); this->role2surface.erase(x.first); ret = true; @@ -178,13 +178,13 @@ bool WMClient::removeRole(const string &role) bool WMClient::subscribe(afb_req req, const string &evname) { if(evname != kKeyError){ - HMI_DEBUG("wm", "error is only enabeled for now"); + HMI_DEBUG("error is only enabeled for now"); return false; } int ret = afb_req_subscribe(req, this->event2list[evname]); if (ret) { - HMI_DEBUG("wm", "Failed to subscribe %s", evname.c_str()); + HMI_DEBUG("Failed to subscribe %s", evname.c_str()); return false; } return true; @@ -193,18 +193,18 @@ bool WMClient::subscribe(afb_req req, const string &evname) void WMClient::emitError(WM_CLIENT_ERROR_EVENT ev) { if (!afb_event_is_valid(this->event2list[kKeyError])){ - HMI_ERROR("wm", "event err is not valid"); + HMI_ERROR("event err is not valid"); return; } json_object *j = json_object_new_object(); json_object_object_add(j, kKeyError, json_object_new_int(ev)); json_object_object_add(j, kKeyErrorDesc, json_object_new_string(kErrorDescription[ev].c_str())); - HMI_DEBUG("wm", "error: %d, description:%s", ev, kErrorDescription[ev].c_str()); + HMI_DEBUG("error: %d, description:%s", ev, kErrorDescription[ev].c_str()); int ret = afb_event_push(this->event2list[kKeyError], j); if (ret != 0) { - HMI_DEBUG("wm", "afb_event_push failed: %m"); + HMI_DEBUG("afb_event_push failed: %m"); } } #endif diff --git a/src/layers.cpp b/src/wm_layer.cpp index b7a0fa2..6a98884 100644 --- a/src/layers.cpp +++ b/src/wm_layer.cpp @@ -16,9 +16,9 @@ #include <regex> -#include "layers.hpp" +#include "wm_layer.hpp" #include "json_helper.hpp" -#include "hmi-debug.h" +#include "util.hpp" namespace wm { @@ -31,7 +31,7 @@ layer::layer(nlohmann::json const &j) this->name = j["name"]; this->layer_id = j["layer_id"]; - HMI_DEBUG("wm", "layer_id:%d name:%s", this->layer_id, this->name.c_str()); + HMI_DEBUG("layer_id:%d name:%s", this->layer_id, this->name.c_str()); } struct result<struct layer_map> to_layer_map(nlohmann::json const &j) @@ -108,11 +108,11 @@ optional<int> layer_map::get_layer_id(std::string const &role) auto re = std::regex(r.first); if (std::regex_match(role, re)) { - HMI_DEBUG("wm", "role %s matches layer %d", role.c_str(), r.second); + HMI_DEBUG("role %s matches layer %d", role.c_str(), r.second); return optional<int>(r.second); } } - HMI_DEBUG("wm", "role %s does NOT match any layer", role.c_str()); + HMI_DEBUG("role %s does NOT match any layer", role.c_str()); return nullopt; } @@ -168,7 +168,7 @@ void layer_map::setupArea(double scaling) i.second.w = static_cast<int>(scaling * i.second.w + 0.5); i.second.h = static_cast<int>(scaling * i.second.h + 0.5); - HMI_DEBUG("wm:lm", "area:%s size(after) : x:%d y:%d w:%d h:%d", + HMI_DEBUG("area:%s size(after) : x:%d y:%d w:%d h:%d", i.first.c_str(), i.second.x, i.second.y, i.second.w, i.second.h); } } @@ -180,16 +180,14 @@ compositor::rect layer_map::getAreaSize(const std::string &area) int layer_map::loadAreaDb() { - HMI_DEBUG("wm:lm", "Call"); - // Get afm application installed dir char const *afm_app_install_dir = getenv("AFM_APP_INSTALL_DIR"); - HMI_DEBUG("wm:lm", "afm_app_install_dir:%s", afm_app_install_dir); + HMI_DEBUG("afm_app_install_dir:%s", afm_app_install_dir); std::string file_name; if (!afm_app_install_dir) { - HMI_ERROR("wm:lm", "AFM_APP_INSTALL_DIR is not defined"); + HMI_ERROR("AFM_APP_INSTALL_DIR is not defined"); } else { @@ -201,45 +199,45 @@ int layer_map::loadAreaDb() int ret = jh::inputJsonFilie(file_name.c_str(), &json_obj); if (0 > ret) { - HMI_DEBUG("wm:lm", "Could not open area.db, so use default area information"); + HMI_DEBUG("Could not open area.db, so use default area information"); json_obj = json_tokener_parse(kDefaultAreaDb); } - HMI_DEBUG("wm:lm", "json_obj dump:%s", json_object_get_string(json_obj)); + HMI_DEBUG("json_obj dump:%s", json_object_get_string(json_obj)); // Perse areas - HMI_DEBUG("wm:lm", "Perse areas"); + HMI_DEBUG("Perse areas"); json_object *json_cfg; if (!json_object_object_get_ex(json_obj, "areas", &json_cfg)) { - HMI_ERROR("wm:lm", "Parse Error!!"); + HMI_ERROR("Parse Error!!"); return -1; } int len = json_object_array_length(json_cfg); - HMI_DEBUG("wm:lm", "json_cfg len:%d", len); - HMI_DEBUG("wm:lm", "json_cfg dump:%s", json_object_get_string(json_cfg)); + HMI_DEBUG("json_cfg len:%d", len); + HMI_DEBUG("json_cfg dump:%s", json_object_get_string(json_cfg)); const char *area; for (int i = 0; i < len; i++) { json_object *json_tmp = json_object_array_get_idx(json_cfg, i); - HMI_DEBUG("wm:lm", "> json_tmp dump:%s", json_object_get_string(json_tmp)); + HMI_DEBUG("> json_tmp dump:%s", json_object_get_string(json_tmp)); area = jh::getStringFromJson(json_tmp, "name"); if (nullptr == area) { - HMI_ERROR("wm:lm", "Parse Error!!"); + HMI_ERROR("Parse Error!!"); return -1; } - HMI_DEBUG("wm:lm", "> area:%s", area); + HMI_DEBUG("> area:%s", area); json_object *json_rect; if (!json_object_object_get_ex(json_tmp, "rect", &json_rect)) { - HMI_ERROR("wm:lm", "Parse Error!!"); + HMI_ERROR("Parse Error!!"); return -1; } - HMI_DEBUG("wm:lm", "> json_rect dump:%s", json_object_get_string(json_rect)); + HMI_DEBUG("> json_rect dump:%s", json_object_get_string(json_rect)); compositor::rect area_size; area_size.x = jh::getIntFromJson(json_rect, "x"); @@ -254,7 +252,7 @@ int layer_map::loadAreaDb() for (auto itr = this->area2size.begin(); itr != this->area2size.end(); ++itr) { - HMI_DEBUG("wm:lm", "area:%s x:%d y:%d w:%d h:%d", + HMI_DEBUG("area:%s x:%d y:%d w:%d h:%d", itr->first.c_str(), itr->second.x, itr->second.y, itr->second.w, itr->second.h); } diff --git a/src/layers.hpp b/src/wm_layer.hpp index 3a16985..4dd4616 100644 --- a/src/layers.hpp +++ b/src/wm_layer.hpp @@ -14,8 +14,8 @@ * limitations under the License. */ -#ifndef TMCAGLWM_LAYERS_H -#define TMCAGLWM_LAYERS_H +#ifndef WM_LAYERS_H +#define WM_LAYERS_H #include <string> @@ -155,4 +155,4 @@ static const nlohmann::json default_layers_json = { }; } // namespace wm -#endif // TMCAGLWM_LAYERS_H +#endif // WM_LAYERS_H |