X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fapplist.cpp;h=130eb61c616cae03db5779702a600dc39acfb5bb;hb=eb892f6103c8bb2d95e6fd5274d2bac7d7f0b6fb;hp=4e0dc1122ddf76f0ec9f2b88194d9ac30b5bde1c;hpb=6e2872d06857fdb6ecc76064cb80930e9a2635e4;p=apps%2Fagl-service-windowmanager.git diff --git a/src/applist.cpp b/src/applist.cpp index 4e0dc11..130eb61 100644 --- a/src/applist.cpp +++ b/src/applist.cpp @@ -41,8 +41,8 @@ AppList::AppList() app2client(), current_req(1) { - app2client.reserve(kReserveClientSize); - req_list.reserve(kReserveReqSize); + this->app2client.reserve(kReserveClientSize); + this->req_list.reserve(kReserveReqSize); } AppList::~AppList() {} @@ -67,7 +67,7 @@ AppList::~AppList() {} */ void AppList::addClient(const std::string &appid, unsigned layer, unsigned surface, const std::string &role) { - std::lock_guard lock(mtx); + std::lock_guard lock(this->mtx); shared_ptr client = std::make_shared(appid, layer, surface, role); this->app2client[appid] = client; this->clientDump(); @@ -80,7 +80,7 @@ void AppList::addClient(const std::string &appid, unsigned layer, unsigned surfa */ void AppList::removeClient(const string &appid) { - std::lock_guard lock(mtx); + std::lock_guard lock(this->mtx); this->app2client.erase(appid); HMI_INFO("wm", "Remove client %s", appid.c_str()); } @@ -97,15 +97,21 @@ bool AppList::contains(const string &appid) const return (this->app2client.end() != result) ? true : false; } -void AppList::removeSurface(unsigned surface_id){ +/** + * Remove surface from client + * + * @param unsigned[in] surface id. + * @return None + */ +void AppList::removeSurface(unsigned surface){ // This function may be very slow - std::lock_guard lock(mtx); + std::lock_guard lock(this->mtx); bool ret = false; for (auto &x : this->app2client) { - ret = x.second->removeSurfaceIfExist(surface_id); + ret = x.second->removeSurfaceIfExist(surface); if(ret){ - HMI_DEBUG("wm", "remove surface %d from Client %s finish", surface_id, x.second->appID().c_str()); + HMI_DEBUG("wm", "remove surface %d from Client %s finish", surface, x.second->appID().c_str()); break; } } @@ -133,15 +139,38 @@ shared_ptr AppList::lookUpClient(const string &appid) * * Returns the number of client stored in the list. * - * @param string[in] application id(key) - * @return WMClient object - * @attention Must call cantains to check appid is stored before this function. + * @param None + * @return The number of client */ int AppList::countClient() const { return this->app2client.size(); } +/** + * Get AppID with surface and role. + * + * Returns AppID if found. + * + * @param unsigned[in] surfaceID + * @param string[in] role + * @param bool[in,out] (key) + * @return WMClient object + * @attention If AppID is not found, param found will be false. + */ +string AppList::getAppID(unsigned surface, const string& role, bool* found) const +{ + *found = false; + for (const auto &x : this->app2client) + { + if(x.second->surfaceID(role) == surface){ + *found = true; + return x.second->appID(); + } + } + return string(""); +} + // =================== Request Date container API =================== /** @@ -198,7 +227,7 @@ unsigned AppList::getRequestNumber(const string &appid) const */ unsigned AppList::addAllocateRequest(WMRequest req) { - std::lock_guard lock(mtx); + std::lock_guard lock(this->mtx); if (this->req_list.size() == 0) { req.req_num = current_req; @@ -282,7 +311,7 @@ const vector &AppList::getActions(unsigned req_num, bool* found */ WMError AppList::setAction(unsigned req_num, const struct WMAction &action) { - std::lock_guard lock(mtx); + std::lock_guard lock(this->mtx); WMError result = WMError::FAIL; for (auto &x : this->req_list) { @@ -323,7 +352,7 @@ WMError AppList::setAction(unsigned req_num, const struct WMAction &action) */ WMError AppList::setAction(unsigned req_num, const string &appid, const string &role, const string &area, bool visible) { - std::lock_guard lock(mtx); + std::lock_guard lock(this->mtx); WMError result = WMError::FAIL; for (auto &x : req_list) { @@ -356,7 +385,7 @@ WMError AppList::setAction(unsigned req_num, const string &appid, const string & */ bool AppList::setEndDrawFinished(unsigned req_num, const string &appid, const string &role) { - std::lock_guard lock(mtx); + std::lock_guard lock(this->mtx); bool result = false; for (auto &x : req_list) { @@ -420,7 +449,7 @@ bool AppList::endDrawFullfilled(unsigned req_num) */ void AppList::removeRequest(unsigned req_num) { - std::lock_guard lock(mtx); + std::lock_guard lock(this->mtx); this->req_list.erase(remove_if(this->req_list.begin(), this->req_list.end(), [req_num](WMRequest x) { return x.req_num == req_num; @@ -435,7 +464,7 @@ void AppList::removeRequest(unsigned req_num) */ void AppList::next() { - std::lock_guard lock(mtx); + std::lock_guard lock(this->mtx); ++this->current_req; if (0 == this->current_req) {