[Title] thread page
authoryeongtaik.byeon <yeongtaik.byeon@samsung.com>
Thu, 29 Nov 2012 16:08:39 +0000 (01:08 +0900)
committeryeongtaik.byeon <yeongtaik.byeon@samsung.com>
Thu, 29 Nov 2012 16:08:39 +0000 (01:08 +0900)
[Desc.] sync chart added & design updateed
[Issue] redmine #5322 #7167

27 files changed:
org.tizen.dynamicanalyzer.widgets/Images/timeline_left_bg_normal.png [new file with mode: 0644]
org.tizen.dynamicanalyzer.widgets/Images/timeline_left_bg_selected.png [new file with mode: 0644]
org.tizen.dynamicanalyzer.widgets/Images/timeline_left_child_bg_normal.png [new file with mode: 0644]
org.tizen.dynamicanalyzer.widgets/Images/timeline_left_child_bg_selected.png [new file with mode: 0644]
org.tizen.dynamicanalyzer.widgets/Images/timeline_right_child_bg_normal.png [new file with mode: 0644]
org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chartBoard/DACustomChartBoardItemCell.java
org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/helper/ColorResources.java
org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/helper/ImageResources.java
org.tizen.dynamicanalyzer.workbench/dynamic-analyzer/xml/synchronization.logc [new file with mode: 0644]
org.tizen.dynamicanalyzer.workbench/dynamic-analyzer/xml/thread.logc
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/logparser/LogCenterConstants.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/ThreadPageLabels.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/ThreadPageLabels.properties
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/resources/ImageResources.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/basechart/table/ThreadAPIListTable.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadAPIListView.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadDetailInfoView.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadPage.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadPageData.java [new file with mode: 0644]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadPageDataEvent.java [new file with mode: 0644]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadPageSyncData.java [new file with mode: 0644]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadPageSyncDataEvent.java [new file with mode: 0644]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadPageThreadData.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadPageThreadDataEvent.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadPageThreadDataManager.java
org.tizen.dynamicanalyzer/theme/black/img/timeline_right_child_bg_normal.png [new file with mode: 0644]
org.tizen.dynamicanalyzer/theme/white/img/timeline_right_child_bg_normal.png [new file with mode: 0644]

diff --git a/org.tizen.dynamicanalyzer.widgets/Images/timeline_left_bg_normal.png b/org.tizen.dynamicanalyzer.widgets/Images/timeline_left_bg_normal.png
new file mode 100644 (file)
index 0000000..76b6ccb
Binary files /dev/null and b/org.tizen.dynamicanalyzer.widgets/Images/timeline_left_bg_normal.png differ
diff --git a/org.tizen.dynamicanalyzer.widgets/Images/timeline_left_bg_selected.png b/org.tizen.dynamicanalyzer.widgets/Images/timeline_left_bg_selected.png
new file mode 100644 (file)
index 0000000..cdc03fe
Binary files /dev/null and b/org.tizen.dynamicanalyzer.widgets/Images/timeline_left_bg_selected.png differ
diff --git a/org.tizen.dynamicanalyzer.widgets/Images/timeline_left_child_bg_normal.png b/org.tizen.dynamicanalyzer.widgets/Images/timeline_left_child_bg_normal.png
new file mode 100644 (file)
index 0000000..cd6d12a
Binary files /dev/null and b/org.tizen.dynamicanalyzer.widgets/Images/timeline_left_child_bg_normal.png differ
diff --git a/org.tizen.dynamicanalyzer.widgets/Images/timeline_left_child_bg_selected.png b/org.tizen.dynamicanalyzer.widgets/Images/timeline_left_child_bg_selected.png
new file mode 100644 (file)
index 0000000..4ccd59d
Binary files /dev/null and b/org.tizen.dynamicanalyzer.widgets/Images/timeline_left_child_bg_selected.png differ
diff --git a/org.tizen.dynamicanalyzer.widgets/Images/timeline_right_child_bg_normal.png b/org.tizen.dynamicanalyzer.widgets/Images/timeline_right_child_bg_normal.png
new file mode 100644 (file)
index 0000000..b16ca51
Binary files /dev/null and b/org.tizen.dynamicanalyzer.widgets/Images/timeline_right_child_bg_normal.png differ
index 06154a2..6e01498 100644 (file)
@@ -81,26 +81,18 @@ class DACustomChartBoardItemCell extends Composite {
                });
 
                nameCell = new Canvas(this, SWT.NONE);
+               if (parent.getDepth() == 0) {
+                       nameCell.setBackgroundImage(ImageResources.CHART_NAME_BG_NORMAL);
+               } else {
+                       nameCell.setBackgroundImage(ImageResources.CHART_NAME_CHILD_BG_NORMAL);
+               }
 
                nameCell.addPaintListener(new PaintListener() {
 
                        @Override
                        public void paintControl(PaintEvent e) {
                                Rectangle rect = ((Canvas) (e.widget)).getClientArea();
-                               if (parent.getDepth() == 0) {
-                                       if (false == isSelectCell()) {
-                                               e.gc.setForeground(ColorResources.CHART_NAME_BACK_START); // FIXME
-                                               e.gc.setBackground(ColorResources.CHART_NAME_BACK_END); // FIXME
-                                       } else {
-                                               e.gc.setForeground(ColorResources.CHART_NAME_SELECT_BACK_START); // FIXME
-                                               e.gc.setBackground(ColorResources.CHART_NAME_SELECT_BACK_END); // FIXME
-                                       }
-                               } else {
-                                       e.gc.setForeground(ColorResources.CHART_NAME_CHILD_BACK); // FIXME
-                                       e.gc.setBackground(ColorResources.CHART_NAME_CHILD_BACK);
-                               }
-                               e.gc.fillGradientRectangle(rect.x, rect.y, rect.width,
-                                               rect.height, true);
+                               
                                e.gc.setForeground(ColorResources.BLACK);
                                e.gc.setFont(FontResources.CHART_ITEM_NAME_FONT);
                                drawNameString(e.gc, parent.getItemName(), rect.width / 2,
@@ -161,8 +153,6 @@ class DACustomChartBoardItemCell extends Composite {
                                ImageResources.TREE_FOLD, ImageResources.TREE_FOLD,
                                ImageResources.TREE_FOLD, null, ImageResources.TREE_OPEN,
                                ImageResources.TREE_OPEN);
-               childExpandButton
-                               .setBackground(ColorResources.CHART_BOARD_ITEM_NAME_FOLD_BG);
                Rectangle rt = nameCell.getClientArea();
                childExpandButton.setBounds(rt.x + DEFAULT_TOGGLE_BUTTON_SIZE
                                - DEFAULT_TOGGLE_BUTTON_MARGIN, rt.height / 2
@@ -174,17 +164,13 @@ class DACustomChartBoardItemCell extends Composite {
                                        @Override
                                        public void handleClickEvent(DACustomButton button) {
                                                if (true == childExpandButton.isToggled()) {
-                                                       childExpandButton.setImages(
-                                                                       ImageResources.TREE_FOLD,
-                                                                       ImageResources.TREE_OPEN,
-                                                                       ImageResources.TREE_OPEN, null);
+                                                       parent.callbackSelect();
                                                        parent.callbackUnFold();
+                                                       nameCell.redraw();
                                                } else {
-                                                       childExpandButton.setImages(
-                                                                       ImageResources.TREE_FOLD,
-                                                                       ImageResources.TREE_FOLD,
-                                                                       ImageResources.TREE_FOLD, null);
+                                                       parent.callbackSelect();
                                                        parent.callbackFold();
+                                                       nameCell.redraw();
                                                }
                                        }
                                });
@@ -199,14 +185,14 @@ class DACustomChartBoardItemCell extends Composite {
                        return;
                }
                Point allp = gc.textExtent(name, SWT.DRAW_DELIMITER);
-               
+
                String[] temp = name.split("\n");
                int lineLength = temp.length;
-               Point[] p = new Point[lineLength]; 
-               
+               Point[] p = new Point[lineLength];
+
                int startY = pixcelY - allp.y / 2;
-               
-               for(int i=0; i<lineLength; i++){
+
+               for (int i = 0; i < lineLength; i++) {
                        p[i] = gc.textExtent(temp[i]);
                        gc.drawText(temp[i], pixcelX - p[i].x / 2, startY, true);
                        startY += p[i].y;
@@ -219,6 +205,19 @@ class DACustomChartBoardItemCell extends Composite {
 
        public void setSelectCell(boolean selectCell) {
                this.selectCell = selectCell;
+               if (true == selectCell) {
+                       if (parent.getDepth() == 0) {
+                               nameCell.setBackgroundImage(ImageResources.CHART_NAME_BG_SELECT);
+                       } else {
+                               nameCell.setBackgroundImage(ImageResources.CHART_NAME_CHILD_BG_SELECT);
+                       }
+               } else {
+                       if (parent.getDepth() == 0) {
+                               nameCell.setBackgroundImage(ImageResources.CHART_NAME_BG_NORMAL);
+                       } else {
+                               nameCell.setBackgroundImage(ImageResources.CHART_NAME_CHILD_BG_NORMAL);
+                       }
+               }
                nameCell.redraw();
        }
 }
index da3e380..e608bb0 100644 (file)
@@ -68,8 +68,6 @@ public class ColorResources {
                        "chart_name_back_select_start", new RGB(180, 242, 254)); //$NON-NLS-1$\r
        public static Color CHART_NAME_SELECT_BACK_END = getColor(\r
                        "chart_name_back_select_end", new RGB(56, 178, 208)); //$NON-NLS-1$\r
-       public static Color CHART_NAME_CHILD_BACK = getColor(\r
-                       "chart_name_child_back", new RGB(103, 103, 103)); //$NON-NLS-1$\r
 \r
        public static Color UI_EVENT_CHART_SEPERATE_LINE = getColor(\r
                        "UI_event_chart_seperate_line", new RGB(189, 207, 213)); //$NON-NLS-1$\r
index f7c0496..ffa3ef1 100644 (file)
@@ -71,6 +71,10 @@ public class ImageResources {
        /* chart */
        public static final Image CHART_EVENT_CALLEE_ARW = getPngImage("event_callee_arw"); //$NON-NLS-1$
        public static final Image CHART_BG_SELECT = getPngImage("timeline_right_bg_selected"); //$NON-NLS-1$
+       public static final Image CHART_NAME_BG_NORMAL = getPngImage("timeline_left_bg_normal"); //$NON-NLS-1$
+       public static final Image CHART_NAME_BG_SELECT = getPngImage("timeline_left_bg_selected"); //$NON-NLS-1$
+       public static final Image CHART_NAME_CHILD_BG_NORMAL = getPngImage("timeline_left_child_bg_normal"); //$NON-NLS-1$
+       public static final Image CHART_NAME_CHILD_BG_SELECT = getPngImage("timeline_left_child_bg_selected"); //$NON-NLS-1$
 
        /*** scale ***/
        public static final Image SCALE_CONTROL_MINUS = getPngImage("scale_control_minus"); //$NON-NLS-1$
diff --git a/org.tizen.dynamicanalyzer.workbench/dynamic-analyzer/xml/synchronization.logc b/org.tizen.dynamicanalyzer.workbench/dynamic-analyzer/xml/synchronization.logc
new file mode 100644 (file)
index 0000000..3f4e7fd
--- /dev/null
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<BaseLogCenter xmlns="org.tizen.dynamicanalyzer">
+    <id>14</id>
+    <name>synchronization</name>
+    <totalColumnCount>17</totalColumnCount>
+    <customColumn>false</customColumn>
+    
+    <ColumnName>Rid</ColumnName>
+    <ColumnName>ID</ColumnName>
+    <ColumnName>SeqNumber</ColumnName>
+    <ColumnName>APIName</ColumnName>
+    <ColumnName>Time</ColumnName>
+
+    <ColumnName>Pid</ColumnName>
+    <ColumnName>Tid</ColumnName>
+    <ColumnName>InputParam</ColumnName>
+    <ColumnName>Return</ColumnName>
+    <ColumnName>PCAddr</ColumnName>
+        <!-- 10 -->
+    <ColumnName>Error</ColumnName>
+    <ColumnName>InternalCall</ColumnName>
+    <ColumnName>CallerPCAddr</ColumnName>
+    <ColumnName>SyncVal</ColumnName>
+    <ColumnName>SyncType</ColumnName>
+    
+    <ColumnName>ApiType</ColumnName>
+    <ColumnName>Reserved</ColumnName>
+
+    <type>INTEGER</type>
+    <type>INTEGER</type>
+    <type>INTEGER PRIMARY KEY NOT NULL</type>
+    <type>TEXT</type>
+    <type>INTEGER</type>
+
+    <type>INTEGER</type>
+    <type>INTEGER</type>
+    <type>TEXT</type>
+    <type>TEXT</type>
+    <type>TEXT</type>
+
+    <type>INTEGER</type>
+    <type>INTEGER</type>
+    <type>INTEGER</type>
+    <type>INTEGER</type>
+    <type>INTEGER</type>
+    
+    <type>INTEGER</type>
+    <type>TEXT</type>
+    
+    <ColumnSize>100</ColumnSize>
+    <ColumnSize>0</ColumnSize>
+    <ColumnSize>0</ColumnSize>
+    <ColumnSize>0</ColumnSize>
+    <ColumnSize>0</ColumnSize>
+    
+    
+    <ColumnOrder>0</ColumnOrder>
+    <ColumnOrder>1</ColumnOrder>
+    <ColumnOrder>2</ColumnOrder>
+    <ColumnOrder>4</ColumnOrder>
+    <ColumnOrder>3</ColumnOrder>
+    
+    <ColumnOrder>13</ColumnOrder>
+    <ColumnOrder>14</ColumnOrder>
+    <ColumnOrder>12</ColumnOrder>
+    <ColumnOrder>11</ColumnOrder>
+    <ColumnOrder>9</ColumnOrder>
+    
+    <ColumnOrder>7</ColumnOrder>
+    <ColumnOrder>8</ColumnOrder>
+    <ColumnOrder>10</ColumnOrder>
+    <ColumnOrder>5</ColumnOrder>
+    <ColumnOrder>6</ColumnOrder>
+    
+    <ColumnOrder>15</ColumnOrder>
+    <ColumnOrder>16</ColumnOrder>
+    
+    
+    <ColumnVisibility>false</ColumnVisibility>
+    <ColumnVisibility>false</ColumnVisibility>
+    <ColumnVisibility>true</ColumnVisibility>
+    <ColumnVisibility>true</ColumnVisibility>
+    <ColumnVisibility>true</ColumnVisibility>
+    
+    <ColumnVisibility>true</ColumnVisibility>
+    <ColumnVisibility>true</ColumnVisibility>
+    <ColumnVisibility>true</ColumnVisibility>
+    <ColumnVisibility>true</ColumnVisibility>
+    <ColumnVisibility>false</ColumnVisibility>
+    
+    <ColumnVisibility>true</ColumnVisibility>
+    <ColumnVisibility>true</ColumnVisibility>
+    <ColumnVisibility>true</ColumnVisibility>
+    <ColumnVisibility>false</ColumnVisibility>
+    <ColumnVisibility>false</ColumnVisibility>
+    
+    <ColumnVisibility>false</ColumnVisibility>
+    <ColumnVisibility>false</ColumnVisibility>
+        
+    <TableColumnName>Row Id</TableColumnName>
+    <TableColumnName>ID</TableColumnName>
+    <TableColumnName>#</TableColumnName>
+    <TableColumnName>API name</TableColumnName>
+    <TableColumnName>Time</TableColumnName>
+    
+    <TableColumnName>Process id</TableColumnName>
+    <TableColumnName>Thread id</TableColumnName>
+    <TableColumnName>Input parm</TableColumnName>
+    <TableColumnName>Return</TableColumnName>
+    <TableColumnName>PC Addr</TableColumnName>
+    
+    <TableColumnName>Errno</TableColumnName>
+    <TableColumnName>Internal Call</TableColumnName>
+    <TableColumnName>Caller PC Address</TableColumnName>
+    <TableColumnName>Sync val</TableColumnName>
+    <TableColumnName>Sync type</TableColumnName>
+    
+    <TableColumnName>Api type</TableColumnName>
+    <TableColumnName>Reserved</TableColumnName>
+</BaseLogCenter>
\ No newline at end of file
index 0dde91f..460037b 100644 (file)
@@ -77,7 +77,6 @@
     <ColumnOrder>15</ColumnOrder>
     <ColumnOrder>16</ColumnOrder>
     <ColumnOrder>17</ColumnOrder>
-    <ColumnOrder>18</ColumnOrder>
     
     
     <ColumnVisibility>false</ColumnVisibility>
index 454c6e7..84f94de 100644 (file)
@@ -42,6 +42,7 @@ public class LogCenterConstants {
        public static final int LOG_THREAD = 12;
        // public static final int LOG_SYSTEM = 12;
        public static final int LOG_CUSTOM_CHART = 13;
+       public static final int LOG_SYNC = 14;
 
        public static final int TYPE_CALLSTACK = 99;
 
@@ -193,6 +194,31 @@ public class LogCenterConstants {
        public static final int CUSTOM_CHART_COLOR = 15;
        public static final int CUSTOM_CHART_VALUE = 16;
        public static final int CUSTOM_CHART_RESERVED = 17;
+       
+       /* synchronization log : 14 */
+       public static final int SYNC_VAL_INDEX = 12;
+       public static final int SYNC_TYPE_INDEX = 13;
+       public static final int SYNC_API_TYPE_INDEX = 14;
+
+       public static final int SYNC_TYPE_OSP_MUTEX = 0;
+       public static final int SYNC_TYPE_OSP_MONITOR = 1;
+       public static final int SYNC_TYPE_OSP_SEMAPHORE = 2;
+       public static final int SYNC_TYPE_PTHREAD_MUTEX = 3;
+       public static final int SYNC_TYPE_PTHREAD_COND_VARIABLE = 4;
+       public static final int SYNC_TYPE_PTHREAD_RWLOCK = 5;
+       public static final int SYNC_TYPE_PTHREAD_SPINLOCK = 6;
+       public static final int SYNC_TYPE_PTHREAD_BARRIER = 7;
+       
+       public static final int SYNC_API_TYPE_NEW = 0;
+       public static final int SYNC_API_TYPE_ACQUIRE_WAIT_START = 1;
+       public static final int SYNC_API_TYPE_ACQUIRE_WAIT_END = 2;
+       public static final int SYNC_API_TYPE_RELEASE = 3;
+       public static final int SYNC_API_TYPE_TRY_ACQUIRE = 4;
+       public static final int SYNC_API_TYPE_COND_WAIT_START = 5;
+       public static final int SYNC_API_TYPE_COND_WAIT_END = 6;
+       public static final int SYNC_API_TYPE_NOTIFY = 7;
+       public static final int SYNC_API_TYPE_NOTIFY_ALL = 8;
+       public static final int SYNC_API_TYPE_OTHER = 9;
 
        /* Common Column Size */
        public static final int COMMON_COLUMN_SIZE_RID = 80;
index cf201f7..3d3995f 100644 (file)
@@ -42,10 +42,21 @@ public class ThreadPageLabels extends NLS {
        public static String THREAD_ITEM_TYPE_OSP;
        public static String THREAD_ITEM_TYPE_PTHREAD;
        
+       public static String SYNC_TYPE_OSP_MUTEX;
+       public static String SYNC_TYPE_OSP_MONITOR;
+       public static String SYNC_TYPE_OSP_SEMAPHORE;
+       public static String SYNC_TYPE_PTHREAD_MUTEX;
+       public static String SYNC_TYPE_PTHREAD_COND_VARIABLE;
+       public static String SYNC_TYPE_PTHREAD_RWLOCK;
+       public static String SYNC_TYPE_PTHREAD_SPINLOCK;
+       public static String SYNC_TYPE_PTHREAD_BARRIER;
+       
        public static String THREAD_API_JOIN;
        
        public static String THREAD_CHART_NAME_PREFIX;
        public static String THREAD_CHART_NAME_POSTFIX;
+       
+       public static String THREAD_SYNC_CHART_SERIES_STATE;
 
        /* Thread API List view */
        public static String THREAD_API_LIST_VEIW_TITLE;
index 1c4df4a..53afaa5 100644 (file)
@@ -10,11 +10,22 @@ THREAD_ITEM_TYPE_MAIN=main
 THREAD_ITEM_TYPE_OSP=OSP
 THREAD_ITEM_TYPE_PTHREAD=pthread
 
+SYNC_TYPE_OSP_MUTEX=OSP mutex
+SYNC_TYPE_OSP_MONITOR=OSP monitor
+SYNC_TYPE_OSP_SEMAPHORE=OSP semaphore
+SYNC_TYPE_PTHREAD_MUTEX=pthread mutex
+SYNC_TYPE_PTHREAD_COND_VARIABLE=pthread \ncond variable
+SYNC_TYPE_PTHREAD_RWLOCK=pthread rwlock
+SYNC_TYPE_PTHREAD_SPINLOCK=pthread spinlock
+SYNC_TYPE_PTHREAD_BARRIER=pthread barrier
+
 THREAD_API_JOIN=Thread::Join
 
 THREAD_CHART_NAME_PREFIX=\n(
 THREAD_CHART_NAME_POSTFIX=)
 
+THREAD_SYNC_CHART_SERIES_STATE=STATE
+
 THREAD_API_LIST_VEIW_TITLE=Thread API List
 THREAD_API_LIST_VIEW_INDEX=#
 THREAD_API_LIST_VIEW_TIME=Time
@@ -25,4 +36,4 @@ THREAD_API_LIST_VIEW_RETURN=Return value
 THREAD_API_LIST_VIEW_ERRNO=Error Code
 
 THREAD_DETAILS_TID=Thread ID : 
-THREAD_DETAILS_TTYPE=Thread type : 
\ No newline at end of file
+THREAD_DETAILS_TTYPE=Type : 
\ No newline at end of file
index 44cdbd5..3a10db4 100644 (file)
@@ -197,6 +197,7 @@ public class ImageResources {
        public static final Image ADD_ITEMS_BAR = getPngImage("AddItems"); //$NON-NLS-1$\r
        public static final Image MIN_ITEMS = getPngImage("MinItems"); //$NON-NLS-1$\r
        public static final Image BG_GRADIENT = getPngImage("timeline_right_bg_normal"); //$NON-NLS-1$\r
+       public static final Image BG_CHILD_GRADIENT = getPngImage("timeline_right_child_bg_normal"); //$NON-NLS-1$\r
        public static final Image TIMLINE_FULL = getPngImage("timeline_left_full_nor"); //$NON-NLS-1$\r
        public static final Image TIMLINE_RESTORE = getPngImage("timeline_left_restore_nor"); //$NON-NLS-1$\r
        public static final Image TIMLINE_SIZE_MIN_NORMAL = getPngImage("time_line_size_min_normal"); //$NON-NLS-1$\r
index cac6c3d..9ab14cd 100644 (file)
@@ -38,8 +38,8 @@ import org.tizen.dynamicanalyzer.error.ErrorCodeManager;
 import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
 import org.tizen.dynamicanalyzer.model.TableInput;
 import org.tizen.dynamicanalyzer.ui.thread.ThreadAPIListView;
-import org.tizen.dynamicanalyzer.ui.thread.ThreadPageThreadData;
-import org.tizen.dynamicanalyzer.ui.thread.ThreadPageThreadDataEvent;
+import org.tizen.dynamicanalyzer.ui.thread.ThreadPageData;
+import org.tizen.dynamicanalyzer.ui.thread.ThreadPageDataEvent;
 import org.tizen.dynamicanalyzer.ui.widgets.table.DATableComposite;
 import org.tizen.dynamicanalyzer.ui.widgets.table.DATableDataFormat;
 import org.tizen.dynamicanalyzer.utils.Formatter;
@@ -73,7 +73,7 @@ public class ThreadAPIListTable extends DATableComposite {
                if (!(view instanceof ThreadAPIListView)) {
                        return null;
                }
-               ThreadPageThreadData data = view.getPageData();
+               ThreadPageData data = view.getPageData();
 
                if (null == data) {
                        return null;
@@ -81,9 +81,9 @@ public class ThreadAPIListTable extends DATableComposite {
 
                List<TableInput> input = new ArrayList<TableInput>();
 
-               List<ThreadPageThreadDataEvent> contents = data.getContents();
+               List<ThreadPageDataEvent> contents = data.getContents();
 
-               ThreadPageThreadDataEvent content;
+               ThreadPageDataEvent content;
                for (int i = 0; i < contents.size(); i++) {
                        content = contents.get(i);
                        List<String> contentTemp = content.getContents();
index bd5f2c8..d71a437 100644 (file)
@@ -43,7 +43,7 @@ import org.tizen.dynamicanalyzer.ui.widgets.table.TableComparator;
 public class ThreadAPIListView extends DAView {
 
        public static final String ID = ThreadAPIListView.class.getName();
-       private ThreadPageThreadData data;
+       private ThreadPageData data;
        int[] innerMaxWeight = { 0, 100 };
        int[] outerMaxWeight = { 100, 0 };
 
@@ -108,8 +108,8 @@ public class ThreadAPIListView extends DAView {
 
        @Override
        public void updateView(DASelectionData data) {
-               this.data = (ThreadPageThreadData) data.getData();
-               if (!(this.data instanceof ThreadPageThreadData)) {
+               this.data = (ThreadPageData) data.getData();
+               if (!(this.data instanceof ThreadPageData)) {
                        return;
                }
                tableComp.getTable().removeAll();
@@ -127,7 +127,7 @@ public class ThreadAPIListView extends DAView {
                data = null;
        }
 
-       public ThreadPageThreadData getPageData() {
+       public ThreadPageData getPageData() {
                return data;
        }
 }
index d154dc0..e3b78f4 100644 (file)
@@ -108,8 +108,12 @@ public class ThreadDetailInfoView extends DAView {
 
        @Override
        public void updateView(DASelectionData data) {
-               ThreadPageThreadData item = (ThreadPageThreadData) data.getData();
-               if (!(item instanceof ThreadPageThreadData)) {
+               String id = data.getViewId();
+               if (!(id.equals(ThreadChartView.ID))) {
+                       return;
+               }
+               ThreadPageData item = (ThreadPageData) data.getData();
+               if (!(item instanceof ThreadPageData)) {
                        return;
                }
                select = true;
index f5ad5bf..1491e98 100644 (file)
@@ -52,8 +52,6 @@ public class ThreadPage extends DAPageComposite {
        SashForm leftForm;
        SashForm rightForm;
 
-       // ThreadPageDataManager tManager = ThreadPageDataManager.getInstance();
-
        public ThreadPage(Composite parent, int style) {
                super(parent, style);
                name = AnalyzerLabels.COOLBAR_AREA_THREAD;
@@ -80,7 +78,8 @@ public class ThreadPage extends DAPageComposite {
                {
                        SnapshotView snapshotView = new SnapshotView(
                                        tabView.getContentComposite(), SWT.NONE, false);
-                       snapshotView.setObservingViews(new String[] { ThreadAPIListView.ID });
+                       snapshotView
+                                       .setObservingViews(new String[] { ThreadAPIListView.ID });
                        tabView.addView(snapshotView);
 
                        CallstackView callstack = new CallstackView(
@@ -121,8 +120,4 @@ public class ThreadPage extends DAPageComposite {
                        }
                });
        }
-
-       // public void updateLog(LogPackage logPack) {
-       // tManager.parsePageData(logPack);
-       // }
 }
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadPageData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadPageData.java
new file mode 100644 (file)
index 0000000..4ab0073
--- /dev/null
@@ -0,0 +1,104 @@
+/*
+ *  Dynamic Analyzer
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: 
+ * yeongtaik byeon <yeongtaik.byeon@samsung.com>
+ * Juyoung Kim <j0.kim@samsung.com>
+ *
+ * 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.
+ * 
+ * Contributors:
+ * - S-Core Co., Ltd
+ * 
+ */
+package org.tizen.dynamicanalyzer.ui.thread;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.tizen.dynamicanalyzer.widgets.chart.DACustomChart;
+import org.tizen.dynamicanalyzer.widgets.chartBoard.DACustomChartBoardItem;
+
+public abstract class ThreadPageData {
+       private int tid;
+       private String type;
+       private String name;
+       protected DACustomChartBoardItem item;
+       protected List<ThreadPageDataEvent> contents = new ArrayList<ThreadPageDataEvent>();
+       protected List<ThreadPageDataEvent> contentsQueue = new ArrayList<ThreadPageDataEvent>();
+       protected DACustomChart chart;
+       protected boolean hasUpdate = false;
+
+       public ThreadPageData(String type, String name, int tid) {
+               setType(type);
+               setName(name);
+               setTid(tid);
+       }
+
+       public int getTid() {
+               return tid;
+       }
+
+       public void setTid(int tid) {
+               this.tid = tid;
+       }
+
+       public String getType() {
+               return type;
+       }
+
+       public void setType(String type) {
+               this.type = type;
+       }
+
+       public String getName() {
+               return name;
+       }
+
+       public void setName(String name) {
+               this.name = name;
+       }
+
+       public DACustomChartBoardItem getItem() {
+               return item;
+       }
+
+       public DACustomChart getChart() {
+               return chart;
+       }
+
+       public void setChart(DACustomChart chart) {
+               this.chart = chart;
+       }
+
+       protected void pushEvent(ThreadPageDataEvent event) {
+               contentsQueue.add(event);
+               hasUpdate = true;
+       }
+
+       public void setHasUpdate() {
+               hasUpdate = true;
+       }
+
+
+
+       public List<ThreadPageDataEvent> getContents() {
+               return contents;
+       }
+       protected abstract void checkUpdate();
+       public abstract void setItem(DACustomChartBoardItem item);
+
+       protected abstract int createChartItem(ThreadPageDataEvent event);
+}
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadPageDataEvent.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadPageDataEvent.java
new file mode 100644 (file)
index 0000000..9c30bd1
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ *  Dynamic Analyzer
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: 
+ * yeongtaik byeon <yeongtaik.byeon@samsung.com>
+ * Juyoung Kim <j0.kim@samsung.com>
+ *
+ * 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.
+ * 
+ * Contributors:
+ * - S-Core Co., Ltd
+ * 
+ */
+package org.tizen.dynamicanalyzer.ui.thread;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public abstract class ThreadPageDataEvent {
+       private List<String> contents;
+
+       public ThreadPageDataEvent(List<String> contents) {
+               setContents(contents);
+       }
+
+       public List<String> getContents() {
+               if (null == contents) {
+                       contents = new ArrayList<String>();
+               }
+               return contents;
+       }
+
+       public void setContents(List<String> contents) {
+               this.contents = contents;
+       }
+}
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadPageSyncData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadPageSyncData.java
new file mode 100644 (file)
index 0000000..79c4b93
--- /dev/null
@@ -0,0 +1,99 @@
+/*
+ *  Dynamic Analyzer
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: 
+ * yeongtaik byeon <yeongtaik.byeon@samsung.com>
+ * Juyoung Kim <j0.kim@samsung.com>
+ *
+ * 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.
+ * 
+ * Contributors:
+ * - S-Core Co., Ltd
+ * 
+ */
+package org.tizen.dynamicanalyzer.ui.thread;
+
+import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
+import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
+import org.tizen.dynamicanalyzer.widgets.chart.DACustomChartSeries;
+import org.tizen.dynamicanalyzer.widgets.chart.DACustomChartSeriesItem;
+import org.tizen.dynamicanalyzer.widgets.chartBoard.DACustomChartBoardItem;
+
+public class ThreadPageSyncData extends ThreadPageData {
+       private DACustomChartSeries stateSeries;
+
+       public ThreadPageSyncData(String type, String name, int tid) {
+               super(type, name, tid);
+       }
+
+       public void setItem(DACustomChartBoardItem item) {
+               this.item = item;
+               setChart(item.getChart());
+               stateSeries = chart
+                               .getSeries(ThreadPageLabels.THREAD_SYNC_CHART_SERIES_STATE);
+       }
+
+       private boolean isSyncApi(int apiType) {
+               switch (apiType) {
+               case LogCenterConstants.SYNC_API_TYPE_NEW:
+               case LogCenterConstants.SYNC_API_TYPE_ACQUIRE_WAIT_START:
+               case LogCenterConstants.SYNC_API_TYPE_RELEASE:
+               case LogCenterConstants.SYNC_API_TYPE_TRY_ACQUIRE:
+               case LogCenterConstants.SYNC_API_TYPE_COND_WAIT_START:
+               case LogCenterConstants.SYNC_API_TYPE_NOTIFY:
+               case LogCenterConstants.SYNC_API_TYPE_NOTIFY_ALL:
+               case LogCenterConstants.SYNC_API_TYPE_OTHER:
+                       return true;
+               case LogCenterConstants.SYNC_API_TYPE_ACQUIRE_WAIT_END:
+               case LogCenterConstants.SYNC_API_TYPE_COND_WAIT_END:
+                       return false;
+               default:
+                       return false;
+               }
+       }
+
+       protected void checkUpdate() {
+               if (false == hasUpdate) {
+                       return;
+               } else {
+                       hasUpdate = false;
+               }
+               int size = contentsQueue.size();
+               if (size > 0) {
+                       ThreadPageDataEvent event;
+                       for (int i = 0; i < size; i++) {
+                               event = contentsQueue.get(0);
+                               if (true == (isSyncApi(createChartItem(event)))) {
+                                       contents.add(event);
+                               }
+
+                               contentsQueue.remove(0);
+                       }
+                       chart.redraw();
+               }
+       }
+
+       protected int createChartItem(ThreadPageDataEvent event) {
+               DACustomChartSeriesItem seriesItem;
+               ThreadPageSyncDataEvent syncEvent = (ThreadPageSyncDataEvent) event;
+               if (!(syncEvent instanceof ThreadPageSyncDataEvent)) {
+                       System.out.println("error : createChartItem");
+                       return -1;
+               }
+               seriesItem = new DACustomChartSeriesItem(syncEvent.getTime(), 0);
+               stateSeries.addSeriesItem(seriesItem);
+               return syncEvent.getApiType();
+       }
+}
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadPageSyncDataEvent.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/thread/ThreadPageSyncDataEvent.java
new file mode 100644 (file)
index 0000000..5f55a2b
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+ *  Dynamic Analyzer
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: 
+ * yeongtaik byeon <yeongtaik.byeon@samsung.com>
+ * Juyoung Kim <j0.kim@samsung.com>
+ *
+ * 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.
+ * 
+ * Contributors:
+ * - S-Core Co., Ltd
+ * 
+ */
+package org.tizen.dynamicanalyzer.ui.thread;
+
+import java.util.List;
+
+public class ThreadPageSyncDataEvent extends ThreadPageDataEvent {
+       private String syncVal;
+       private int tid = -1;
+       private int type = -1;
+       private int apiType = -1;
+       private double time = -1;
+
+       public ThreadPageSyncDataEvent(String syncVal, int type, int apiType,
+                       double time, int tid, List<String> contents) {
+               super(contents);
+               setSyncVal(syncVal);
+               setType(type);
+               setApiType(apiType);
+               setTime(time);
+               setTid(tid);
+               setContents(contents);
+       }
+
+       public int getTid() {
+               return tid;
+       }
+
+       public void setTid(int tid) {
+               this.tid = tid;
+       }
+
+       public int getApiType() {
+               return apiType;
+       }
+
+       public void setApiType(int apiType) {
+               this.apiType = apiType;
+       }
+
+       public double getTime() {
+               return time;
+       }
+
+       public void setTime(double time) {
+               this.time = time;
+       }
+
+       public String getSyncVal() {
+               return syncVal;
+       }
+
+       public void setSyncVal(String syncVal) {
+               this.syncVal = syncVal;
+       }
+
+       public int getType() {
+               return type;
+       }
+
+       public void setType(int type) {
+               this.type = type;
+       }
+}
index fa32add..e3834c3 100644 (file)
@@ -31,75 +31,26 @@ import java.util.List;
 import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
 import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
 import org.tizen.dynamicanalyzer.resources.ColorResources;
-import org.tizen.dynamicanalyzer.widgets.chart.DACustomChart;
 import org.tizen.dynamicanalyzer.widgets.chart.DACustomChartSeries;
 import org.tizen.dynamicanalyzer.widgets.chart.DACustomChartSeriesItem;
 import org.tizen.dynamicanalyzer.widgets.chartBoard.DACustomChartBoardItem;
 
-public class ThreadPageThreadData {
-       private ThreadPageThreadDataManager manager;
-       private int tid;
-       private String type;
-       private String name;
-       private String address;
-       private List<ThreadPageThreadDataEvent> contents = new ArrayList<ThreadPageThreadDataEvent>();
-       private List<ThreadPageThreadDataEvent> contentsQueue = new ArrayList<ThreadPageThreadDataEvent>();
-       private DACustomChartBoardItem item;
-       private DACustomChart chart;
+public class ThreadPageThreadData extends ThreadPageData {
+       private List<ThreadPageSyncData> syncs = new ArrayList<ThreadPageSyncData>();
        private DACustomChartSeries loadSeries;
        private DACustomChartSeries eventSeries;
        private DACustomChartSeries apiSeries;
 
-       public ThreadPageThreadData(ThreadPageThreadDataManager manager,
-                       String type, int tid, String address) {
-               setManager(manager);
-               setType(type);
-               setName(String.valueOf(tid)+ThreadPageLabels.THREAD_CHART_NAME_PREFIX
-                               + type + ThreadPageLabels.THREAD_CHART_NAME_POSTFIX);
-               setTid(tid);
-               setAddress(address);
-       }
-
-       public ThreadPageThreadDataManager getManager() {
-               return manager;
-       }
-
-       private void setManager(ThreadPageThreadDataManager manager) {
-               this.manager = manager;
-       }
-
-       public int getTid() {
-               return tid;
-       }
-
-       private void setTid(int tid) {
-               this.tid = tid;
-       }
-
-       public String getAddress() {
-               return address;
-       }
-
-       public void setAddress(String address) {
-               this.address = address;
-       }
-
-       public String getName() {
-               return name;
-       }
-
-       public void setName(String name) {
-               this.name = name;
+       public ThreadPageThreadData(String type, int tid) {
+               super(type, String.valueOf(tid)
+                               + ThreadPageLabels.THREAD_CHART_NAME_PREFIX + type
+                               + ThreadPageLabels.THREAD_CHART_NAME_POSTFIX, tid);
        }
 
        public void addDataEvent(ThreadPageThreadDataEvent dataEvent) {
                contentsQueue.add(dataEvent);
        }
 
-       public DACustomChartBoardItem getItem() {
-               return item;
-       }
-
        public void setItem(DACustomChartBoardItem item) {
                this.item = item;
                chart = item.getChart();
@@ -109,19 +60,23 @@ public class ThreadPageThreadData {
                apiSeries = chart.getSeries(ThreadPageLabels.THREAD_CHART_SERIES_API);
        }
 
-       // private DACustomChartBoardItem
-       private int createChartItem(ThreadPageThreadDataEvent event) {
+       protected int createChartItem(ThreadPageDataEvent event) {
                int ret = -1;
+               ThreadPageThreadDataEvent threadEvent = (ThreadPageThreadDataEvent) event;
+               if (!(threadEvent instanceof ThreadPageThreadDataEvent)) {
+                       System.out.println("error : createChartItem");
+                       return ret;
+               }
                DACustomChartSeriesItem seriesItem;
-               switch (event.getEventType()) {
+               switch (threadEvent.getEventType()) {
                case ThreadPageThreadDataEvent.TYPE_LOAD:
                        ret = ThreadPageThreadDataEvent.TYPE_LOAD;
                        if (null == loadSeries) {
                                return ret;
                        }
 
-                       seriesItem = new DACustomChartSeriesItem(event.getTime(),
-                                       (double) event.getThreadType());
+                       seriesItem = new DACustomChartSeriesItem(threadEvent.getTime(),
+                                       (double) threadEvent.getThreadType());
 
                        loadSeries.addSeriesItem(seriesItem);
                        break;
@@ -131,28 +86,34 @@ public class ThreadPageThreadData {
                                return ret;
                        }
 
-                       int eventApiType = event.getApiType();
+                       int eventApiType = threadEvent.getApiType();
                        if (eventApiType == LogCenterConstants.THREAD_API_TYPE_INTERNAL_START) {
-                               seriesItem = new DACustomChartSeriesItem(event.getTime(), -1);
-                               seriesItem.setBarWidth(event.getCallerTid());
+                               seriesItem = new DACustomChartSeriesItem(threadEvent.getTime(),
+                                               -1);
+                               seriesItem.setBarWidth(threadEvent.getCallerTid());
                        } else if (eventApiType == LogCenterConstants.THREAD_API_TYPE_WAIT_END) {
-                               if (event.getContents().get(LogCenterConstants.APINAME_INDEX)
+                               if (threadEvent.getContents()
+                                               .get(LogCenterConstants.APINAME_INDEX)
                                                .equals(ThreadPageLabels.THREAD_API_JOIN)) {
-                                       seriesItem = new DACustomChartSeriesItem(event.getTime(),
-                                                       -1);
-                                       seriesItem.setBarWidth(event.getCallerTid());
+                                       seriesItem = new DACustomChartSeriesItem(
+                                                       threadEvent.getTime(), -1);
+                                       seriesItem.setBarWidth(threadEvent.getCallerTid());
                                } else {
-                                       seriesItem = new DACustomChartSeriesItem(event.getTime(), 0);
+                                       seriesItem = new DACustomChartSeriesItem(
+                                                       threadEvent.getTime(), 0);
                                }
                        } else if (eventApiType == LogCenterConstants.THREAD_API_TYPE_INTERNAL_STOP) {
-                               if (-1 != event.getCallerTid()) {
-                                       seriesItem = new DACustomChartSeriesItem(event.getTime(), 1);
-                                       seriesItem.setBarWidth(event.getCallerTid());
+                               if (-1 != threadEvent.getCallerTid()) {
+                                       seriesItem = new DACustomChartSeriesItem(
+                                                       threadEvent.getTime(), 1);
+                                       seriesItem.setBarWidth(threadEvent.getCallerTid());
                                } else {
-                                       seriesItem = new DACustomChartSeriesItem(event.getTime(), 0);
+                                       seriesItem = new DACustomChartSeriesItem(
+                                                       threadEvent.getTime(), 0);
                                }
                        } else {
-                               seriesItem = new DACustomChartSeriesItem(event.getTime(), 0);
+                               seriesItem = new DACustomChartSeriesItem(threadEvent.getTime(),
+                                               0);
                        }
 
                        eventSeries.addSeriesItem(seriesItem);
@@ -162,14 +123,15 @@ public class ThreadPageThreadData {
                        if (null == apiSeries) {
                                return ret;
                        }
-                       List<String> input = event.getContents();
+                       List<String> input = threadEvent.getContents();
                        long errno = Long.parseLong(input
                                        .get(LogCenterConstants.ERROR_INDEX));
                        if (0 == errno) {
-                               seriesItem = new DACustomChartSeriesItem(event.getTime(), 0);
+                               seriesItem = new DACustomChartSeriesItem(threadEvent.getTime(),
+                                               0);
                        } else {
-                               seriesItem = new DACustomChartSeriesItem(event.getTime(), 0,
-                                               ColorResources.RED);
+                               seriesItem = new DACustomChartSeriesItem(threadEvent.getTime(),
+                                               0, ColorResources.RED);
                        }
 
                        apiSeries.addSeriesItem(seriesItem);
@@ -177,47 +139,58 @@ public class ThreadPageThreadData {
                default:
                        return ret;
                }
-               event.setChartItem(seriesItem);
+               threadEvent.setChartItem(seriesItem);
                return ret;
        }
 
        protected void checkUpdate() {
+               if (false == hasUpdate) {
+                       return;
+               } else {
+                       hasUpdate = false;
+               }
+
                int size = contentsQueue.size();
                if (size > 0) {
+                       ThreadPageThreadDataEvent event;
                        for (int i = 0; i < size; i++) {
-                               ThreadPageThreadDataEvent event = contentsQueue.get(0);
-                               if (ThreadPageThreadDataEvent.TYPE_API == createChartItem(event)) {
-                                       contents.add(event);
-                               } else {
-                                       // do nothing
+                               event = (ThreadPageThreadDataEvent) contentsQueue.get(0);
+                               if ((event instanceof ThreadPageThreadDataEvent)) {
+                                       if (ThreadPageThreadDataEvent.TYPE_API == createChartItem(event)) {
+                                               contents.add(event);
+                                       } else {
+                                               // do nothing
+                                       }
                                }
                                contentsQueue.remove(0);
                        }
                        chart.redraw();
                }
-       }
-
-       public DACustomChart getChart() {
-               return chart;
-       }
-
-       public void setChart(DACustomChart chart) {
-               this.chart = chart;
-       }
-
-       protected void pushEvent(ThreadPageThreadDataEvent event) {
-               contentsQueue.add(event);
-       }
 
-       public List<ThreadPageThreadDataEvent> getContents() {
-               return contents;
+               size = syncs.size();
+               if (size > 0) {
+                       ThreadPageSyncData sync;
+                       for (int i = 0; i < size; i++) {
+                               sync = syncs.get(i);
+                               sync.checkUpdate();
+                       }
+               }
        }
 
-       public String getType() {
-               return type;
+       protected void pushSync(ThreadPageSyncData sync) {
+               syncs.add(sync);
+               hasUpdate = true;
        }
 
-       public void setType(String type) {
-               this.type = type;
+       protected ThreadPageSyncData findSyncData(String syncVal) {
+               int size = syncs.size();
+               ThreadPageSyncData sync;
+               for (int i = 0; i < size; i++) {
+                       sync = syncs.get(i);
+                       if (sync.getName().equals(syncVal)) {
+                               return sync;
+                       }
+               }
+               return null;
        }
 }
index d3ee744..923b650 100644 (file)
  */
 package org.tizen.dynamicanalyzer.ui.thread;
 
-import java.util.ArrayList;
 import java.util.List;
 
 import org.tizen.dynamicanalyzer.widgets.chart.DACustomChartSeriesItem;
 
-public class ThreadPageThreadDataEvent {
+public class ThreadPageThreadDataEvent extends ThreadPageDataEvent {
        public static final int TYPE_API = 0;
        public static final int TYPE_EVENT = 1;
        public static final int TYPE_LOAD = 2;
        private ThreadPageThreadData data;
-       private List<String> contents = new ArrayList<String>();
        private int eventType = -1;
        private int threadType = -1;
        private int apiType = -1;
@@ -45,16 +43,14 @@ public class ThreadPageThreadDataEvent {
        private String callID = null;
        private int callerTid = -1;
 
-       public ThreadPageThreadDataEvent(ThreadPageThreadDataManager manager,
-                       int eventType, int threadType, int apiType, double time, int tid,
-                       List<String> contents) {
+       public ThreadPageThreadDataEvent(int eventType, int threadType,
+                       int apiType, double time, int tid, List<String> contents) {
+               super(contents);
                setEventType(eventType);
                setThreadType(threadType);
                setApiType(apiType);
                setTime(time);
                setTid(tid);
-               setContents(contents);
-               // manager.pushEvent(this);
        }
 
        public int getEventType() {
@@ -65,14 +61,6 @@ public class ThreadPageThreadDataEvent {
                this.eventType = eventType;
        }
 
-       public List<String> getContents() {
-               return contents;
-       }
-
-       public void setContents(List<String> contents) {
-               this.contents = contents;
-       }
-
        public DACustomChartSeriesItem getChartItem() {
                return chartItem;
        }
@@ -93,11 +81,6 @@ public class ThreadPageThreadDataEvent {
                return data;
        }
 
-       public void setData(ThreadPageThreadData data) {
-               this.data = data;
-               data.pushEvent(this);
-       }
-
        public int getTid() {
                return tid;
        }
index 7082df8..9b4864b 100644 (file)
@@ -31,6 +31,7 @@ import java.util.List;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.Listener;
+import org.tizen.dynamicanalyzer.common.AnalyzerConstants;
 import org.tizen.dynamicanalyzer.common.AnalyzerManager;
 import org.tizen.dynamicanalyzer.common.DASelectionData;
 import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
@@ -54,9 +55,9 @@ public class ThreadPageThreadDataManager {
        private boolean hasUpdate = false;
        private List<ThreadPageThreadData> rows = new ArrayList<ThreadPageThreadData>();
        private List<ThreadPageThreadData> rowsQueue = new ArrayList<ThreadPageThreadData>();
+       private List<ThreadPageSyncDataEvent> syncEventQueue = new ArrayList<ThreadPageSyncDataEvent>();
        private List<ThreadPageThreadDataEvent> eventQueue = new ArrayList<ThreadPageThreadDataEvent>();
        private List<ThreadPageThreadDataEvent> callEventQueue = new ArrayList<ThreadPageThreadDataEvent>();
-       private List<ThreadPageThreadDataEvent> calleeEventQueue = new ArrayList<ThreadPageThreadDataEvent>();
 
        protected void pushRow(ThreadPageThreadData data) {
                rowsQueue.add(data);
@@ -72,6 +73,11 @@ public class ThreadPageThreadDataManager {
                callEventQueue.add(event);
        }
 
+       protected void pushSyncEvent(ThreadPageSyncDataEvent syncEvent) {
+               syncEventQueue.add(syncEvent);
+               hasUpdate = true;
+       }
+
        protected ThreadPageThreadDataManager(DACustomChartBoard board,
                        ThreadChartView view) {
                this.setBoard(board);
@@ -89,6 +95,50 @@ public class ThreadPageThreadDataManager {
                chart.redraw();
        }
 
+       private void initSyncChart(DACustomChart chart) {
+               if (null == chart) {
+                       return;
+               }
+
+               DACustomChartSeries stateSeries = new DACustomChartSeries(
+                               ThreadPageLabels.THREAD_SYNC_CHART_SERIES_STATE,
+                               DACustomChartSeries.SERIES_STYLE_EVENT, ColorResources.RED);
+
+               chart.addSeries(stateSeries);
+
+               DACustomChartPlot plot = chart.getPlot();
+               if (null == plot) {
+                       return;
+               }
+               plot.setBackgroundImage(ImageResources.BG_CHILD_GRADIENT);
+               plot.setAutoHeightRange(false);
+               plot.setAxisRangeY(0, 101);
+               plot.setAxisRangeX(board.getVisibleStartTime(),
+                               board.getVisibleEndTime());
+
+               chart.redraw();
+       }
+
+       private boolean createSyncBoardItem(ThreadPageThreadData data,
+                       ThreadPageSyncData sync) {
+               DACustomChartBoardItem parent = data.getItem();
+               if (null == parent) {
+                       return false;
+               }
+               DACustomChartBoardItem item = new DACustomChartBoardItem(parent,
+                               sync.getName() + ThreadPageLabels.THREAD_CHART_NAME_PREFIX
+                                               + sync.getType()
+                                               + ThreadPageLabels.THREAD_CHART_NAME_POSTFIX);
+               DACustomChart chart = item.getChart();
+               initSyncChart(chart);
+
+               sync.setItem(item);
+               item.setData(sync);
+               chart.setData(sync);
+               chart.redraw();
+               return true;
+       }
+
        private void sendSelectionTimes(DACustomChart chart, double start,
                        double end) {
                long startTime = (long) (start * TimelineConstants.MEGA);
@@ -106,8 +156,8 @@ public class ThreadPageThreadDataManager {
                                                chart.getData(), chart));
        }
 
-       // FIXME : chart range selection
-       private Listener chartMouseListener = new Listener() {
+       // FIXME : chart range selection - change private
+       public Listener chartMouseListener = new Listener() {
 
                @Override
                public void handleEvent(Event event) {
@@ -201,17 +251,10 @@ public class ThreadPageThreadDataManager {
                        isStart = false;
                        return;
                }
-               long startTime = 0;
 
-               ThreadPageThreadData mainData = new ThreadPageThreadData(this,
-                               ThreadPageLabels.THREAD_ITEM_TYPE_MAIN,
-                               tid, null);
+               ThreadPageThreadData mainData = new ThreadPageThreadData(
+                               ThreadPageLabels.THREAD_ITEM_TYPE_MAIN, tid);
                pushRow(mainData);
-//             ThreadPageThreadDataEvent mainEvent = new ThreadPageThreadDataEvent(
-//                             this, ThreadPageThreadDataEvent.TYPE_EVENT,
-//                             LogCenterConstants.THREAD_TYPE_MAIN,
-//                             LogCenterConstants.THREAD_API_TYPE_START, startTime, tid, null);
-//             pushEvent(mainEvent);
        }
 
        public List<List<String>> getLogsFromLogPackage(LogPackage logPack,
@@ -263,8 +306,8 @@ public class ThreadPageThreadDataManager {
                                                / TimelineConstants.MEGA;
 
                                ThreadPageThreadDataEvent event = new ThreadPageThreadDataEvent(
-                                               this, ThreadPageThreadDataEvent.TYPE_LOAD, load, -1,
-                                               time, tid, null);
+                                               ThreadPageThreadDataEvent.TYPE_LOAD, load, -1, time,
+                                               tid, null);
                                pushEvent(event);
                        }
                }
@@ -284,14 +327,14 @@ public class ThreadPageThreadDataManager {
                case LogCenterConstants.THREAD_API_TYPE_EXIT:
                case LogCenterConstants.THREAD_API_TYPE_WAIT_START:
                case LogCenterConstants.THREAD_API_TYPE_OTHER:
-                       event = new ThreadPageThreadDataEvent(this,
+                       event = new ThreadPageThreadDataEvent(
                                        ThreadPageThreadDataEvent.TYPE_API,
                                        LogCenterConstants.THREAD_TYPE_PTHREAD, apiType, time, tid,
                                        input);
                        pushEvent(event);
                        break;
                case LogCenterConstants.THREAD_API_TYPE_START:
-                       event = new ThreadPageThreadDataEvent(this,
+                       event = new ThreadPageThreadDataEvent(
                                        ThreadPageThreadDataEvent.TYPE_API,
                                        LogCenterConstants.THREAD_TYPE_PTHREAD, apiType, time, tid,
                                        input);
@@ -301,13 +344,14 @@ public class ThreadPageThreadDataManager {
                        pushCallEvent(event);
                        break;
                case LogCenterConstants.THREAD_API_TYPE_WAIT_END:
-                       event = new ThreadPageThreadDataEvent(this,
+                       event = new ThreadPageThreadDataEvent(
                                        ThreadPageThreadDataEvent.TYPE_EVENT,
                                        LogCenterConstants.THREAD_TYPE_PTHREAD, apiType, time, tid,
                                        input);
                        pushEvent(event);
+                       break;
                case LogCenterConstants.THREAD_API_TYPE_INTERNAL_STOP:
-                       event = new ThreadPageThreadDataEvent(this,
+                       event = new ThreadPageThreadDataEvent(
                                        ThreadPageThreadDataEvent.TYPE_EVENT,
                                        LogCenterConstants.THREAD_TYPE_PTHREAD, apiType, time, tid,
                                        input);
@@ -317,13 +361,10 @@ public class ThreadPageThreadDataManager {
                        pushCallEvent(event);
                        break;
                case LogCenterConstants.THREAD_API_TYPE_INTERNAL_START:
-                       String address = input
-                                       .get(LogCenterConstants.THREAD_PTHREAD_ID_INDEX);
-                       ThreadPageThreadData data = new ThreadPageThreadData(this,
-                                       ThreadPageLabels.THREAD_ITEM_TYPE_PTHREAD, tid,
-                                       address);
+                       ThreadPageThreadData data = new ThreadPageThreadData(
+                                       ThreadPageLabels.THREAD_ITEM_TYPE_PTHREAD, tid);
                        pushRow(data);
-                       event = new ThreadPageThreadDataEvent(this,
+                       event = new ThreadPageThreadDataEvent(
                                        ThreadPageThreadDataEvent.TYPE_EVENT,
                                        LogCenterConstants.THREAD_TYPE_PTHREAD, apiType, time, tid,
                                        input);
@@ -348,14 +389,14 @@ public class ThreadPageThreadDataManager {
                case LogCenterConstants.THREAD_API_TYPE_EXIT:
                case LogCenterConstants.THREAD_API_TYPE_WAIT_START:
                case LogCenterConstants.THREAD_API_TYPE_OTHER:
-                       event = new ThreadPageThreadDataEvent(this,
+                       event = new ThreadPageThreadDataEvent(
                                        ThreadPageThreadDataEvent.TYPE_API,
                                        LogCenterConstants.THREAD_TYPE_OSP, apiType, time, tid,
                                        input);
                        pushEvent(event);
                        break;
                case LogCenterConstants.THREAD_API_TYPE_START:
-                       event = new ThreadPageThreadDataEvent(this,
+                       event = new ThreadPageThreadDataEvent(
                                        ThreadPageThreadDataEvent.TYPE_API,
                                        LogCenterConstants.THREAD_TYPE_OSP, apiType, time, tid,
                                        input);
@@ -365,14 +406,18 @@ public class ThreadPageThreadDataManager {
                        pushCallEvent(event);
                        break;
                case LogCenterConstants.THREAD_API_TYPE_WAIT_END:
-                       event = new ThreadPageThreadDataEvent(this,
-                                       ThreadPageThreadDataEvent.TYPE_EVENT,
-                                       LogCenterConstants.THREAD_TYPE_OSP, apiType, time, tid,
-                                       input);
-                       pushEvent(event);
+                       if (input.get(LogCenterConstants.APINAME_INDEX).equals(
+                                       ThreadPageLabels.THREAD_API_JOIN)) {
+                               event = new ThreadPageThreadDataEvent(
+                                               ThreadPageThreadDataEvent.TYPE_EVENT,
+                                               LogCenterConstants.THREAD_TYPE_OSP, apiType, time, tid,
+                                               input);
+                               pushEvent(event);
+                       } else { // FIXME : do not shows sleep's wait end
+                       }
                        break;
                case LogCenterConstants.THREAD_API_TYPE_INTERNAL_STOP:
-                       event = new ThreadPageThreadDataEvent(this,
+                       event = new ThreadPageThreadDataEvent(
                                        ThreadPageThreadDataEvent.TYPE_EVENT,
                                        LogCenterConstants.THREAD_TYPE_OSP, apiType, time, tid,
                                        input);
@@ -382,14 +427,10 @@ public class ThreadPageThreadDataManager {
                        pushCallEvent(event);
                        break;
                case LogCenterConstants.THREAD_API_TYPE_INTERNAL_START:
-                       String address = input
-                                       .get(LogCenterConstants.THREAD_PTHREAD_ID_INDEX);
                        ThreadPageThreadData data = new ThreadPageThreadData(
-                                       this,
-                                       ThreadPageLabels.THREAD_ITEM_TYPE_OSP,
-                                       tid, address);
+                                       ThreadPageLabels.THREAD_ITEM_TYPE_OSP, tid);
                        pushRow(data);
-                       event = new ThreadPageThreadDataEvent(this,
+                       event = new ThreadPageThreadDataEvent(
                                        ThreadPageThreadDataEvent.TYPE_EVENT,
                                        LogCenterConstants.THREAD_TYPE_OSP, apiType, time, tid,
                                        input);
@@ -427,10 +468,59 @@ public class ThreadPageThreadDataManager {
                }
        }
 
+       private void parseSync(LogPackage logPack) {
+               List<List<String>> inputs = getLogsFromLogPackage(logPack,
+                               LogCenterConstants.LOG_SYNC);
+               int size;
+               if (null == inputs || 0 == (size = inputs.size())) {
+                       return;
+               }
+               List<String> input;
+               for (int i = 0; i < size; i++) {
+                       input = inputs.get(i);
+                       // System.out.println("input : " + input);
+                       double time = Double.parseDouble(input
+                                       .get(LogCenterConstants.TIME_INDEX))
+                                       / TimelineConstants.MEGA;
+                       int tid = Integer.parseInt(input
+                                       .get(LogCenterConstants.THREAD_ID_INDEX));
+
+                       // FIXME
+                       int type = Integer.parseInt(input
+                                       .get(LogCenterConstants.SYNC_TYPE_INDEX));
+                       int apiType = Integer.parseInt(input
+                                       .get(LogCenterConstants.SYNC_API_TYPE_INDEX));
+
+                       String name = input.get(LogCenterConstants.SYNC_VAL_INDEX);
+                       ThreadPageSyncDataEvent event;
+                       switch (type) {
+                       case LogCenterConstants.SYNC_TYPE_OSP_MUTEX:
+                       case LogCenterConstants.SYNC_TYPE_OSP_MONITOR:
+                       case LogCenterConstants.SYNC_TYPE_OSP_SEMAPHORE:
+                               event = new ThreadPageSyncDataEvent(name, type, apiType, time,
+                                               tid, input);
+                               pushSyncEvent(event);
+                               // parseOSPSync(input, type);
+                               break;
+                       case LogCenterConstants.SYNC_TYPE_PTHREAD_MUTEX:
+                       case LogCenterConstants.SYNC_TYPE_PTHREAD_COND_VARIABLE:
+                               break;
+                       case LogCenterConstants.SYNC_TYPE_PTHREAD_RWLOCK:
+                       case LogCenterConstants.SYNC_TYPE_PTHREAD_SPINLOCK:
+                       case LogCenterConstants.SYNC_TYPE_PTHREAD_BARRIER:
+                               System.out.println("error : sync parse - type = " + type);
+                               break;
+                       default:
+                               System.out.println("error : sync parse unknown - type = "
+                                               + type);
+                       }
+               }
+       }
+
        public void parsePageData(LogPackage logPack) {
                parseLoad(logPack);
                parseAPI(logPack);
-               // parseEvent(logPack);
+               parseSync(logPack);
                hasUpdate = true;
        }
 
@@ -477,7 +567,6 @@ public class ThreadPageThreadDataManager {
                                                        return true;
                                                }
                                        }
-                                       // if(callEvent.getContents().)
                                }
                        }
                        return false;
@@ -549,6 +638,30 @@ public class ThreadPageThreadDataManager {
                return null;
        }
 
+       private String getSyncTypeString(int syncType) {
+               switch (syncType) {
+               case LogCenterConstants.SYNC_TYPE_OSP_MUTEX:
+                       return ThreadPageLabels.SYNC_TYPE_OSP_MUTEX;
+               case LogCenterConstants.SYNC_TYPE_OSP_MONITOR:
+                       return ThreadPageLabels.SYNC_TYPE_OSP_MONITOR;
+               case LogCenterConstants.SYNC_TYPE_OSP_SEMAPHORE:
+                       return ThreadPageLabels.SYNC_TYPE_OSP_SEMAPHORE;
+               case LogCenterConstants.SYNC_TYPE_PTHREAD_MUTEX:
+                       return ThreadPageLabels.SYNC_TYPE_PTHREAD_MUTEX;
+               case LogCenterConstants.SYNC_TYPE_PTHREAD_COND_VARIABLE:
+                       return ThreadPageLabels.SYNC_TYPE_PTHREAD_COND_VARIABLE;
+               case LogCenterConstants.SYNC_TYPE_PTHREAD_RWLOCK:
+                       return ThreadPageLabels.SYNC_TYPE_PTHREAD_RWLOCK;
+               case LogCenterConstants.SYNC_TYPE_PTHREAD_SPINLOCK:
+                       return ThreadPageLabels.SYNC_TYPE_PTHREAD_SPINLOCK;
+               case LogCenterConstants.SYNC_TYPE_PTHREAD_BARRIER:
+                       return ThreadPageLabels.SYNC_TYPE_PTHREAD_BARRIER;
+               default:
+                       return AnalyzerConstants.EMPTY;
+               }
+
+       }
+
        protected void checkUpdate() {
                if (false == hasUpdate) {
                        return;
@@ -557,8 +670,9 @@ public class ThreadPageThreadDataManager {
                }
                int size = rowsQueue.size();
                if (size > 0) {
+                       ThreadPageThreadData data;
                        for (int i = 0; i < size; i++) {
-                               ThreadPageThreadData data = rowsQueue.get(0);
+                               data = rowsQueue.get(0);
                                createBoardItem(data);
                                rows.add(data);
                                rowsQueue.remove(0);
@@ -582,6 +696,31 @@ public class ThreadPageThreadDataManager {
                                }
                        }
                }
+
+               size = syncEventQueue.size();
+               if (size > 0) {
+                       ThreadPageThreadData data;
+                       ThreadPageSyncDataEvent event;
+                       ThreadPageSyncData sync;
+                       for (int i = 0; i < size; i++) {
+                               event = syncEventQueue.get(0);
+                               data = findParentData(event.getTid());
+                               if (null != data) {
+                                       sync = data.findSyncData(event.getSyncVal());
+                                       if (null == sync) {
+                                               sync = new ThreadPageSyncData(
+                                                               getSyncTypeString(event.getType()),
+                                                               event.getSyncVal(), event.getTid());
+                                               createSyncBoardItem(data, sync);
+                                               data.pushSync(sync);
+                                       }
+                                       sync.pushEvent(event);
+                                       data.setHasUpdate();
+                               }
+                               syncEventQueue.remove(0);
+                       }
+               }
+
                size = rows.size();
                if (size > 0) {
                        ThreadPageThreadData data;
@@ -590,7 +729,6 @@ public class ThreadPageThreadDataManager {
                                data.checkUpdate();
                        }
                }
-
        }
 
        public void clear() {
@@ -599,7 +737,6 @@ public class ThreadPageThreadDataManager {
                rowsQueue.clear();
                eventQueue.clear();
                callEventQueue.clear();
-               calleeEventQueue.clear();
                isStart = false;
                hasUpdate = false;
        }
diff --git a/org.tizen.dynamicanalyzer/theme/black/img/timeline_right_child_bg_normal.png b/org.tizen.dynamicanalyzer/theme/black/img/timeline_right_child_bg_normal.png
new file mode 100644 (file)
index 0000000..b16ca51
Binary files /dev/null and b/org.tizen.dynamicanalyzer/theme/black/img/timeline_right_child_bg_normal.png differ
diff --git a/org.tizen.dynamicanalyzer/theme/white/img/timeline_right_child_bg_normal.png b/org.tizen.dynamicanalyzer/theme/white/img/timeline_right_child_bg_normal.png
new file mode 100644 (file)
index 0000000..b16ca51
Binary files /dev/null and b/org.tizen.dynamicanalyzer/theme/white/img/timeline_right_child_bg_normal.png differ