X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fapplist.hpp;h=59f37ba769799799eb713185946e0b8d75cd13bb;hb=6e2872d06857fdb6ecc76064cb80930e9a2635e4;hp=5da91cfcf02aacbfbf837f0769be0fb217ae8c16;hpb=5ac52dc6412f8311b6cfbd0e99652c914d5c6168;p=apps%2Fagl-service-windowmanager.git diff --git a/src/applist.hpp b/src/applist.hpp index 5da91cf..59f37ba 100644 --- a/src/applist.hpp +++ b/src/applist.hpp @@ -20,83 +20,59 @@ #include #include #include -//#include -#include "windowmanager-client.hpp" +#include +#include "wm_client.hpp" +#include "request.hpp" +#include "wm_error.hpp" -namespace wm { +namespace wm +{ /* using std::experimental::nullopt; using std::experimental::optional; */ -typedef enum Task{ - TASK_ALLOCATE, - TASK_RELEASE -}ResourceTask; - -struct WMTriger { - std::string appid; - std::string role; - std::string area; - Task task; -}; - -struct WMAction +class AppList { - std::string appid; - std::string role; - std::string area; - bool end_draw_finished; -}; - -struct WMRequest -{ - WMRequest(); - explicit WMRequest(std::string appid, std::string role, - std::string area, ResourceTask task); - virtual ~WMRequest(); - WMRequest(const WMRequest &obj); - - unsigned seq_num; - struct WMTriger trigger; - std::vector sync_draw_req; -}; - -class AppList { -public: + public: AppList(); virtual ~AppList(); AppList(const AppList &obj) = delete; // Client Database Interface - void addClient(const std::string &appid, const std::string &role); + /* TODO: consider, which is better WMClient as parameter? + If the WMClient should be more flexible, I think this param should be WMClient class + */ + void addClient(const std::string &appid, unsigned layer, unsigned surface, const std::string &role); void removeClient(const std::string &appid); - bool contains(const std::string &appid); - int countClient(); + bool contains(const std::string &appid) const; + int countClient() const; std::shared_ptr lookUpClient(const std::string &appid); + void removeSurface(unsigned surface); // Request Interface - unsigned currentSequenceNumber(); - unsigned getSequenceNumber(const std::string &appid); + unsigned currentRequestNumber() const; + unsigned getRequestNumber(const std::string &appid) const; unsigned addAllocateRequest(WMRequest req); - /* TODO: consider, which is better WMClient or std::string appid? - if appid is key to manage resources, it is better to select std::string - otherwise WMClient is better, IMO */ - bool requestFinished(); - bool setAction(unsigned request_seq, const std::string &appid, const std::string &role, const std::string &area); - bool setEndDrawFinished(unsigned request_seq, const std::string &appid, const std::string &role); - bool endDrawFullfilled(unsigned request_seq); - void removeRequest(unsigned request_seq); - void next(); - bool haveRequest(); + WMError setAction(unsigned req_num, const struct WMAction &action); + WMError setAction(unsigned req_num, const std::string &appid, const std::string &role, const std::string &area, bool visible = true); + bool setEndDrawFinished(unsigned req_num, const std::string &appid, const std::string &role); + bool endDrawFullfilled(unsigned req_num); + void removeRequest(unsigned req_num); + void next(); + bool haveRequest() const; + + struct WMTrigger getRequest(unsigned req_num, bool* found); + const std::vector &getActions(unsigned req_num, bool* found); - void client_dump(); - void req_dump(); + void clientDump(); + void reqDump(); -private: - std::vector req_list; - std::unordered_map> client_list; - unsigned current_seq; + private: + std::vector req_list; + std::unordered_map> app2client; + unsigned current_req; + std::mutex mtx; }; -} +} // namespace wm #endif // ALLOCATE_LIST_HPP \ No newline at end of file