aboutsummaryrefslogtreecommitdiffstats
path: root/src/applist.cpp
diff options
context:
space:
mode:
authorKazumasa Mitsunari <knimitz@witz-inc.co.jp>2018-05-20 23:08:13 +0900
committerKazumasa Mitsunari <knimitz@witz-inc.co.jp>2018-05-21 12:21:42 +0900
commit973a7123c0bced7c7e7d9dc6dc5e990a0e2838ac (patch)
tree1f45c6b73578f839aef7f7ec7e66b3f06eb46eed /src/applist.cpp
parent807c2bc45bf19059021eb3d94e2c1693a9c940b6 (diff)
[Local]: Lock Sequence from activateSurface to flushDraw
Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
Diffstat (limited to 'src/applist.cpp')
-rw-r--r--src/applist.cpp137
1 files changed, 137 insertions, 0 deletions
diff --git a/src/applist.cpp b/src/applist.cpp
new file mode 100644
index 0000000..477a51b
--- /dev/null
+++ b/src/applist.cpp
@@ -0,0 +1,137 @@
+/*
+ * Copyright (c) 2017 TOYOTA MOTOR CORPORATION
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <algorithm>
+#include "applist.hpp"
+#include "../include/hmi-debug.h"
+
+using std::shared_ptr;
+using std::string;
+using std::unique_ptr;
+
+namespace wm {
+
+
+AppList::AppList(){}
+AppList::~AppList(){}
+
+void AppList::addClient(const std::string &appid, const std::string &role){
+ shared_ptr<WMClient> client(new WMClient(appid, role));
+ client_list[appid] = client;
+}
+
+void AppList::removeClient(const string &appid){
+ client_list.erase(appid);
+}
+
+bool AppList::contains(const string &appid){
+ auto result = client_list.find(appid);
+ return (client_list.end() != result) ? true : false;
+}
+
+/*
+* Call contains before calling this function
+*/
+shared_ptr <WMClient> AppList::lookUpClient(const string &appid)
+{
+ /* auto result = client_list.find(appid);
+ return (client_list.end() != result) ?
+ &(result->second()) : nullptr; */
+ return client_list[appid];
+}
+
+unsigned AppList::currentSequenceNumber(){
+ return current_seq;
+}
+
+unsigned AppList::getSequenceNumber(const string &appid){
+ for(auto x : req_list){
+ // Since app will not request twice and more, comparing appid is enough?
+ if( (x.appid == appid))
+ {
+ return x.seq_num;
+ }
+ }
+ return 0;
+}
+
+unsigned AppList::addAllocateRequest(WMRequest req){
+ req.seq_num = req_list.back().seq_num + 1;
+ req.allocating = false;
+ req.end_draw_finished = false;
+ req_list.push_back(req);
+ return req.seq_num;
+}
+
+bool AppList::requestFinished(){
+ return req_list.empty();
+}
+
+unsigned AppList::lookUpAllocatingApp(const string &appid){
+ for(auto x: req_list){
+ if(appid == x.appid){
+ if(false == x.allocating)
+ return x.seq_num;
+ }
+ }
+ return 0;
+}
+
+void AppList::setEndDrawFinished(unsigned request_seq, const string &role){
+ for(auto x: req_list){
+ if(request_seq == x.seq_num){
+ if(role == x.role){
+ x.end_draw_finished = true;
+ }
+ }
+ }
+}
+
+bool AppList::endDrawFullfilled(unsigned request_seq){
+ bool result = false;
+ for (auto x : req_list)
+ {
+ if(request_seq < x.seq_num){
+ break;
+ }
+ if(request_seq == x.seq_num){
+ result = x.end_draw_finished && x.allocating;
+ if(result == false){
+ break;
+ }
+ }
+ }
+ return result;
+}
+
+void AppList::removeRequest(unsigned req_seq){
+ req_list.erase(remove_if(req_list.begin(), req_list.end(),
+ [req_seq](WMRequest x) { return x.seq_num == req_seq;}
+ ));
+}
+
+void AppList::setCurrentSequence(unsigned req_seq){
+ this->current_seq = req_seq;
+ if(0 == this->current_seq){
+ this->current_seq = 1;
+ }
+}
+
+bool AppList::haveRequest(){
+ return true;
+}
+
+} \ No newline at end of file