diff options
author | David Li <davidxli@google.com> | 2011-03-22 14:56:09 -0700 |
---|---|---|
committer | Siva Velusamy <vsiva@google.com> | 2011-09-02 15:12:36 -0700 |
commit | b18f732af4d005b0c07e98cb369da9e1502a5f95 (patch) | |
tree | 8eb227a57ede475b870878e2e9f4b00d1b3d97df | |
parent | edcbc3cd3d921327e8579ccea21a8f0d7042a770 (diff) | |
download | sdk-b18f732af4d005b0c07e98cb369da9e1502a5f95.zip sdk-b18f732af4d005b0c07e98cb369da9e1502a5f95.tar.gz sdk-b18f732af4d005b0c07e98cb369da9e1502a5f95.tar.bz2 |
GLES2Dbg: change TableViewer to ListViewer
For much faster scrolling
Signed-off-by: David Li <davidxli@google.com>
2 files changed, 45 insertions, 133 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/glesv2debugger/MessageData.java b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/glesv2debugger/MessageData.java index d87403d..2571603 100644 --- a/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/glesv2debugger/MessageData.java +++ b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/glesv2debugger/MessageData.java @@ -23,15 +23,12 @@ import com.android.glesv2debugger.DebuggerMessage.Message.Function; import org.eclipse.swt.graphics.Device; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.ImageData; -import org.eclipse.swt.widgets.Display; - -import java.util.HashMap; public class MessageData { public final Message msg; public Image image; // texture public String shader; // shader source - public String[] columns; + public String text; public float[] data; public int maxAttrib; // used for formatting data public GLEnum dataType; // could be float, int; mainly for formatting use @@ -46,15 +43,15 @@ public class MessageData { ImageData imageData = null; if (function != Message.Function.ACK) assert msg.hasTime(); - columns = new String[4]; - columns[0] = function.toString(); - columns[1] = ""; - if (msg.hasTime()) - columns[1] += Float.toString(msg.getTime()); + builder.append(function); + while (builder.length() < 30) + builder.append(' '); + builder.append(String.format("%.3f", msg.getTime())); if (msg.hasClock()) - columns[1] += ":" + Float.toString(msg.getClock()); - columns[2] = Integer.toHexString(msg.getContextId()); - columns[3] = MessageFormatter.Format(msg); + builder.append(String.format(":%.3f", msg.getClock())); + builder.append(String.format(" 0x%08X", msg.getContextId())); + builder.append(" "); + builder.append(MessageFormatter.Format(msg)); switch (function) { case glDrawArrays: // msg was modified by GLServerVertex case glDrawElements: @@ -66,9 +63,6 @@ public class MessageData { break; case glShaderSource: shader = msg.getData().toStringUtf8(); - int index = shader.indexOf('\n'); - columns[3] += " source: " - + shader.substring(0, index >= 0 ? index : shader.length()) + "..."; break; case glTexImage2D: if (!msg.hasData()) @@ -114,5 +108,6 @@ public class MessageData { image = new Image(device, imageData); break; } + text = builder.toString(); } } diff --git a/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/glesv2debugger/SampleView.java b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/glesv2debugger/SampleView.java index 66bd989..877278f 100644 --- a/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/glesv2debugger/SampleView.java +++ b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/glesv2debugger/SampleView.java @@ -28,23 +28,22 @@ import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; +import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.jface.viewers.ListViewer; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.jface.viewers.TableLayout; -import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; @@ -58,8 +57,6 @@ import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.ScrollBar; import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IActionBars; import org.eclipse.ui.ISharedImages; @@ -101,7 +98,7 @@ public class SampleView extends ViewPart implements Runnable { */ public static final String ID = "glesv2debuggerclient.views.SampleView"; - TableViewer viewer; + ListViewer viewer; org.eclipse.swt.widgets.Canvas canvas; Text text; Action actionConnect; // connect / disconnect @@ -128,15 +125,15 @@ public class SampleView extends ViewPart implements Runnable { public void add(final ArrayList<MessageData> msgs) { entries.addAll(msgs); - viewer.getTable().getDisplay().syncExec(new Runnable() { + viewer.getList().getDisplay().syncExec(new Runnable() { @Override public void run() { viewer.add(msgs.toArray()); org.eclipse.swt.widgets.ScrollBar bar = viewer - .getTable().getVerticalBar(); + .getList().getVerticalBar(); if (null != bar && actionAutoScroll.isChecked()) { bar.setSelection(bar.getMaximum()); - viewer.getTable().setSelection( + viewer.getList().setSelection( entries.size() - 1); } } @@ -158,37 +155,32 @@ public class SampleView extends ViewPart implements Runnable { } class ViewLabelProvider extends LabelProvider implements - ITableLabelProvider { + ILabelProvider { @Override - public String getColumnText(Object obj, int index) { + public String getText(Object obj) { MessageData msgData = (MessageData) obj; if (null == msgData) - return getText(obj); - if (index >= msgData.columns.length) - return null; - return msgData.columns[index]; + return obj.toString(); + return msgData.text; } @Override - public Image getColumnImage(Object obj, int index) { - if (index > 0) - return null; + public Image getImage(Object obj) { MessageData msgData = (MessageData) obj; - if (null == msgData) - return getImage(obj); if (null == msgData.image) - return getImage(obj); + return PlatformUI.getWorkbench().getSharedImages() + .getImage(ISharedImages.IMG_OBJ_ELEMENT); return msgData.image; } - - @Override - public Image getImage(Object obj) { - return PlatformUI.getWorkbench().getSharedImages() - .getImage(ISharedImages.IMG_OBJ_ELEMENT); - } } class NameSorter extends ViewerSorter { + @Override + public int compare(Viewer viewer, Object e1, Object e2) { + MessageData m1 = (MessageData) e1; + MessageData m2 = (MessageData) e2; + return (int) ((m1.msg.getTime() - m2.msg.getTime()) * 100); + } } class Filter extends ViewerFilter { @@ -199,7 +191,7 @@ public class SampleView extends ViewPart implements Runnable { if (null == filters) return true; for (int i = 0; i < filters.length; i++) - if (msgData.columns[0].contains(filters[i])) + if (msgData.text.contains(filters[i])) return true; return false; } @@ -212,31 +204,9 @@ public class SampleView extends ViewPart implements Runnable { messageQueue = new MessageQueue(this); } - public void CreateTable(Composite parent) { - Table table = new Table(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI - | SWT.FULL_SELECTION); - TableLayout layout = new TableLayout(); - table.setLayout(layout); - table.setLinesVisible(true); - table.setHeaderVisible(true); - - String[] headings = { - "Name", "Elapsed (ms)", "Context", "Detail" - }; - int[] weights = { - 35, 16, 16, 60 - }; - int[] widths = { - 120, 90, 90, 100 - }; - for (int i = 0; i < headings.length; i++) { - layout.addColumnData(new ColumnWeightData(weights[i], widths[i], - true)); - TableColumn nameCol = new TableColumn(table, SWT.NONE, i); - nameCol.setText(headings[i]); - } - - viewer = new TableViewer(table); + public void CreateView(Composite parent) { + viewer = new ListViewer(parent); + viewer.getList().setFont(new Font(viewer.getList().getDisplay(), "Courier", 10, SWT.BOLD)); viewContentProvider = new ViewContentProvider(); viewer.setContentProvider(viewContentProvider); viewer.setLabelProvider(new ViewLabelProvider()); @@ -253,7 +223,7 @@ public class SampleView extends ViewPart implements Runnable { */ @Override public void createPartControl(Composite parent) { - CreateTable(parent); + CreateView(parent); // Create the help context id for the viewer's control PlatformUI.getWorkbench().getHelpSystem() @@ -525,8 +495,6 @@ public class SampleView extends ViewPart implements Runnable { }; actionConnect.setText("Connect"); actionConnect.setToolTipText("Connect to debuggee"); - // action1.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages() - // .getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK)); doubleClickAction = new Action() { @Override @@ -534,25 +502,6 @@ public class SampleView extends ViewPart implements Runnable { IStructuredSelection selection = (IStructuredSelection) viewer .getSelection(); MessageData msgData = (MessageData) selection.getFirstElement(); - if (null != msgData.shader) - showMessage(msgData.shader); - else if (null != msgData.data) - { - String str = ""; - for (int i = 0; i < msgData.data.length; i++) - { - str += String.format("%f", msgData.data[i]); - if (i % (4 * msgData.maxAttrib) == (4 * msgData.maxAttrib - 1)) - str += '\n'; - else if (i % 4 == 3) - str += " -"; - if (i < msgData.data.length - 1) - str += ' '; - } - showMessage(str); - } - else - showMessage(msgData.columns[3].toString()); } }; } @@ -574,22 +523,6 @@ public class SampleView extends ViewPart implements Runnable { .getSelection(); if (null == selection) return; - if (1 != selection.size()) - { - Object[] objects = selection.toArray(); - float totalTime = 0; - for (int i = 0; i < objects.length; i++) - { - MessageData msgData = (MessageData) objects[i]; - if (null == msgData) - continue; - totalTime += msgData.msg.getTime(); - } - viewer.getTable().getColumn(1).setText(Float.toString(totalTime)); - return; - } - else - viewer.getTable().getColumn(1).setText("Elapsed (ms)"); MessageData msgData = (MessageData) selection.getFirstElement(); if (null == msgData) return; @@ -609,19 +542,19 @@ public class SampleView extends ViewPart implements Runnable { } else if (null != msgData.data) { - String str = ""; + StringBuilder builder = new StringBuilder(); for (int i = 0; i < msgData.data.length; i++) { - str += String.format("%.3g", msgData.data[i]); + builder.append(String.format("%.3g", msgData.data[i])); if (i % (4 * msgData.maxAttrib) == (4 * msgData.maxAttrib - 1)) - str += '\n'; + builder.append('\n'); else if (i % 4 == 3) - str += " -"; + builder.append(" -"); if (i < msgData.data.length - 1) - str += ' '; + builder.append(' '); } - text.setText(str); + text.setText(builder.toString()); text.setVisible(true); canvas.setVisible(false); text.getParent().layout(); @@ -631,17 +564,6 @@ public class SampleView extends ViewPart implements Runnable { }); } - private void showMessage(final String message) { - viewer.getControl().getDisplay().syncExec(new Runnable() { - @Override - public void run() { - MessageDialog.openInformation(viewer.getControl().getShell(), - "GL ES 2.0 Debugger Client", message); - } - }); - - } - public void showError(final Exception e) { viewer.getControl().getDisplay().syncExec(new Runnable() { @Override @@ -671,6 +593,7 @@ public class SampleView extends ViewPart implements Runnable { writer.write("\n\n"); writer.write(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance() .getTime())); + writer.write("\n\n"); } catch (IOException e1) { showError(e1); } @@ -680,7 +603,7 @@ public class SampleView extends ViewPart implements Runnable { break; Message msg = messageQueue.RemoveMessage(0); - if (msgs.size() > 60 || null == msg) { + if (msgs.size() > 60 || (msgs.size() > 0 && null == msg)) { viewContentProvider.add(msgs); msgs.clear(); } @@ -703,14 +626,8 @@ public class SampleView extends ViewPart implements Runnable { final MessageData msgData = new MessageData(this.getViewSite() .getShell().getDisplay(), msg, context); if (null != writer) { - writer.write(msgData.columns[0]); - for (int i = 0; i < 30 - msgData.columns[0].length(); i++) - writer.write(" "); - writer.write("\t"); - writer.write(msgData.columns[1] + " \t "); - writer.write(msgData.columns[2] + " \t "); - writer.write(msgData.columns[3] + " \n"); - if (msgData.columns[0] == "eglSwapBuffers") { + writer.write(msgData.text + "\n"); + if (msgData.msg.getFunction() == Function.eglSwapBuffers) { writer.write("\n-------\n"); writer.flush(); } |