jpeg pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=e6d7494909d078eeb880d97a7f8f4332b0041053

commit e6d7494909d078eeb880d97a7f8f4332b0041053
Author: Jean-Philippe Andre <jp.an...@samsung.com>
Date:   Fri Feb 17 16:59:41 2017 +0900

    elm_test: Add autobounce test for "Scroller 2"
---
 src/bin/elementary/test_scroller.c | 104 +++++++++++++++++++++++++++++++++++++
 1 file changed, 104 insertions(+)

diff --git a/src/bin/elementary/test_scroller.c 
b/src/bin/elementary/test_scroller.c
index e043981..826f064 100644
--- a/src/bin/elementary/test_scroller.c
+++ b/src/bin/elementary/test_scroller.c
@@ -462,12 +462,100 @@ _click_through(void *data EINA_UNUSED, Evas_Object *obj, 
void *event_info EINA_U
    printf("click went through on %p\n", obj);
 }
 
+typedef struct
+{
+   Evas_Object *scroller;
+   Evas_Object *it1, *it2;
+   Ecore_Timer *timer;
+   int autobounce;
+   int frames;
+   int bounce_max;
+   int y1, y2;
+   int state;
+} Bounce;
+
+#ifdef CLOCK_PROCESS_CPUTIME_ID
+static void
+_bounce_cb_frame(void *data, Evas *e EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+   Bounce *bounce = data;
+   bounce->frames++;
+}
+#endif
+
+static Eina_Bool
+_bounce_cb(void *data)
+{
+   Bounce *bounce = data;
+
+   if (!bounce->y1)
+     {
+        elm_interface_scrollable_bounce_allow_set(bounce->scroller, 0, 1);
+        efl_gfx_position_get(bounce->it1, NULL, &bounce->y1);
+        efl_gfx_position_get(bounce->it2, NULL, &bounce->y2);
+     }
+
+   bounce->state++;
+   if (bounce->state & 0x1)
+     elm_interface_scrollable_region_bring_in(bounce->scroller, 0, bounce->y2, 
1, 1);
+   else
+     elm_interface_scrollable_region_bring_in(bounce->scroller, 0, bounce->y1, 
1, 1);
+
+#ifdef CLOCK_PROCESS_CPUTIME_ID
+   static struct timespec t0;
+   if (bounce->state == 2)
+     {
+        evas_event_callback_add(evas_object_evas_get(bounce->scroller),
+                                EVAS_CALLBACK_RENDER_FLUSH_POST,
+                                _bounce_cb_frame, bounce);
+        clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &t0);
+     }
+#endif
+
+   if (bounce->state > bounce->bounce_max)
+     {
+#ifdef CLOCK_PROCESS_CPUTIME_ID
+        struct timespec t;
+        unsigned long long tll, t0ll, tdll, frames;
+
+        clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &t);
+        t0ll = (t0.tv_sec * 1000000000) + t0.tv_nsec;
+        tll = (t.tv_sec * 1000000000) + t.tv_nsec;
+        tdll = tll - t0ll;
+        frames = bounce->frames ?: 1;
+        printf("NS since frame 2 = %llu , %llu frames = %llu / frame\n",
+               tdll, frames, tdll / frames);
+#endif
+        if (bounce->autobounce) elm_exit();
+     }
+   return EINA_TRUE;
+}
+
+static void
+_scroll2_del_cb(void *data, Evas *e EINA_UNUSED,
+                Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+   Bounce *bounce = data;
+
+#ifdef CLOCK_PROCESS_CPUTIME_ID
+   evas_event_callback_del_full(evas_object_evas_get(bounce->scroller),
+                                EVAS_CALLBACK_RENDER_FLUSH_POST,
+                                _bounce_cb_frame, bounce);
+#endif
+
+   ecore_timer_del(bounce->timer);
+   free(bounce);
+}
+
 void
 test_scroller2(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void 
*event_info EINA_UNUSED)
 {
    Evas_Object *win, *bt, *bx, *bx2, *sc, *tb, *tb2, *rc;
+   Bounce *bounce;
    int i, j;
 
+   bounce = calloc(1, sizeof(Bounce));
+
    win = elm_win_util_standard_add("scroller2", "Scroller 2");
    elm_win_autodel_set(win, EINA_TRUE);
 
@@ -485,6 +573,8 @@ test_scroller2(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *event
         evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0.5);
         elm_box_pack_end(bx, bt);
         evas_object_show(bt);
+
+        if (i == 0) bounce->it1 = bt;
      }
    /* } */
 
@@ -570,6 +660,8 @@ test_scroller2(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *event
         evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0.5);
         elm_box_pack_end(bx, bt);
         evas_object_show(bt);
+
+        if (i == 23) bounce->it2 = bt;
      }
 
    sc = elm_scroller_add(win);
@@ -580,8 +672,20 @@ test_scroller2(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *event
    evas_object_show(bx);
    evas_object_show(sc);
 
+   bounce->scroller = sc;
+
    evas_object_resize(win, 320, 480);
    evas_object_show(win);
+
+   evas_object_event_callback_add(win, EVAS_CALLBACK_FREE, _scroll2_del_cb, 
bounce);
+
+   if (getenv("ELM_TEST_AUTOBOUNCE"))
+     {
+        bounce->autobounce = 1;
+        bounce->bounce_max = atoi(getenv("ELM_TEST_AUTOBOUNCE"));
+        bounce->timer = ecore_timer_add(0.5, _bounce_cb, bounce);
+        _bounce_cb(bounce);
+     }
 }
 
 static Ecore_Timer *_timer = NULL;

-- 


Reply via email to