GLES2Dbg: change TableViewer to ListViewer
For much faster scrolling Change-Id: I72d91581c52038c090d21cc9307327d5e774c4cd Signed-off-by: David Li <davidxli@google.com>
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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];
|
||||
}
|
||||
|
||||
@Override
|
||||
public Image getColumnImage(Object obj, int index) {
|
||||
if (index > 0)
|
||||
return null;
|
||||
MessageData msgData = (MessageData) obj;
|
||||
if (null == msgData)
|
||||
return getImage(obj);
|
||||
if (null == msgData.image)
|
||||
return getImage(obj);
|
||||
return msgData.image;
|
||||
return obj.toString();
|
||||
return msgData.text;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Image getImage(Object obj) {
|
||||
MessageData msgData = (MessageData) obj;
|
||||
if (null == msgData.image)
|
||||
return PlatformUI.getWorkbench().getSharedImages()
|
||||
.getImage(ISharedImages.IMG_OBJ_ELEMENT);
|
||||
return msgData.image;
|
||||
}
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user