From 7991acb84887b02ca9d1e4be19470f31d5337bcb Mon Sep 17 00:00:00 2001 From: "ggh1933.go" Date: Fri, 29 Apr 2016 14:44:40 +0900 Subject: [PATCH] [SRADA-467]Add DlogTable on TimeLinePage - 1. When StartTrace, Start Dlog shellcommand and containing Dlog datas. - 2. When StopTrace, Stop Dlog and put Dlog datas on DlogTable. - 3. Dlog Table "Time, Tag, Pid, Message" columns - now, disabled Dlog function. Change-Id: Ic4966bf6e0a6b371df4d0d06ac74a71e55da2ef2 --- .../dynamicanalyzer/control/StartTraceManager.java | 18 ++ .../dynamicanalyzer/control/StopTraceManager.java | 10 ++ .../ui/timeline/dlog/DADlogData.java | 34 ++++ .../ui/timeline/dlog/DADlogReceiver.java | 89 ++++++++++ .../ui/timeline/dlog/DlogTable.java | 196 +++++++++++++++++++++ .../dynamicanalyzer/ui/timeline/dlog/DlogView.java | 58 +++++- 6 files changed, 404 insertions(+), 1 deletion(-) mode change 100644 => 100755 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/StartTraceManager.java mode change 100644 => 100755 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/StopTraceManager.java create mode 100755 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/dlog/DADlogData.java create mode 100755 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/dlog/DADlogReceiver.java create mode 100755 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/dlog/DlogTable.java mode change 100644 => 100755 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/dlog/DlogView.java diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/StartTraceManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/StartTraceManager.java old mode 100644 new mode 100755 index dfeda12..d25af13 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/StartTraceManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/StartTraceManager.java @@ -53,6 +53,7 @@ import org.tizen.dynamicanalyzer.swap.logparser.MessageParser; import org.tizen.dynamicanalyzer.ui.info.callstack.CallStackInserter; import org.tizen.dynamicanalyzer.ui.info.screenshot.ScreenshotTimer; import org.tizen.dynamicanalyzer.ui.page.UpdateViewTimer; +import org.tizen.dynamicanalyzer.ui.timeline.dlog.DADlogReceiver; import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; import org.tizen.dynamicanalyzer.util.Logger; import org.tizen.dynamicanalyzer.util.WorkbenchUtil; @@ -244,6 +245,10 @@ public class StartTraceManager implements Runnable { result = new DAResult(ErrorCode.ERR_NO_PROCINFO); return; } + + // Call Start Dlog + //startDlog(); + setStageComplete(STAGE.WAIT_PROCINFO); // start toolbar clock @@ -399,4 +404,17 @@ public class StartTraceManager implements Runnable { throw new InterruptedException(); } } + + // Start DlogReceiver + /* + private void startDlog(){ + Thread DlogThread = new Thread(new Runnable() { + public void run() { + DADlogReceiver dlogRecv = new DADlogReceiver(); + dlogRecv.startDlog(); + } + }); + DlogThread.start(); + } + */ } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/StopTraceManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/StopTraceManager.java old mode 100644 new mode 100755 index 19bfcbf..f86083e --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/StopTraceManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/control/StopTraceManager.java @@ -25,6 +25,8 @@ */ package org.tizen.dynamicanalyzer.control; +import java.util.List; + import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.tizen.dynamicanalyzer.common.DAResult; @@ -45,6 +47,7 @@ import org.tizen.dynamicanalyzer.swap.logparser.MessageParser; import org.tizen.dynamicanalyzer.ui.info.callstack.CallStackInserter; import org.tizen.dynamicanalyzer.ui.info.screenshot.ScreenshotTimer; import org.tizen.dynamicanalyzer.ui.page.UpdateViewTimer; +import org.tizen.dynamicanalyzer.ui.timeline.dlog.DADlogReceiver; import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; import org.tizen.dynamicanalyzer.util.Logger; import org.tizen.dynamicanalyzer.widgets.da.base.ProgressDialog; @@ -55,6 +58,10 @@ public class StopTraceManager implements Runnable { private DAResult error; private boolean stopFromTarget = false; private Boolean stopThreadCompleted = false; + + // Dlog Receiver Class + //private DADlogReceiver dlogRecv = new DADlogReceiver(); + public StopTraceManager(DAResult err, boolean stopFromTarget) { this.error = err; this.stopFromTarget = stopFromTarget; @@ -153,6 +160,9 @@ public class StopTraceManager implements Runnable { // change to summary page UIAction.applyStopTraceUI(); + // Dlog Stop + // dlogRecv.stopDlog(); + } catch (InterruptedException e) { // canceled stop tracing // never happened diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/dlog/DADlogData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/dlog/DADlogData.java new file mode 100755 index 0000000..43d2f24 --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/dlog/DADlogData.java @@ -0,0 +1,34 @@ +package org.tizen.dynamicanalyzer.ui.timeline.dlog; + +import java.util.List; + +public class DADlogData { + private String time; + private String tag; + private String pid; + private String message; + public String getTag() { + return tag; + } + public void setTag(String tag) { + this.tag = tag; + } + public String getPid() { + return pid; + } + public void setPid(String pid) { + this.pid = pid; + } + public String getMessage() { + return message; + } + public void setMessage(String message) { + this.message = message; + } + public String getTime() { + return time; + } + public void setTime(String time) { + this.time = time; + } +} \ No newline at end of file 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 new file mode 100755 index 0000000..fe0e02c --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/dlog/DADlogReceiver.java @@ -0,0 +1,89 @@ +package org.tizen.dynamicanalyzer.ui.timeline.dlog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +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.sdblib.receiver.MultiLineReceiver; +import org.tizen.sdblib.util.StringUtil; + +public class DADlogReceiver { + + + static List Dlogs = new ArrayList(); + private static final Pattern pattern = Pattern.compile("\\d{2}-\\d{2}\\s(\\d{2}:\\d{2}:\\d{2}\\.?\\d*)\\+?\\d*\\s+" //time + + "(V|D|I|W|E|F)/.*\\(\\s?" //tag + + "(\\d+)\\):\\s" //pid + + "(.*)"); //message + static boolean start = false; + static boolean dlogKill = false; + + public DADlogReceiver() { + // TODO Auto-generated constructor stub + } + + public boolean startDlog(){ + + Dlogs.clear(); + dlogKill = false; + + DeviceInfo curDev = Global.getCurrentDeviceInfo(); + if (curDev == null) { + return false; + } + + CommunicatorUtils.execShellCommand(curDev.getIDevice(), + "/usr/bin/dlogutil -v time", new MultiLineReceiver() { + @Override + public void processNewLines(String[] appLines) { + start = true; + for (int i = 0; i < appLines.length; i++) { + if(dlogKill){ + break; + } + Dlogs.add(appLines[i]); + //System.out.println(appLines[i]); + } + } + }); + + return true; + } + + public void stopDlog(){ + dlogKill = true; + } + public List getDlogs(){ + return Dlogs; + } + + public List parserDlogs(){ + + List dlogList = new ArrayList(); + + for (int i=0;i makeTableInput() { + table.getColumn(0).setText(columnNames[0]); + table.getColumn(1).setText(columnNames[1]); + table.getColumn(2).setText(columnNames[2]); + table.getColumn(3).setText(columnNames[3]); + + List output = new ArrayList(); + List dlogData = new ArrayList(); + + if(dlogRecv.getDlogs()!=null){ + dlogData = dlogRecv.parserDlogs(); + } + else { + return output; + } + + int seqnum = 0; + + for(DADlogData data : dlogData){ + List text = new ArrayList(); + List tabledata = new ArrayList(); + DATableDataFormat TableDataformat = new DATableDataFormat(seqnum++); + + text.add(data.getTime()); + tabledata.add(data.getTime()); + + text.add(data.getTag()); + tabledata.add(data.getTag()); + + text.add(data.getPid()); + tabledata.add(data.getPid()); + + text.add(data.getMessage()); + tabledata.add(data.getMessage()); + + TableDataformat.getData().add(tabledata.get(0)); + TableDataformat.getData().add(tabledata.get(1)); + TableDataformat.getData().add(tabledata.get(2)); + TableDataformat.getData().add(tabledata.get(3)); + + TableInput tableInput = new TableInput(); + tableInput.setText(text); + tableInput.setData(TableDataformat); + + output.add(tableInput); + } + return output; + } + /* + protected void addTableData() { + + List dlogData = dlogRecv.parserDlogs(); + + for(DADlogData data : dlogData){ + GridItem item = new GridItem(table, SWT.LEFT); + item.setText(data.getTime()); + item.setText(data.getTag()); + item.setText(data.getPid()); + item.setText(data.getMessage()); + } + + } + */ + @Override + public void updateTable() { + if(!DADlogReceiver.dlogKill){ + return; + } + int itemCount = 0; + if(dlogRecv.isStart() == true){ + itemCount = dlogRecv.parserDlogs().size(); + } + else { + return; + } + if (itemCount <= 0) { + return; + } + + List output = null; + output = makeTableInput(); + + if (null == output) { + return; + } + + table.removeAll(); + + if (null != comparator) { + Collections.sort(output, comparator); + } + + List selectionList = new ArrayList(); + boolean isSelectionItem = false; + int focusIndex = -1; + int size = output.size(); + + for (int i = 0; i < size; i++) { + GridItem gridItem = new GridItem(table, SWT.NONE); + DATableDataFormat gridData = (DATableDataFormat) output.get(i).getData(); + gridItem.setData(gridData); + + List text = output.get(i).getText(); + int columnCount = text.size(); + for (int index = 0; index < columnCount; index++) { + String textData = text.get(index); + if (null != textData) { + gridItem.setText(index, text.get(index)); + } + } + + if (output.get(i).isInRange() && output.get(i).isSecondSelection()) { + gridItem.setBackground(intersectColor); + } else if (output.get(i).isSecondSelection()) { + gridItem.setBackground(secondSelectionColor); + } else if (output.get(i).isInRange()) { + gridItem.setBackground(rangeColor); + } + + if (gridData != null) { + long seqNum = gridData.getSelectionKey(); + + if (-1 != focusSeq && seqNum == focusSeq) { + focusIndex = i; + } + } + } + + int[] sels = new int[selectionList.size()]; + for (int i = 0; i < selectionList.size(); i++) { + sels[i] = selectionList.get(i); + } + + if (isSelectionItem) { + table.setSelection(sels); + if (table.isFocusControl() && focusIndex > 0) { + table.setFocusItem(table.getItem(focusIndex)); + } + } + table.update(); + } + +} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/dlog/DlogView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/dlog/DlogView.java old mode 100644 new mode 100755 index 809c869..e4ca0bd --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/dlog/DlogView.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/dlog/DlogView.java @@ -2,16 +2,72 @@ package org.tizen.dynamicanalyzer.ui.timeline.dlog; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.tizen.dynamicanalyzer.common.AnalyzerManager; +import org.tizen.dynamicanalyzer.common.DASelectionData; +import org.tizen.dynamicanalyzer.common.Global; import org.tizen.dynamicanalyzer.nl.InformationViewLabels; +import org.tizen.dynamicanalyzer.nl.MemoryPageLabels; +import org.tizen.dynamicanalyzer.nl.TimelinePageLabels; +import org.tizen.dynamicanalyzer.project.Project; +import org.tizen.dynamicanalyzer.resources.ColorResources; +import org.tizen.dynamicanalyzer.ui.memory.MemoryStatisticsTableView; +import org.tizen.dynamicanalyzer.ui.timeline.calltrace.CallTraceTable; +import org.tizen.dynamicanalyzer.ui.timeline.calltrace.WebCallTraceTable; +import org.tizen.dynamicanalyzer.ui.widgets.table.DATableComposite; +import org.tizen.dynamicanalyzer.ui.widgets.table.DefaultTableComparator; import org.tizen.dynamicanalyzer.widgets.da.view.DAViewComposite; +import org.tizen.dynamicanalyzer.widgets.da.view.DAViewData; +import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.StackLayout; +import org.eclipse.swt.layout.FormData; +import org.eclipse.swt.layout.FormAttachment; +import org.eclipse.swt.widgets.Text; public class DlogView extends DAViewComposite { - + private String[] initcolumnNames = {"", "", "", "[After StopTrace, Show Dlogs]" }; + public static final String ID = DlogView.class.getName(); + + Composite contents = null; + private StackLayout stackLayout; + private DATableComposite DlogTable = null; + public DlogView(Composite parent, int style) { super(parent, style, false); this.setLayout(new FillLayout()); setTitle(InformationViewLabels.DLOG_VIEW_TITLE); + contents = getContentArea(); + contents.setBackground(ColorResources.WINDOW_BG_COLOR); + contents.setLayout(new FillLayout()); + + DlogTable = new DlogTable(contents, SWT.NONE, SWT.SINGLE + | SWT.BORDER | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL); + + DlogTable.setTableToolTipEnable(false); + } + + @Override + public void updateView() { + if (!AnalyzerManager.isVisibleView(this.getID())) { + return; + } + if (null == DlogTable) { + return; + } + if(DADlogReceiver.dlogKill){ + DlogTable.updateTable(); + } } + @Override + public void clear() { + DlogTable.clear(); + DADlogReceiver.dlogKill = false; + } + + @Override + public Control getControl() { + return DlogTable; + } } -- 2.7.4