diff options
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.java | 189 |
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; + } +} |