[Title] remove malloc/free at touch device
authorgiwoong.kim <giwoong.kim@samsung.com>
Wed, 28 Mar 2012 08:33:03 +0000 (17:33 +0900)
committergiwoong.kim <giwoong.kim@samsung.com>
Wed, 28 Mar 2012 08:33:03 +0000 (17:33 +0900)
[Type]
[Module] Emulator
[Priority]
[Jira#]
[Redmine#]
[Problem]
[Cause]
[Solution]
[TestCase]

tizen/src/emul_state.c
tizen/src/hw/maru_touchscreen.c
tizen/src/skin/maruskin_operation.c

index 1007a0642ef94e892917a599d4aaa81e809075e2..326ffcdd8e2687e78441cd7579884ffe95874d14 100644 (file)
@@ -144,9 +144,9 @@ int get_host_lock_key_state(int key)
 
 
     if (key == HOST_CAPSLOCK_KEY) {
-        return (state & 0x01) != NULL;
+        return (state & 0x01) != 0;
     } else if (key == HOST_NUMLOCK_KEY) {
-        return (state & 0x02) != NULL;
+        return (state & 0x02) != 0;
     }
 
     return -1;
index 34b1756f37bc4b80f1baae774d53b10379f5dc91..d94fe50ee977ae90e9ae7a01a1f16248cf11411d 100644 (file)
 MULTI_DEBUG_CHANNEL(qemu, touchscreen);
 
 
-#define MAX_TOUCH_EVENT_CNT  256
+#define MAX_TOUCH_EVENT_CNT  128
+
+static pthread_mutex_t event_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 static QTAILQ_HEAD(, TouchEventEntry) events_queue =
     QTAILQ_HEAD_INITIALIZER(events_queue);
 
-static pthread_mutex_t event_mutex = PTHREAD_MUTEX_INITIALIZER;
-static int event_cnt = 0;
+static unsigned int event_cnt = 0;
+static unsigned int _processed_buf_cnt = 0;
+static TouchEventEntry _event_buf[MAX_TOUCH_EVENT_CNT];
 
 static void usb_touchscreen_event(void *opaque, int x, int y, int z, int buttons_state)
 {
     TouchEventEntry *te;
     USBTouchscreenState *s = opaque;
 
-    te = g_malloc0(sizeof(TouchEventEntry));
-    te->queue_packet.x = x; //(x * TOUCHSCREEN_RESOLUTION_X / 0x7FFF);
-    te->queue_packet.y = y; //(y * TOUCHSCREEN_RESOLUTION_Y / 0x7FFF);
-    te->queue_packet.z = z;
-    te->queue_packet.state = buttons_state;
-
     pthread_mutex_lock(&event_mutex);
-    if (event_cnt > MAX_TOUCH_EVENT_CNT) {
+    if (event_cnt >= MAX_TOUCH_EVENT_CNT) {
         pthread_mutex_unlock(&event_mutex);
         INFO("full touch event queue, lose event\n", event_cnt);
         return;
     }
+
+    //using prepared memory
+    te = &(_event_buf[_processed_buf_cnt % MAX_TOUCH_EVENT_CNT]);
+    _processed_buf_cnt++;
+
+    /* mouse event is copied into the packet */
     te->index = ++event_cnt;
+    te->queue_packet.x = x; //(x * TOUCHSCREEN_RESOLUTION_X / 0x7FFF);
+    te->queue_packet.y = y; //(y * TOUCHSCREEN_RESOLUTION_Y / 0x7FFF);
+    te->queue_packet.z = z;
+    te->queue_packet.state = buttons_state;
 
     QTAILQ_INSERT_TAIL(&events_queue, te, node);
     s->changed = 1;
-
     pthread_mutex_unlock(&event_mutex);
 
     TRACE("touch event (%d) : x=%d, y=%d, z=%d, state=%d\n", te->index, x, y, z, buttons_state);
@@ -117,8 +123,9 @@ static void usb_touchscreen_handle_reset(USBDevice *dev)
     s->buttons_state = 0;
 
     event_cnt = 0;
+    _processed_buf_cnt = 0;
 
-     pthread_mutex_unlock(&event_mutex);
+    pthread_mutex_unlock(&event_mutex);
 }
 
 static int usb_touchscreen_handle_control(USBDevice *dev, USBPacket *p,
@@ -157,8 +164,6 @@ static int usb_touchscreen_handle_data(USBDevice *dev, USBPacket *p)
                     TRACE("processed touch event (%d) : x=%d, y=%d, z=%d, state=%d\n",
                         te->index, s->dx, s->dy, s->dz, s->buttons_state);
 
-                    g_free(te);
-
                     if (QTAILQ_EMPTY(&events_queue)) {
                         s->changed = 0;
                         TRACE("processed all touch events (%d)\n", event_cnt);
index 2992247e9ec27a3e114da941e6f3521e4f2cd2e2..68b18cb51da61f7714f6840e7fa58522624958e1 100644 (file)
@@ -44,6 +44,7 @@
 
 MULTI_DEBUG_CHANNEL(qemu, skin_operation);
 
+
 #define RESUME_KEY_SEND_INTERVAL 500 // milli-seconds
 #define CLOSE_POWER_KEY_INTERVAL 1200 // milli-seconds
 
@@ -72,9 +73,9 @@ void do_mouse_event( int event_type, int x, int y, int z )
     }
 
 #ifdef _WIN32
-        Sleep(1);
+    Sleep(1);
 #else
-        usleep(1000);
+    usleep(1000);
 #endif
 }