[SRADA-XXX] Add DB for dlog
authordongkyu6 lee <dongkyu6.lee@samsung.com>
Mon, 30 May 2016 07:26:02 +0000 (16:26 +0900)
committerdongkyu6 lee <dongkyu6.lee@samsung.com>
Tue, 31 May 2016 04:20:21 +0000 (13:20 +0900)
Change-Id: Ic3a7ebf2f23fd048d5cc39654756cafd173550fa

org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/StartTraceManager.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/StopTraceManager.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/Project.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/page/LoadDAFile.java [new file with mode: 0644]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/TimelinePage.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/CallTraceTable.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/dlog/DADlogReceiver.java [deleted file]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/dlog/DLogDBTable.java [new file with mode: 0644]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/dlog/DLogDataManager.java [new file with mode: 0644]
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/dlog/DlogTable.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/dlog/DlogView.java

index ed42b8e..189418f 100755 (executable)
@@ -57,7 +57,7 @@ import org.tizen.dynamicanalyzer.ui.info.callstack.CallStackInserter;
 import org.tizen.dynamicanalyzer.ui.info.screenshot.ScreenshotTimer;
 import org.tizen.dynamicanalyzer.ui.page.MenuBar;
 import org.tizen.dynamicanalyzer.ui.page.UpdateViewTimer;
-import org.tizen.dynamicanalyzer.ui.timeline.dlog.DADlogReceiver;
+import org.tizen.dynamicanalyzer.ui.timeline.dlog.DLogDataManager;
 import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar;
 import org.tizen.dynamicanalyzer.util.Logger;
 import org.tizen.dynamicanalyzer.util.WorkbenchUtil;
@@ -425,8 +425,7 @@ public class StartTraceManager implements Runnable {
        private void startDlog(){
                Thread DlogThread = new Thread(new Runnable() {
                        public void run() {
-                               DADlogReceiver dlogRecv = new DADlogReceiver();
-                               dlogRecv.startDlog();
+                               DLogDataManager.getInstance().startDlog();
                        }
                });
                DlogThread.start();
index d3c79a5..4297d10 100755 (executable)
@@ -47,7 +47,7 @@ import org.tizen.dynamicanalyzer.ui.memory.data.HeapDataManager;
 import org.tizen.dynamicanalyzer.ui.page.BaseView;
 import org.tizen.dynamicanalyzer.ui.page.MenuBar;
 import org.tizen.dynamicanalyzer.ui.page.UpdateViewTimer;
-import org.tizen.dynamicanalyzer.ui.timeline.dlog.DADlogReceiver;
+import org.tizen.dynamicanalyzer.ui.timeline.dlog.DLogDataManager;
 import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar;
 import org.tizen.dynamicanalyzer.util.Logger;
 import org.tizen.dynamicanalyzer.util.WorkbenchUtil;
@@ -59,7 +59,6 @@ public class StopTraceManager implements Runnable {
        private DAResult error;
        private boolean stopFromTarget = false;
        private Boolean stopThreadCompleted = false;
-       private DADlogReceiver dlogRecv = new DADlogReceiver();
        public StopTraceManager(DAResult err, boolean stopFromTarget) {
                this.error = err;
                this.stopFromTarget = stopFromTarget;           
@@ -157,7 +156,7 @@ public class StopTraceManager implements Runnable {
                        // change summary UI
                        // change to summary page
                        UIAction.applyStopTraceUI();
-                       dlogRecv.stopDlog();
+                       DLogDataManager.getInstance().stopDlog();
                        Display.getDefault().syncExec(new Runnable() {
                 @Override
                 public void run() {
index dcc08b3..6d97d70 100644 (file)
@@ -117,6 +117,9 @@ public class Project {
        private static final String PROFILE_START_TIME = "profilingStartTime";
        private static final String PAGE_TAB_LIST = "pageTabList";
        private static final String TIMELINE_CHART_LIST = "timelineChartList";
+       
+       private static final String MEMPS_DATA_AVAILABLE = "availableMemps";
+       private static final String DA_START_TIME = "daStartTime";
 
        private ProjectVersion version = ProjectVersion.VERSION_UNKNOWN;
        private String protocolVersion = null;
@@ -151,6 +154,10 @@ public class Project {
 
        private int seqRotation = 0;
        private int activeProcessCount = 0;
+       
+       private boolean availableMemps = false;
+       private String daStartTime = "";
+       private boolean isSavedData = false;
 
        static {
                // register DB table
@@ -665,7 +672,11 @@ public class Project {
                writer.write(CommonConstants.NEW_LINE);
                writer.write(CREATE_TIME + CommonConstants.EQUAL + getCreateTime());
                writer.write(CommonConstants.NEW_LINE);
-               writer.write(TOTAL_STOP_TIME + CommonConstants.EQUAL + getTotalStopTime());
+               writer.write(TOTAL_STOP_TIME + CommonConstants.EQUAL + getTotalStopTime());             
+               writer.write(CommonConstants.NEW_LINE);
+               writer.write(DA_START_TIME + CommonConstants.EQUAL + getDAStartTime());
+               writer.write(CommonConstants.NEW_LINE);
+               writer.write(MEMPS_DATA_AVAILABLE + CommonConstants.EQUAL + (getMempsAvailable() ? "true" : "false"));
                writer.write(CommonConstants.NEW_LINE);
                writer.write(REPLAY_STOP_TIME + CommonConstants.EQUAL + getReplayStopTime());
                writer.write(CommonConstants.NEW_LINE);
@@ -849,6 +860,15 @@ public class Project {
                                        pageTabList = val.split(CommonConstants.COMMA);
                                } else if (infoKey.equals(TIMELINE_CHART_LIST)) {
                                        timelineChartList = val.split(CommonConstants.COMMA);
+                               } else if (infoKey.equals(MEMPS_DATA_AVAILABLE)) {
+                                       if(val.equals("true")) {
+                                               setMempsAvailable(true);
+                                       }
+                                       else {
+                                               setMempsAvailable(false);
+                                       }
+                               } else if (infoKey.equals(DA_START_TIME)) {
+                                       setDAStartTime(val);
                                }
                        }
                } else {
@@ -1186,4 +1206,28 @@ public class Project {
 
                timelineChartList = chartList.toArray(new String[0]);
        }
+
+       public void setMempsAvailable(boolean available) {
+               this.availableMemps = available;
+       }
+
+       public boolean getMempsAvailable() {
+               return this.availableMemps;
+       }
+       
+       public void setDAStartTime(String timestring) {
+               this.daStartTime = timestring;
+       }
+       
+       public String getDAStartTime() {
+               return this.daStartTime;
+       }
+       
+       public void setSavedProject (boolean save) {
+               this.isSavedData = save;
+       }
+       
+       public boolean isSaveProject() {
+               return this.isSavedData;
+       }
 }
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/page/LoadDAFile.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/page/LoadDAFile.java
new file mode 100644 (file)
index 0000000..16612ef
--- /dev/null
@@ -0,0 +1,392 @@
+/*
+ *  Dynamic Analyzer
+ *
+ * Copyright (c) 2000 - 2016 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: 
+ * Dongkye Lee <dongkyu6.lee@samsung.com>
+ * Jaeyong Lee <jae-yong.lee@@samsung.com>
+ * Gihun Chang <gihun.chang@@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.
+ * 
+ */
+
+package org.tizen.dynamicanalyzer.ui.page;
+
+import java.io.File;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.tizen.dynamicanalyzer.common.AnalyzerConstants;
+import org.tizen.dynamicanalyzer.common.AnalyzerManager;
+import org.tizen.dynamicanalyzer.common.DAResult;
+import org.tizen.dynamicanalyzer.common.Global;
+import org.tizen.dynamicanalyzer.database.SqlConnectionManager;
+import org.tizen.dynamicanalyzer.database.compatible.DBConverter;
+import org.tizen.dynamicanalyzer.handlers.CommandAction;
+import org.tizen.dynamicanalyzer.handlers.CommonAction;
+import org.tizen.dynamicanalyzer.handlers.UIAction;
+import org.tizen.dynamicanalyzer.nl.AnalyzerLabels;
+import org.tizen.dynamicanalyzer.project.BinaryInfo;
+import org.tizen.dynamicanalyzer.project.Project;
+import org.tizen.dynamicanalyzer.resources.ImageResources;
+import org.tizen.dynamicanalyzer.setting.UILayoutDataManager;
+import org.tizen.dynamicanalyzer.swap.logparser.DataManagerRegistry;
+import org.tizen.dynamicanalyzer.ui.range.RangeDataManager;
+import org.tizen.dynamicanalyzer.ui.range.RangePage;
+import org.tizen.dynamicanalyzer.ui.summary.profiling.FunctionUsageProfiler;
+import org.tizen.dynamicanalyzer.ui.summary.profiling.ProfileDataMaker;
+import org.tizen.dynamicanalyzer.ui.summary.profiling.ProfilingChildData;
+import org.tizen.dynamicanalyzer.ui.summary.profiling.ProfilingChildDataDBTable;
+import org.tizen.dynamicanalyzer.ui.summary.profiling.ProfilingData;
+import org.tizen.dynamicanalyzer.ui.summary.profiling.ProfilingDataDBTable;
+import org.tizen.dynamicanalyzer.ui.summary.profiling.WebProfileDataMaker;
+import org.tizen.dynamicanalyzer.ui.summary.profiling.WebProfilingData;
+import org.tizen.dynamicanalyzer.ui.summary.profiling.WebProfilingDataDBTable;
+import org.tizen.dynamicanalyzer.ui.timeline.TimelinePage;
+import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar;
+import org.tizen.dynamicanalyzer.ui.userinterface.UIDataManager;
+import org.tizen.dynamicanalyzer.util.Logger;
+import org.tizen.dynamicanalyzer.util.WorkbenchUtil;
+import org.tizen.dynamicanalyzer.utils.AnalyzerUtil;
+import org.tizen.dynamicanalyzer.widgets.da.base.DADialog;
+import org.tizen.dynamicanalyzer.widgets.da.base.ProgressDialog;
+import org.tizen.dynamicanalyzer.widgets.da.view.DAPageComposite;
+import org.tizen.dynamicanalyzer.workbench.LayoutManager;
+
+public class LoadDAFile implements Runnable  {
+       private ProgressDialog progressDialog;
+       private String filepath = "";
+
+       public LoadDAFile() {
+               
+       }
+       
+       @Override
+       public void run() {             
+               //startProgress();
+               boolean ret = false;
+               String decompresspath = CommandAction.loadFromZip(this.filepath);
+               if (decompresspath != null && !decompresspath.isEmpty()) {
+                       Project project = Project.getProjectFromFile(decompresspath);
+                       project.setSavedProject(true);
+                       if (project != null) {
+                               Global.setProject(project);
+                               if (openTraceFile(decompresspath)) {
+                                       ret = true;
+                                       Logger.debug("Open File Success : " + this.filepath);
+                               } else {
+                                       Logger.debug("Open File Fail : " + this.filepath);
+                               }
+                       }
+               }
+               
+               //stopProgress(ret);
+       }
+       
+       public void setZipFilePath(String path) {
+               this.filepath = path;
+       }
+
+       private boolean openTraceFile(String tracePath) {
+
+               final Project project = Global.getProject();
+
+               // establish db connection with new path
+               SqlConnectionManager.closeConnection();
+               SqlConnectionManager
+                               .establishConnection(project.getSavePath() + File.separator + AnalyzerConstants.DATABASE_NAME);
+
+               // convert save file for compatible database
+               DBConverter converter = new DBConverter(project.getVersion());
+               if (!converter.convert()) {
+                       // failed to convert for compatible database
+                       UIAction.showWarning(AnalyzerLabels.OPEN_TRACE_PROGRESS_INVALID);
+                       CommonAction.clear();
+                       return false;
+               } else {
+                       // converting is succeeded
+                       // change version of save file to current version
+                       project.upgrade();
+               }
+
+               boolean bsuccess = project.openDetail();
+               if (!bsuccess) {
+                       UIAction.showWarning(AnalyzerLabels.OPEN_TRACE_PROGRESS_VERSION_INVALID_REMOVE);
+                       CommonAction.clear();
+                       return false;
+               }
+
+               if (loadProfilingData(project) && loadProfilingChildData() && loadWebProfilingData()) {
+
+               } else {
+                       UIAction.showWarning(AnalyzerLabels.OPEN_TRACE_PROGRESS_INVALID_REMOVE);
+                       CommonAction.clear();
+                       return false;
+               }
+
+               Display.getDefault().syncExec(new Runnable() {
+                       @Override
+                       public void run() {
+                               Toolbar.INSTANCE.setTime(project.getTotalStopTime());
+                               Toolbar.INSTANCE.setAllControlState(true);
+                       }
+               });
+
+               // change tab list and page to be shown
+               UIAction.setPages(project.getPageTabList());
+
+               // change chart list in timeline page
+               UIAction.setCharts(project.getTimelineChartList());
+
+               // change page
+               if (RangeDataManager.getInstance().isBeingAnalyzed()) {
+                       DAPageComposite page = AnalyzerManager.getCurrentPage();
+                       if (page instanceof RangePage) {
+                               AnalyzerUtil.changePage(TimelinePage.pageID);
+                       }
+               }
+
+               // set dirty of UI layout
+               UILayoutDataManager.INSTANCE.setDirty(true);
+
+               // open for each PageDataManager
+               DataManagerRegistry.openData();
+
+               Display.getDefault().syncExec(new Runnable() {
+                       @Override
+                       public void run() {
+                               UIAction.applyWebProfilingUI(Global.getProject().isWebApplication());
+
+                               DAPageComposite page = AnalyzerManager.getCurrentPage();
+                               page.updateView();
+                       }
+               });
+
+               return true;
+       }
+       
+       private boolean loadProfilingData(Project project) {
+               boolean isSuccess = true;
+               List<List<Object>> profilingDatas = FunctionUsageProfiler.getInstance().getProfilingDataTable()
+                               .getProfilingDataFromDB();
+               if (null == profilingDatas) {
+                       Logger.debug("failed - loadProfilingData");
+                       isSuccess = false;
+               } else {
+                       for (int i = 0; i < profilingDatas.size(); i++) {
+                               List<Object> profilingData = profilingDatas.get(i);
+                               int pid = (Integer) profilingData.get(ProfilingDataDBTable.COLUMN.PID.index);
+                               // possibility of extensions - network, efl, db, etc...
+                               ProfileDataMaker profiler = FunctionUsageProfiler.getInstance().getProfileDataMakerByPid(pid);
+                               int profilingDataID = (Integer) profilingData.get(ProfilingDataDBTable.COLUMN.PROFILING_DATA_ID.index);
+                               byte type = (Byte) profilingData.get(ProfilingDataDBTable.COLUMN.TYPE.index);
+                               int exCount = (Integer) profilingData.get(ProfilingDataDBTable.COLUMN.EXCLUSIVE_COUNT.index);
+                               int inCount = (Integer) profilingData.get(ProfilingDataDBTable.COLUMN.INCLUSIVE_COUNT.index);
+                               int callCount = (Integer) profilingData.get(ProfilingDataDBTable.COLUMN.CALL_COUNT.index);
+                               long inElapsedTime = (Long) profilingData
+                                               .get(ProfilingDataDBTable.COLUMN.INCLUSIVE_EXECUTION_TIME.index);
+                               long exElapsedTime = (Long) profilingData
+                                               .get(ProfilingDataDBTable.COLUMN.EXCLUSIVE_EXECUTION_TIME.index);
+                               String name;
+                               ProfilingData fupData = null;
+                               int binaryId;
+                               BinaryInfo bInfo = null;
+                               switch (type) {
+                               case ProfilingData.TYPE_APPLICATION:
+                               case ProfilingData.TYPE_DEPENDENTLIBRARY:
+                               case ProfilingData.TYPE_LIBRARY:
+                                       binaryId = (Integer) profilingData.get(ProfilingDataDBTable.COLUMN.BINARY_ID.index);
+                                       bInfo = project.getDeviceStatusInfo().getBinaryInfo(binaryId);
+                                       name = bInfo.getTargetBinaryPath();
+                                       fupData = new ProfilingData(profilingDataID, name, exCount, inCount, callCount, inElapsedTime,
+                                                       exElapsedTime, profiler);
+                                       break;
+                               case ProfilingData.TYPE_FUNCTION:
+                                       int functionId = (Integer) profilingData.get(ProfilingDataDBTable.COLUMN.FUNCTION_ID.index);
+                                       name = project.getFunctionName(functionId);
+                                       fupData = new ProfilingData(profilingDataID, name, exCount, inCount, callCount, inElapsedTime,
+                                                       exElapsedTime, profiler);
+                                       break;
+                               default: // never goes here
+                                       Logger.error("invalid profiling data type");
+                                       break;
+                               }
+
+                               if (null == fupData) {
+                                       isSuccess = false;
+                               } else {
+                                       if (type == ProfilingData.TYPE_APPLICATION) {
+                                               profiler.setAppBin(fupData);
+                                       } else if (type == ProfilingData.TYPE_DEPENDENTLIBRARY) {
+                                               profiler.setDependentLib(fupData);
+                                       }
+
+                                       profiler.getProfilingDataMap().put(profilingDataID, fupData);
+                                       UIDataManager.getInstance().getfunctionProfilingDataChecker().addProfilingData(fupData);
+                                       // restore total sample count
+                                       profiler.setTotalSampleCount(profiler.getTotalSampleCount() + fupData.getExCount());
+                               }
+                       }
+               }
+               return isSuccess;
+       }
+
+       private boolean loadProfilingChildData() {
+               boolean isSuccess = true;
+               List<List<Object>> profilingChilds = FunctionUsageProfiler.getInstance().getProfilingChildDataTable()
+                               .getProfilingChildDataFromDB();
+               if (null == profilingChilds) {
+                       Logger.debug("failed - loadProfilingChildData");
+                       isSuccess = false;
+               } else {
+                       int size = profilingChilds.size();
+                       for (int i = 0; i < size; i++) {
+                               List<Object> data = profilingChilds.get(i);
+                               int parentID = (Integer) data.get(ProfilingChildDataDBTable.COLUMN.PROFILING_DATA_ID.index);
+                               int pid = (Integer) data.get(ProfilingChildDataDBTable.COLUMN.PID.index);
+
+                               @SuppressWarnings("unchecked")
+                               List<Integer> childSeqList = (List<Integer>) data
+                                               .get(ProfilingChildDataDBTable.COLUMN.CHILD_SEQUENCE_ARRAY.index);
+
+                               ProfileDataMaker profiler = FunctionUsageProfiler.getInstance().getProfileDataMakerByPid(pid);
+                               ProfilingData parent = profiler.getProfilingDataMap().get(parentID);
+                               ProfilingChildData child = parent.getChildData();
+                               child.getChildren().addAll(childSeqList);
+                       }
+               }
+               return isSuccess;
+       }
+
+       private boolean loadWebProfilingData() {
+               boolean isSuccess = true;
+               List<List<Object>> profilingDatas = FunctionUsageProfiler.getInstance().getWebProfilingDataTable()
+                               .getWebProfilingDataFromDB();
+               if (null == profilingDatas) {
+                       Logger.debug("failed - loadWebProfilingData");
+                       isSuccess = false;
+               } else {
+                       for (int i = 0; i < profilingDatas.size(); i++) {
+                               List<Object> profilingData = profilingDatas.get(i);
+
+                               int profilingDataID = (Integer) profilingData
+                                               .get(WebProfilingDataDBTable.COLUMN.PROFILING_DATA_ID.getIndex());
+                               int pid = (Integer) profilingData.get(WebProfilingDataDBTable.COLUMN.PID.getIndex());
+                               int functionLineNumber = (Integer) profilingData
+                                               .get(WebProfilingDataDBTable.COLUMN.FUNCTION_LINE_NUMBER.getIndex());
+                               String functionName = (String) profilingData
+                                               .get(WebProfilingDataDBTable.COLUMN.FUNCTION_NAME.getIndex());
+                               String functionURL = (String) profilingData.get(WebProfilingDataDBTable.COLUMN.FUNCTION_URL.getIndex());
+                               int callCount = (Integer) profilingData.get(WebProfilingDataDBTable.COLUMN.CALL_COUNT.getIndex());
+                               long inElapsedTime = (Long) profilingData
+                                               .get(WebProfilingDataDBTable.COLUMN.INCLUSIVE_EXECUTION_TIME.getIndex());
+                               long exElapsedTime = (Long) profilingData
+                                               .get(WebProfilingDataDBTable.COLUMN.EXCLUSIVE_EXECUTION_TIME.getIndex());
+
+                               @SuppressWarnings("unchecked")
+                               List<Integer> childSeqList = (List<Integer>) profilingData
+                                               .get(WebProfilingDataDBTable.COLUMN.CHILD_SEQUENCE_ARRAY.getIndex());
+
+                               // create WebProfilingData
+                               WebProfilingData fupData = new WebProfilingData(profilingDataID, functionLineNumber, functionName,
+                                               functionURL, callCount, inElapsedTime, exElapsedTime, childSeqList);
+
+                               // get WebProfileDataMaker
+                               WebProfileDataMaker profiler = FunctionUsageProfiler.getInstance().getWebProfileDataMakerByPid(pid);
+
+                               // set WebProfilingData
+                               if (functionName.equals(FunctionUsageProfiler.APPLICATION)) {
+                                       profiler.setAppBin(fupData);
+                               }
+                               profiler.webProfilingDataMap().put(profilingDataID, fupData);
+                       }
+               }
+               return isSuccess;
+       }
+       
+       private void startProgress() {
+               Display.getDefault().syncExec(new Runnable() {
+                       @Override
+                       public void run() {
+                               Shell shell = WorkbenchUtil.getWorkbenchWindow().getShell();
+                               progressDialog = new ProgressDialog(shell, LayoutManager.getBaseComposite());
+                               progressDialog.setProgressStyle(ProgressDialog.PROGRESS_STYLE_INDETERMINATE);
+                               progressDialog.setProgressMessage("Loading saved file...");
+                               progressDialog.setProgressInfo(AnalyzerLabels.DLG_PLEASE_WAIT);
+                               progressDialog.setCancelListener(new SelectionListener() {
+                                       @Override
+                                       public void widgetDefaultSelected(SelectionEvent arg0) {
+
+                                       }
+
+                                       @Override
+                                       public void widgetSelected(SelectionEvent arg0) {
+                                               cancelProgress();
+                                       }
+                               });
+
+                               progressDialog.open();
+                       }
+               });
+       }
+       
+       public void stopProgress(final boolean isSuccess) {
+               Display.getDefault().syncExec(new Runnable() {
+                       @Override
+                       public void run() {
+                               if (progressDialog != null) {
+                                       progressDialog.close();
+                                       progressDialog = null;
+                               }
+                               if (isSuccess) {
+                                       
+                               } else {
+                                       Shell shell = WorkbenchUtil.getWorkbenchWindow().getShell();
+                                       DADialog dialog = new DADialog(shell, SWT.NONE);
+                                       dialog.setIcon(ImageResources.DIALOG_ERROR_ICON);
+                                       dialog.setMessage("Failed loading zip file.");
+                                       dialog.setDialog(false);
+                                       dialog.open();
+                               }
+                       }
+               });
+       }
+       
+       private void cancelProgress() {
+               try {
+                       //DAResult result = DACommunicator.cancelRequestUIHierarchy();
+                       DAResult result = DAResult.SUCCESS;
+                       if (result.isSuccess() != false) {
+                               Logger.warning(result);
+                       }
+               } catch (Exception e) {
+                       Logger.exception(e);
+               }
+               
+               Display.getDefault().syncExec(new Runnable() {
+                       @Override
+                       public void run() {
+                               if (progressDialog != null) {
+                                       progressDialog.close();
+                                       progressDialog = null;
+                               }
+                       }
+               });
+       }
+}
index 4f6d7f7..aedb313 100644 (file)
@@ -45,6 +45,7 @@ import org.tizen.dynamicanalyzer.ui.timeline.calltrace.CallTraceView;
 import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineChartManager;
 import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineChartView;
 import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineTableView;
+import org.tizen.dynamicanalyzer.ui.timeline.dlog.DLogDataManager;
 import org.tizen.dynamicanalyzer.ui.toolbar.replay.data.ReplayDataManager;
 import org.tizen.dynamicanalyzer.widgets.da.view.DAPageComposite;
 import org.tizen.dynamicanalyzer.widgets.da.view.DATabComposite;
@@ -112,6 +113,7 @@ public class TimelinePage extends DAPageComposite {
                DataManagerRegistry.registerPageDataManager(InteractiveDataManager.getInstance());
                DataManagerRegistry.registerPageDataManager(ScreenshotDataManager.getInstance());
                DataManagerRegistry.registerPageDataManager(MemoryDataManager.getInstance());
+               DataManagerRegistry.registerPageDataManager(DLogDataManager.getInstance());
        }
        
        public TimelineChartView getTimelineChartView() {
index 475e080..f840c3a 100644 (file)
@@ -39,7 +39,6 @@ import org.tizen.dynamicanalyzer.common.AnalyzerConstants;
 import org.tizen.dynamicanalyzer.common.AnalyzerManager;
 import org.tizen.dynamicanalyzer.common.DASelectionData;
 import org.tizen.dynamicanalyzer.common.Global;
-import org.tizen.dynamicanalyzer.model.FilterProperty;
 import org.tizen.dynamicanalyzer.model.TableInput;
 import org.tizen.dynamicanalyzer.nl.TimelinePageLabels;
 import org.tizen.dynamicanalyzer.project.BinaryInfo;
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/dlog/DADlogReceiver.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/dlog/DADlogReceiver.java
deleted file mode 100755 (executable)
index b8ddf28..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-package org.tizen.dynamicanalyzer.ui.timeline.dlog;\r
-\r
-import java.text.DateFormat;\r
-import java.text.ParseException;\r
-import java.text.SimpleDateFormat;\r
-import java.util.ArrayList;\r
-import java.util.Date;\r
-import java.util.List;\r
-import java.util.regex.Pattern;\r
-import org.tizen.dynamicanalyzer.common.Global;\r
-import org.tizen.dynamicanalyzer.communicator.CommunicatorUtils;\r
-import org.tizen.dynamicanalyzer.communicator.DeviceInfo;\r
-import org.tizen.sdblib.receiver.MultiLineReceiver;\r
-import org.tizen.sdblib.util.StringUtil;\r
-\r
-public class DADlogReceiver {\r
-       \r
-\r
-       static List<String> Dlogs = new ArrayList<String>();\r
-       \r
-    private static final Pattern pattern = Pattern.compile("\\d{2}-\\d{2}\\s(\\d{2}:\\d{2}:\\d{2}\\.?\\d*)\\+?\\d*\\s+" //time\r
-            + "(\\d+)\\s+" //pid\r
-            + "(\\d+)\\s+" //tid\r
-            + "(V|D|I|W|E|F)\\s+" //level\r
-            + "(\\S+)\\s*\\:\\s+" //tag\r
-            + "(.*)"); //message\r
-    \r
-    static boolean start = false;\r
-    static boolean dlogKill = false;\r
-    static String[] daStartTime = null;\r
-       public DADlogReceiver() {\r
-               // TODO Auto-generated constructor stub\r
-       }\r
-\r
-       public boolean startDlog(){\r
-               \r
-           Pattern timeregex = Pattern.compile("\\S+\\s+" //day\r
-                   + "\\S+\\s+" //month\r
-                   + "\\d+\\s+" //date\r
-                   + "(\\d{2}\\:\\d{2}\\:\\d{2})\\s+" //hour:min:sec\r
-                   + ".*"); //year\r
-           \r
-               DeviceInfo curDev = Global.getCurrentDeviceInfo();\r
-        \r
-               Dlogs.clear();\r
-               dlogKill = false;\r
-               \r
-               \r
-               if (curDev == null) {\r
-                       return false;\r
-               }\r
-\r
-               CommunicatorUtils.execShellCommand(curDev.getIDevice(),\r
-                               "date", new MultiLineReceiver() {\r
-                                       @Override\r
-                                       public void processNewLines(String[] appLines) {\r
-                                               for (int i = 0; i < appLines.length; i++) {\r
-                                                       daStartTime = appLines;\r
-                                               }\r
-                                       }\r
-                               });\r
-               \r
-               String[] TmpdaStartTime = daStartTime;\r
-               daStartTime = StringUtil.split(TmpdaStartTime[0], timeregex);\r
-\r
-               CommunicatorUtils.execShellCommand(curDev.getIDevice(),\r
-                               "/usr/bin/dlogutil -c");\r
-               \r
-               CommunicatorUtils.execShellCommand(curDev.getIDevice(),\r
-                               "/usr/bin/dlogutil -v threadtime", new MultiLineReceiver() {\r
-                                       @Override\r
-                                       public void processNewLines(String[] appLines) {\r
-                                               start = true;\r
-                                               for (int i = 0; i < appLines.length; i++) {\r
-                                                       if(dlogKill){\r
-                                                               break;\r
-                                                       }\r
-                                                       /* Dlog don't show swap_start always...\r
-                                                       if(appLines[i].contains("swap_start")){\r
-                                                               daStartTime = StringUtil.split(appLines[i], StartTimepattern);\r
-                                                       }\r
-                                                       */\r
-                                                       Dlogs.add(appLines[i]);\r
-                                                       //System.out.println(appLines[i]);\r
-                                               }\r
-                                       }\r
-                               });\r
-               \r
-               return true;\r
-       }\r
-       \r
-       public void stopDlog(){\r
-               dlogKill = true;\r
-       }\r
-       public List<String> getDlogs(){\r
-               return Dlogs;\r
-       }\r
-       \r
-       public List<DADlogData> parserDlogs(){\r
-        \r
-               List<DADlogData> dlogList =  new ArrayList<DADlogData>();\r
-        \r
-                        for (int i=0;i<Dlogs.size();i++) {\r
-                           // ignore empty line.\r
-                           // check if the line is header line.\r
-                           String[] matches = StringUtil.split(Dlogs.get(i), pattern);\r
-                           if(matches == null) continue;\r
-                               DADlogData dlogData = new DADlogData();\r
-                           \r
-                               \r
-                               DateFormat formatter = new SimpleDateFormat("hh:mm:ss.SSS");\r
-                               DateFormat formatter2 = new SimpleDateFormat("hh:mm:ss");\r
-                           try {\r
-                                               Date date = formatter.parse(matches[0]);\r
-                                               Date DAdate = formatter2.parse(daStartTime[0]);\r
-                                               dlogData.setSyncTime(DAdate);\r
-                                   \r
-                                   int compare = date.compareTo(DAdate);\r
-                                   \r
-                                   if(compare < 0){\r
-                                       continue;\r
-                                   }\r
-                                   else{\r
-                                       long diffTime = date.getTime()*1000 - DAdate.getTime()*1000;\r
-                                           \r
-                                           //dlogData.setTime(matches[0]);\r
-                                           dlogData.setTime(Long.toString(diffTime));\r
-                                           dlogData.setPid(matches[1]);\r
-                                           dlogData.setTid(matches[2]);\r
-                                           dlogData.setLevel(matches[3]);\r
-                                           dlogData.setTag(matches[4]);\r
-                                           dlogData.setMessage(matches[5]);\r
-                                           dlogList.add(dlogData);\r
-                                   }\r
-                                   \r
-                                       } catch (ParseException e) {\r
-                                               // TODO Auto-generated catch block\r
-                                               e.printStackTrace();\r
-                                       }      \r
-                        }\r
-               return dlogList;\r
-       }\r
-       \r
-       public boolean isStart(){\r
-               return start;\r
-       }\r
-       \r
-}\r
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/dlog/DLogDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/dlog/DLogDBTable.java
new file mode 100644 (file)
index 0000000..ac8f12d
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+ *  Dynamic Analyzer
+ *
+ * Copyright (c) 2000 - 2016 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: 
+ * Dongkye Lee <dongkyu6.lee@samsung.com>
+ * GwangHo Go <ggh1933.go@@samsung.com>
+ * Gihun Chang <gihun.chang@@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.
+ * 
+ */
+
+package org.tizen.dynamicanalyzer.ui.timeline.dlog;
+
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.tizen.dynamicanalyzer.database.DBColumn;
+import org.tizen.dynamicanalyzer.database.DBConstants;
+import org.tizen.dynamicanalyzer.database.DBTable;
+import org.tizen.dynamicanalyzer.util.Logger;
+
+public class DLogDBTable extends DBTable {
+       public static final String TABLENAME = "DLOG_DB";
+
+       public enum COLUMN {
+               TIME(0, "TIME"),
+               LEVEL(1, "LEVEL"),
+               PID(2, DBConstants.DBCOLUMN_PID),
+               TID(3, DBConstants.DBCOLUMN_TID),
+               TAG(4, "TAG"),
+               MESSAGE(5, "MESSAGE");
+
+               public final int index;
+               public final String name;
+
+               COLUMN(int index, String name) {
+                       this.index = index;
+                       this.name = name;
+               }
+       }
+       
+       @Override
+       public String getTableName() {
+               return TABLENAME;
+       }
+       
+       public DLogDBTable() {
+               addColumn(new DBColumn(COLUMN.TIME.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_VARCHAR, 20));
+               addColumn(new DBColumn(COLUMN.LEVEL.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_VARCHAR, 10));
+               addColumn(new DBColumn(COLUMN.PID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_VARCHAR, 10));
+               addColumn(new DBColumn(COLUMN.TID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_VARCHAR, 10));
+               addColumn(new DBColumn(COLUMN.TAG.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_VARCHAR, 64));
+               addColumn(new DBColumn(COLUMN.MESSAGE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_VARCHAR, 4096));
+       }
+
+       @Override
+       public boolean prepare(PreparedStatement prep, List<Object> rowData) {
+               boolean isPrepared = true;
+               
+               int columnsize = getColumnSize();
+               if (columnsize != rowData.size()) {
+                       isPrepared = false;
+               } else {
+                       try {
+                               int index = 1;
+                               prep.setString(index++, (String) (rowData.get(COLUMN.TIME.index)));
+                               prep.setString(index++, (String) (rowData.get(COLUMN.LEVEL.index)));
+                               prep.setString(index++, (String) (rowData.get(COLUMN.PID.index)));
+                               prep.setString(index++, (String) (rowData.get(COLUMN.TID.index)));
+                               prep.setString(index++, (String) (rowData.get(COLUMN.TAG.index)));
+                               prep.setString(index++, (String) (rowData.get(COLUMN.MESSAGE.index)));
+                       } catch (SQLException e) {
+                               Logger.exception(e);
+                               isPrepared = false;
+                       }
+               }
+               
+               return isPrepared;
+       }
+
+       @Override
+       public List<Object> extractDataFromResultSet(ResultSet rs) {
+               List<Object> row = new ArrayList<Object>();
+               try {
+                       int index = 1;
+                       row.add(rs.getString(index++));
+                       row.add(rs.getString(index++));
+                       row.add(rs.getString(index++));
+                       row.add(rs.getString(index++));
+                       row.add(rs.getString(index++));
+                       row.add(rs.getString(index++));
+               } catch (SQLException e) {
+                       Logger.exception(e);
+                       return null;
+               }
+
+               return row;
+       }
+
+}
diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/dlog/DLogDataManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/dlog/DLogDataManager.java
new file mode 100644 (file)
index 0000000..b7313dd
--- /dev/null
@@ -0,0 +1,231 @@
+package org.tizen.dynamicanalyzer.ui.timeline.dlog;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.regex.Pattern;
+
+import org.tizen.dynamicanalyzer.common.Global;
+import org.tizen.dynamicanalyzer.communicator.CommunicatorUtils;
+import org.tizen.dynamicanalyzer.communicator.DeviceInfo;
+import org.tizen.dynamicanalyzer.database.DBInserter;
+import org.tizen.dynamicanalyzer.swap.logparser.LogPackage;
+import org.tizen.dynamicanalyzer.swap.logparser.PageDataManager;
+import org.tizen.dynamicanalyzer.util.Logger;
+import org.tizen.sdblib.receiver.MultiLineReceiver;
+import org.tizen.sdblib.util.StringUtil;
+
+public class DLogDataManager extends PageDataManager {
+
+       private static DLogDataManager instance = new DLogDataManager();
+       private Thread dlogthread = null;
+
+       private DLogDBTable dLogDBTable = null;
+       private DBInserter dLogDBInserter = null;
+
+       public DLogDataManager() {
+               dLogDBTable = new DLogDBTable();
+               dLogDBInserter = makeInserter(dLogDBTable);
+       }
+
+       public static DLogDataManager getInstance() {
+               return instance;
+       }
+
+       public DLogDBTable getDBTable() {
+               return dLogDBTable;
+       }
+
+       @Override
+       protected void makeData(LogPackage pack) {
+       }
+
+       private static final Pattern pattern = Pattern.compile("\\d{2}-\\d{2}\\s(\\d{2}:\\d{2}:\\d{2}\\.?\\d*)\\+?\\d*\\s+" // time
+                       + "(\\d+)\\s+" // pid
+                       + "(\\d+)\\s+" // tid
+                       + "(V|D|I|W|E|F)\\s+" // level
+                       + "(\\S+)\\s*\\:\\s+" // tag
+                       + "(.*)"); // message
+
+       static boolean start = false;
+       private boolean dlogKill = false;
+       static String[] daStartTime = null;
+
+       public boolean getDlogKill() {
+               return dlogKill;
+       }
+
+       public void setDlogKill(boolean killed) {
+               if (dlogthread != null) {
+                       dlogKill = killed;
+               }
+       }
+
+       public boolean startDlog() {
+               final DeviceInfo curDev = Global.getCurrentDeviceInfo();
+
+               dlogKill = false;
+
+               if (curDev == null) {
+                       return false;
+               }
+
+               String datecommand = "date +\"%H:%M:%S.%3N\"";
+
+               CommunicatorUtils.execShellCommand(curDev.getIDevice(), datecommand, new MultiLineReceiver() {
+                       @Override
+                       public void processNewLines(String[] appLines) {
+                               for (int i = 0; i < appLines.length; i++) {
+                                       daStartTime = appLines;
+                               }
+                       }
+               });
+
+               Global.getProject().setDAStartTime(daStartTime[0]);
+
+               CommunicatorUtils.execShellCommand(curDev.getIDevice(), "/usr/bin/dlogutil -c");
+
+               dlogthread = new Thread(new Runnable() {
+
+                       @Override
+                       public void run() {
+                               CommunicatorUtils.execShellCommand(curDev.getIDevice(), "/usr/bin/dlogutil -v threadtime",
+                                               new MultiLineReceiver() {
+                                                       @Override
+                                                       public void processNewLines(String[] appLines) {
+                                                               if (dlogKill) {
+                                                                       start = false;
+                                                                       try {
+                                                                               Logger.debug("Dlog receiver joined");
+                                                                               Thread.currentThread().join();
+                                                                       } catch (InterruptedException e) {
+
+                                                                       }
+                                                               }
+
+                                                               if (appLines != null) {
+                                                                       makeDlogData(appLines);
+                                                               }
+                                                       }
+                                               });
+                       }
+               });
+
+               dlogthread.start();
+               start = true;
+
+               return true;
+       }
+
+       public void stopDlog() {
+               setDlogKill(true);
+       }
+
+       private void makeDlogData(String[] dlogs) {
+               if (dlogs.length > 0) {
+                       List<List<Object>> mList = new ArrayList<List<Object>>();
+
+                       for (int i = 0; i < dlogs.length; i++) {
+                               String dlogstring = dlogs[i];
+
+                               List<Object> dlog = splitDlog(dlogstring);
+
+                               if (dlog != null) {
+                                       mList.add(dlog);
+                               }
+                       }
+                       dLogDBInserter.pushData(mList);
+               }
+       }
+
+       private List<Object> splitDlog(String dlog) {
+               List<Object> splited = new ArrayList<Object>();
+
+               String[] matches = StringUtil.split(dlog, pattern);
+               if (matches == null || matches.length != 6)
+                       return null;
+
+               if (matches[5].contains("swap_start")) {
+                       if (Global.getProject() != null) {
+                               Global.getProject().setDAStartTime(matches[0]);
+                       }
+               }
+
+               for (int i = 0; i < matches.length; i++) {
+                       splited.add(String.valueOf(matches[i]));
+               }
+
+               return splited;
+       }
+
+       public List<DADlogData> parserDlogs() {
+               List<DADlogData> dlogList = new ArrayList<DADlogData>();
+
+               DateFormat formatter = new SimpleDateFormat("hh:mm:ss.SSS");
+
+               List<List<Object>> Dlogs = getDlogFromDB();
+
+               String dastart = Global.getProject().getDAStartTime();
+
+               if (dastart == null || dastart.isEmpty()) {
+                       dastart = (String) Dlogs.get(0).get(0);
+               }
+
+               Date DAStartTime = null;
+               try {
+                       DAStartTime = formatter.parse(dastart);
+               } catch (ParseException e1) {
+                       // TODO Auto-generated catch block
+                       e1.printStackTrace();
+               }
+
+               for (List<Object> dlog : Dlogs) {
+                       DADlogData dlogData = new DADlogData();
+                       try {
+                               Date date = formatter.parse((String) dlog.get(0));
+                               dlogData.setSyncTime(DAStartTime);
+
+                               int compare = date.compareTo(DAStartTime);
+
+                               if (compare < 0) {
+                                       continue;
+                               } else {
+                                       long diffTime = date.getTime() * 1000 - DAStartTime.getTime() * 1000;
+
+                                       // dlogData.setTime(matches[0]);
+                                       dlogData.setTime(Long.toString(diffTime));
+                                       dlogData.setPid((String) dlog.get(1));
+                                       dlogData.setTid((String) dlog.get(2));
+                                       dlogData.setLevel((String) dlog.get(3));
+                                       dlogData.setTag((String) dlog.get(4));
+                                       dlogData.setMessage((String) dlog.get(5));
+                                       dlogList.add(dlogData);
+                               }
+
+                       } catch (ParseException e) {
+                               // TODO Auto-generated catch block
+                               e.printStackTrace();
+                       }
+               }
+               return dlogList;
+       }
+
+       public boolean isStart() {
+               return start;
+       }
+
+       private List<List<Object>> getDlogFromDB() {
+               List<List<Object>> dlogdatas = new ArrayList<List<Object>>();
+
+               List<List<Object>> queryResult = dLogDBTable.selectAllColumnData(null);
+               if (queryResult == null) {
+                       return dlogdatas;
+               }
+               dlogdatas = queryResult;
+
+               return dlogdatas;
+       }
+}
index 54f2d7b..210df1e 100644 (file)
@@ -1,3 +1,28 @@
+/*\r
+ *  Dynamic Analyzer\r
+ *\r
+ * Copyright (c) 2000 - 2016 Samsung Electronics Co., Ltd. All rights reserved.\r
+ *\r
+ * Contact: \r
+ * GwangHo Go <ggh1933.go@@samsung.com>\r
+ * Dongkye Lee <dongkyu6.lee@samsung.com>\r
+ * Gihun Chang <gihun.chang@@samsung.com>\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * \r
+ */\r
+\r
+\r
 package org.tizen.dynamicanalyzer.ui.timeline.dlog;\r
 \r
 import java.util.ArrayList;\r
@@ -18,6 +43,7 @@ import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.widgets.MenuItem;\r
 import org.eclipse.swt.widgets.Shell;\r
 import org.tizen.dynamicanalyzer.common.AnalyzerConstants;\r
+import org.tizen.dynamicanalyzer.common.Global;\r
 import org.tizen.dynamicanalyzer.model.TableInput;\r
 import org.tizen.dynamicanalyzer.ui.common.UICommonConstants;\r
 import org.tizen.dynamicanalyzer.ui.page.BaseView;\r
@@ -36,13 +62,12 @@ import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoard;
 public class DlogTable extends DATableComposite {\r
        \r
        private String[] columnNames = {"Time", "Level", "Pid", "Tid", "Tag", "Message" }; //6col\r
-       private int[] columnSizes = { 80, 80, 80, 80, 300, 1200};\r
+       private int[] columnSizes = { 80, 60, 70, 70, 100, 1200};\r
        private int[] columnAlignment = { SWT.LEFT, SWT.LEFT, SWT.LEFT, SWT.LEFT, SWT.LEFT, SWT.LEFT };\r
        private boolean[] columnVisibility = { true, true, true, true, true, true };\r
        private int[] sortTypes = { AnalyzerConstants.SORT_TYPE_NONE, AnalyzerConstants.SORT_TYPE_NONE, AnalyzerConstants.SORT_TYPE_NONE,\r
                        AnalyzerConstants.SORT_TYPE_NONE,AnalyzerConstants.SORT_TYPE_NONE, AnalyzerConstants.SORT_TYPE_NONE };\r
        \r
-       private DADlogReceiver dlogRecv = new DADlogReceiver(); \r
        private List<TableInput> tableClone = new ArrayList<TableInput>();\r
        private List<TableInput> filteredDlog = new ArrayList<TableInput>();\r
        private static boolean isFilter = false;\r
@@ -195,17 +220,10 @@ public class DlogTable extends DATableComposite {
        }\r
        @Override\r
        protected List<TableInput> makeTableInput() {\r
-               \r
                List<TableInput> output = new ArrayList<TableInput>();\r
                List<DADlogData> dlogData = new ArrayList<DADlogData>();\r
                \r
-               if(dlogRecv.getDlogs()!=null){\r
-                       dlogData = dlogRecv.parserDlogs();\r
-               }\r
-               else {\r
-                       tableClone = output;\r
-                       return output;\r
-               }\r
+               dlogData = DLogDataManager.getInstance().parserDlogs();\r
                \r
                int seqnum = 0;\r
                \r
@@ -253,37 +271,15 @@ public class DlogTable extends DATableComposite {
                tableClone = output;\r
                return output;\r
        }\r
-       /*\r
-       protected void addTableData() {\r
-               \r
-               List<DADlogData> dlogData = dlogRecv.parserDlogs();\r
-               \r
-               for(DADlogData data : dlogData){\r
-                       GridItem item = new GridItem(table, SWT.LEFT);\r
-                       item.setText(data.getTime());\r
-                       item.setText(data.getTag());\r
-                       item.setText(data.getPid());\r
-                       item.setText(data.getMessage());\r
-               }\r
-                       \r
-       }\r
-       */\r
+       \r
        @Override\r
        public void updateTable() {\r
-               if(!DADlogReceiver.dlogKill){\r
-                       return;\r
-               }\r
-               int itemCount = 0;\r
-               if(dlogRecv.isStart() == true){\r
-                       itemCount = dlogRecv.parserDlogs().size();\r
-               }\r
-               else {\r
-                       return;\r
-               }\r
-               if (itemCount <= 0) {\r
-                       return;\r
+               if(Global.getProject().isSaveProject() == false) {\r
+                       if(!DLogDataManager.getInstance().getDlogKill()){\r
+                               return;\r
+                       }       \r
                }\r
-\r
+               \r
                List<TableInput> output = null;\r
                output = makeTableInput();\r
                \r
@@ -354,12 +350,6 @@ public class DlogTable extends DATableComposite {
                if(tableClone != null){\r
                        for(TableInput table :  tableClone){\r
                                if(table.getText().get(4).contains(input)){\r
-                                       //private String time;\r
-                                       //private String pid;\r
-                                       //private String tid;   \r
-                                       //private String level;\r
-                                       //private String tag;\r
-                                       //private String message;\r
                                        filteredDlog.add(table);\r
                                        isFilter = true;\r
                                }\r
index 5151e9b..ecc6156 100755 (executable)
@@ -1,3 +1,28 @@
+/*\r
+ *  Dynamic Analyzer\r
+ *\r
+ * Copyright (c) 2000 - 2016 Samsung Electronics Co., Ltd. All rights reserved.\r
+ *\r
+ * Contact: \r
+ * GwangHo Go <ggh1933.go@@samsung.com>\r
+ * Dongkye Lee <dongkyu6.lee@samsung.com>\r
+ * Gihun Chang <gihun.chang@@samsung.com>\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * \r
+ */\r
+\r
+\r
 package org.tizen.dynamicanalyzer.ui.timeline.dlog;\r
 \r
 import org.eclipse.swt.layout.FillLayout;\r
@@ -15,39 +40,38 @@ public class DlogView  extends DAViewComposite {
        \r
        Composite contents = null;\r
        private DATableComposite DlogTable = null;\r
-       \r
+\r
        public DlogView(Composite parent, int style) {\r
                super(parent, style, false);\r
                this.setLayout(new FillLayout());\r
-               \r
+\r
                setTitle(InformationViewLabels.DLOG_VIEW_TITLE);\r
                contents = getContentArea();\r
                contents.setBackground(ColorResources.WINDOW_BG_COLOR);\r
                contents.setLayout(new FillLayout());\r
-               \r
-               DlogTable = new DlogTable(contents, SWT.NONE, SWT.SINGLE\r
-                               | SWT.BORDER | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL);\r
-
-               DlogTable.setTableToolTipEnable(false);         \r
-       }\r
-       \r
+\r
+               DlogTable = new DlogTable(contents, SWT.NONE,\r
+                               SWT.SINGLE | SWT.BORDER | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL);\r
+\r
+               DlogTable.setTableToolTipEnable(false); }\r
+\r
        @Override\r
        public void updateView() {\r
                if (!AnalyzerManager.isVisibleView(this.getID())) {\r
                        return;\r
                }\r
+               \r
                if (null == DlogTable) {\r
                        return;\r
                }\r
-               if(DADlogReceiver.dlogKill){\r
-                       DlogTable.updateTable();\r
-               }\r
+               \r
+               DlogTable.updateTable();\r
        }\r
 \r
        @Override\r
        public void clear() {\r
                DlogTable.clear();\r
-               DADlogReceiver.dlogKill = false;\r
+               DLogDataManager.getInstance().setDlogKill(false);\r
        }\r
 \r
        @Override\r