aboutsummaryrefslogtreecommitdiff
path: root/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/detail/VboDetailProvider.java
diff options
context:
space:
mode:
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/detail/VboDetailProvider.java')
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/detail/VboDetailProvider.java189
1 files changed, 189 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/detail/VboDetailProvider.java b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/detail/VboDetailProvider.java
new file mode 100644
index 000000000..e0ba947c5
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/detail/VboDetailProvider.java
@@ -0,0 +1,189 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * 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 com.android.ide.eclipse.gltrace.views.detail;
+
+import com.android.ide.eclipse.gltrace.GLEnum;
+import com.android.ide.eclipse.gltrace.GLUtils;
+import com.android.ide.eclipse.gltrace.state.GLCompositeProperty;
+import com.android.ide.eclipse.gltrace.state.GLStateType;
+import com.android.ide.eclipse.gltrace.state.IGLProperty;
+
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+public class VboDetailProvider implements IStateDetailProvider {
+ private static enum DisplayFormat {
+ GL_FLOAT,
+ GL_BYTE,
+ GL_UNSIGNED_BYTE,
+ GL_SHORT,
+ GL_UNSIGNED_SHORT,
+ GL_FIXED,
+ }
+
+ private Composite mComposite;
+
+ private Label mSizeLabel;
+ private Label mUsageLabel;
+ private Label mTypeLabel;
+ private Combo mDisplayFormatCombo;
+ private Text mTextControl;
+
+ private byte[] mBufferData;
+
+ @Override
+ public boolean isApplicable(IGLProperty state) {
+ return getVboProperty(state) != null;
+ }
+
+ @Override
+ public void createControl(Composite parent) {
+ mComposite = new Composite(parent, SWT.NONE);
+ GridLayout layout = new GridLayout(2, false);
+ layout.marginWidth = layout.marginHeight = 0;
+ mComposite.setLayout(layout);
+ GridDataFactory.fillDefaults().grab(true, true).applyTo(mComposite);
+
+ Label l = new Label(mComposite, SWT.NONE);
+ l.setText("Size: ");
+ GridDataFactory.fillDefaults().align(SWT.RIGHT, SWT.CENTER).applyTo(l);
+
+ mSizeLabel = new Label(mComposite, SWT.NONE);
+ GridDataFactory.fillDefaults().grab(true, false).applyTo(mSizeLabel);
+
+ l = new Label(mComposite, SWT.NONE);
+ l.setText("Usage: ");
+ GridDataFactory.fillDefaults().align(SWT.RIGHT, SWT.CENTER).applyTo(l);
+
+ mUsageLabel = new Label(mComposite, SWT.NONE);
+ GridDataFactory.fillDefaults().grab(true, false).applyTo(mUsageLabel);
+
+ l = new Label(mComposite, SWT.NONE);
+ l.setText("Type: ");
+ GridDataFactory.fillDefaults().align(SWT.RIGHT, SWT.CENTER).applyTo(l);
+
+ mTypeLabel = new Label(mComposite, SWT.NONE);
+ GridDataFactory.fillDefaults().grab(true, false).applyTo(mTypeLabel);
+
+ l = new Label(mComposite, SWT.NONE);
+ l.setText("Format Data As: ");
+ GridDataFactory.fillDefaults().align(SWT.RIGHT, SWT.CENTER).applyTo(l);
+
+ DisplayFormat[] values = DisplayFormat.values();
+ List<String> formats = new ArrayList<String>(values.length);
+ for (DisplayFormat format: values) {
+ formats.add(format.name());
+ }
+
+ mDisplayFormatCombo = new Combo(mComposite, SWT.DROP_DOWN | SWT.READ_ONLY);
+ mDisplayFormatCombo.setItems(formats.toArray(new String[formats.size()]));
+ mDisplayFormatCombo.select(0);
+ mDisplayFormatCombo.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ updateContents();
+ }
+ });
+ GridDataFactory.fillDefaults().grab(true, false).applyTo(mDisplayFormatCombo);
+
+ mTextControl = new Text(mComposite, SWT.BORDER | SWT.READ_ONLY | SWT.MULTI
+ | SWT.WRAP | SWT.V_SCROLL | SWT.H_SCROLL);
+ GridDataFactory.fillDefaults().span(2, 1).grab(true, true).applyTo(mTextControl);
+ mTextControl.setEditable(false);
+ }
+
+ @Override
+ public void disposeControl() {
+ }
+
+ @Override
+ public Control getControl() {
+ return mComposite;
+ }
+
+ @Override
+ public void updateControl(IGLProperty state) {
+ IGLProperty vbo = getVboProperty(state);
+ if (vbo instanceof GLCompositeProperty) {
+ GLCompositeProperty vboProperty = (GLCompositeProperty) vbo;
+
+ IGLProperty sizeProperty = vboProperty.getProperty(GLStateType.BUFFER_SIZE);
+ mSizeLabel.setText(sizeProperty.getStringValue() + " bytes"); //$NON-NLS-1$
+
+ IGLProperty usageProperty = vboProperty.getProperty(GLStateType.BUFFER_USAGE);
+ mUsageLabel.setText(usageProperty.getStringValue());
+
+ IGLProperty typeProperty = vboProperty.getProperty(GLStateType.BUFFER_TYPE);
+ mTypeLabel.setText(typeProperty.getStringValue());
+
+ IGLProperty dataProperty = vboProperty.getProperty(GLStateType.BUFFER_DATA);
+ mBufferData = (byte[]) dataProperty.getValue();
+ } else {
+ mBufferData = null;
+ }
+
+ updateContents();
+ }
+
+ private void updateContents() {
+ if (mBufferData != null) {
+ mTextControl.setText(GLUtils.formatData(mBufferData,
+ GLEnum.valueOf(mDisplayFormatCombo.getText())));
+ mTextControl.setEnabled(true);
+ mDisplayFormatCombo.setEnabled(true);
+ } else {
+ mTextControl.setText("");
+ mTextControl.setEnabled(false);
+ mDisplayFormatCombo.setEnabled(false);
+ }
+ }
+
+ @Override
+ public List<IContributionItem> getToolBarItems() {
+ return Collections.emptyList();
+ }
+
+ /**
+ * Get the {@link GLStateType#VBO_COMPOSITE} property given a node in
+ * the state hierarchy.
+ */
+ private IGLProperty getVboProperty(IGLProperty state) {
+ if (state.getType() == GLStateType.VBO_COMPOSITE) {
+ return state;
+ }
+
+ state = state.getParent();
+ if (state != null && state.getType() == GLStateType.VBO_COMPOSITE) {
+ return state;
+ }
+
+ return null;
+ }
+}