From: Junseok, Kim Date: Thu, 2 Dec 2021 07:21:23 +0000 (+0900) Subject: e_test_event: added eventWatcher that waitEvent method makes waiting until event... X-Git-Tag: submit/tizen/20211214.025022~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F82%2F267382%2F1;p=platform%2Fcore%2Fuifw%2Fe-tizen-testcase.git e_test_event: added eventWatcher that waitEvent method makes waiting until event signal received previous waitEvent method wait fixed time(500ms) for receive event signal. It could cause testcase failure by timeout even if server delayed for busy job. for prevent this issue, raise maximum wait time to 3sec and added eventWatcher for stop mainloop when the desired event received. Change-Id: I1bca6a17e80ec66aab6c4316b64d77b472962766 --- diff --git a/src/e_test_base.cpp b/src/e_test_base.cpp index efd73e8..1a66a6f 100644 --- a/src/e_test_base.cpp +++ b/src/e_test_base.cpp @@ -20,6 +20,7 @@ etTCBase::~etTCBase() etRunner::get().setTCEnd(); etRunner::get().flushEventQueue(); + etRunner::get().unwatchEventSignal(); // if there are any error, print list of window if (HasFailure()) diff --git a/src/e_test_event.cpp b/src/e_test_event.cpp index ac42d8e..4cc718f 100644 --- a/src/e_test_event.cpp +++ b/src/e_test_event.cpp @@ -1459,6 +1459,42 @@ etRunner::getAuxHint(etWin *tw, const char *hint_key) return NULL; } +void +etRunner::watchEventSignal(Ecore_Window win, E_TC_Event_Type ev_type) +{ + ev.eventWatcher = std::make_shared(win, ev_type); +} + +void +etRunner::unwatchEventSignal() +{ + ev.eventWatcher = nullptr; +} + +Eina_Bool +etRunner::isWatchingEventSignal(std::shared_ptr ei) +{ + if (ei == nullptr) return EINA_FALSE; + if (ev.eventWatcher == nullptr) return EINA_FALSE; + + if (ev.eventWatcher->isSameEvent(ei)) + return EINA_TRUE; + + return EINA_FALSE; +} + +Eina_Bool +etRunner::isWatchingEventSignal(Ecore_Window win, E_TC_Event_Type ev_type) +{ + if (ev.eventWatcher == nullptr) return EINA_FALSE; + + if ((ev.eventWatcher->isSameWin(win) && + ev.eventWatcher->isSameType(ev_type))) + return EINA_TRUE; + + return EINA_FALSE; +} + std::shared_ptr etRunner::waitEvent(etWin *win, E_TC_Event_Type ev_type) { @@ -1511,11 +1547,12 @@ etRunner::waitEvent(etWin *win, E_TC_Event_Type ev_type) } // pre-waiting events - work(0.5); + watchEventSignal(win?win->native_win:0, ev_type); + work(); if (*ev.wait_event_index == ev.last_event) { - work(0.5); // waiting additional time + work(); // waiting additional time if (*ev.wait_event_index == ev.last_event) { std::shared_ptr res = std::make_shared(0, E_TC_EVENT_TYPE_NONE); @@ -1570,6 +1607,12 @@ etRunner::insertEventQueue(std::shared_ptr ei) ev.recv_queue.push_back(ei); ev.last_event = ei; + if (isWatchingEventSignal(ei)) + { + unwatchEventSignal(); + finishWork(); + } + return EINA_TRUE; } @@ -1582,6 +1625,12 @@ etRunner::insertEventQueue(Ecore_Window id, E_TC_Event_Type ev_type) ev.recv_queue.push_back(ei); ev.last_event = ei; + if (isWatchingEventSignal(id, ev_type)) + { + unwatchEventSignal(); + finishWork(); + } + return EINA_TRUE; } @@ -3247,6 +3296,8 @@ etRunner::verifyTC(std::string basetype, std::string tcname) EINA_SAFETY_ON_FALSE_RETURN_VAL(execute_verifyTC, EINA_TRUE); EINA_SAFETY_ON_NULL_RETURN_VAL(screenshot, EINA_FALSE); + work(0.3); + surface = efl_util_screenshot_take_tbm_surface(screenshot); if (surface == NULL) { diff --git a/src/e_test_event.h b/src/e_test_event.h index 746c5a6..6a88804 100644 --- a/src/e_test_event.h +++ b/src/e_test_event.h @@ -23,6 +23,8 @@ public: ~eventItem() {} public: + Eina_Bool isSameEvent(eventItem *ei) { return (ei->win == this->win) && (ei->type == this->type); } + Eina_Bool isSameEvent(std::shared_ptr ei) { return (ei->win == this->win) && (ei->type == this->type); } Eina_Bool isSameWin(Ecore_Window win) { return win == this->win; } Eina_Bool isSameType(E_TC_Event_Type type) {return type == this->type; } @@ -204,13 +206,14 @@ public: /* TODO: make it hidden */ Evas_Object *elm_win; Ecore_Window native_win; - Eina_List *sh_list; - Eina_List *eh_list; + Eina_List *sh_list; // Signal Handler list + Eina_List *eh_list; // Event Handler list std::list> recv_queue; std::list>::iterator wait_event_index; std::shared_ptr last_event; std::shared_ptr last_checkpoint; + std::shared_ptr eventWatcher; struct { @@ -341,6 +344,7 @@ public: void setEventCheckpoint(); Eina_Bool addSignalHandlers(); void delSignalHandlers(); + void unwatchEventSignal(); Eldbus_Proxy *getDbusProxy() { return dbus.ds_proxy; } Eldbus_Object *getDbusObject() { return dbus.ds_obj; } @@ -354,6 +358,9 @@ public: protected: Eina_Bool initProtocols(); + void watchEventSignal(Ecore_Window win, E_TC_Event_Type ev_type); + Eina_Bool isWatchingEventSignal(std::shared_ptr ei); + Eina_Bool isWatchingEventSignal(Ecore_Window win, E_TC_Event_Type ev_type); efl_util_inputgen_h inputGenerator = NULL; #ifndef DISABLE_GESTURE_TESTS efl_util_gesture_h gestureHandler = NULL;