aboutsummaryrefslogtreecommitdiffstats
path: root/eclipse
diff options
context:
space:
mode:
authorSiva Velusamy <vsiva@google.com>2012-02-13 19:08:10 -0800
committerSiva Velusamy <vsiva@google.com>2012-02-13 19:14:02 -0800
commit776dd1ccf938af0da5c5cc398887a8d060f21312 (patch)
tree30f8f63daa0bc271aadf5fb2b874bcda31d89037 /eclipse
parente45b84524b11a826b71617d38812a97dd58bd818 (diff)
downloadsdk-776dd1ccf938af0da5c5cc398887a8d060f21312.zip
sdk-776dd1ccf938af0da5c5cc398887a8d060f21312.tar.gz
sdk-776dd1ccf938af0da5c5cc398887a8d060f21312.tar.bz2
gltrace: Fix formatter issue with enum arguments.
Enum arguments are passed along in the protocol buffer with an integer type. This patch fixes the formatter to take care of this case. Change-Id: I1efeaa955b87b57b0da805ae5942d138bbce1544
Diffstat (limited to 'eclipse')
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.gldebugger.tests/src/com/android/ide/eclipse/gltrace/format/GLMessageFormatterTest.java14
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/format/GLMessageFormatter.java17
2 files changed, 29 insertions, 2 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.gldebugger.tests/src/com/android/ide/eclipse/gltrace/format/GLMessageFormatterTest.java b/eclipse/plugins/com.android.ide.eclipse.gldebugger.tests/src/com/android/ide/eclipse/gltrace/format/GLMessageFormatterTest.java
index 305e8ac..984cbee 100644
--- a/eclipse/plugins/com.android.ide.eclipse.gldebugger.tests/src/com/android/ide/eclipse/gltrace/format/GLMessageFormatterTest.java
+++ b/eclipse/plugins/com.android.ide.eclipse.gldebugger.tests/src/com/android/ide/eclipse/gltrace/format/GLMessageFormatterTest.java
@@ -39,6 +39,7 @@ public class GLMessageFormatterTest {
"const GLchar*, glGetString, GLenum name",
"void, glMultMatrixf, const GLfloat* m",
"GLenum, eglBindAPI, GLEnum arg",
+ "void, glGetActiveAttrib, GLenum* type",
"void, glTexImage2D, GLint level, GLsizei width, const GLvoid* pixels");
private static GLMessageFormatter sGLMessageFormatter;
@@ -126,6 +127,19 @@ public class GLMessageFormatterTest {
assertEquals(expected, actual);
}
+ @Test
+ public void testMessageWithEnumPointer() {
+ //void, glGetActiveAttrib, GLenum* type
+ GLMessage msg = constructGLMessage(null,
+ Function.glGetActiveAttrib,
+ createIntegerPointerDataType(GLEnum.GL_FLOAT_MAT4.value));
+
+ String expected = "glGetActiveAttrib(type = [GL_FLOAT_MAT4])";
+ String actual = sGLMessageFormatter.formatGLMessage(msg);
+
+ assertEquals(expected, actual);
+ }
+
private DataType createStringDataType(String retValue) {
return DataType.newBuilder()
.addCharValue(ByteString.copyFromUtf8(retValue))
diff --git a/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/format/GLMessageFormatter.java b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/format/GLMessageFormatter.java
index 2b7c491..c0a11fe 100644
--- a/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/format/GLMessageFormatter.java
+++ b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/format/GLMessageFormatter.java
@@ -115,7 +115,7 @@ public class GLMessageFormatter {
}
private String formatPointer(DataType var, Type typeSpec) {
- if (var.getType() != typeSpec) {
+ if (var.getType() != typeSpec && !isEnumTypeWithIntData(var, typeSpec)) {
// the type of the data in the message does not match expected specification.
// in such a case, just print the data as a pointer and don't try to interpret it.
if (var.getIntValueCount() > 0) {
@@ -126,7 +126,7 @@ public class GLMessageFormatter {
}
// Display as array if possible
- switch (var.getType()) {
+ switch (typeSpec) {
case BOOL:
return var.getBoolValueList().toString();
case FLOAT:
@@ -135,6 +135,15 @@ public class GLMessageFormatter {
return var.getIntValueList().toString();
case CHAR:
return var.getCharValueList().get(0).toStringUtf8();
+ case ENUM:
+ List<Integer> vals = var.getIntValueList();
+ StringBuilder sb = new StringBuilder(vals.size() * 5);
+ sb.append('[');
+ for (Integer v: vals) {
+ sb.append(GLEnum.valueOf(v.intValue()));
+ }
+ sb.append(']');
+ return sb.toString();
}
// We have a pointer, but we don't have the data pointed to.
@@ -145,4 +154,8 @@ public class GLMessageFormatter {
return String.format("0x%x", var.getIntValue(0)); //$NON-NLS-1$
}
}
+
+ private boolean isEnumTypeWithIntData(DataType var, Type typeSpec) {
+ return var.getType() == Type.INT && typeSpec == Type.ENUM;
+ }
}