aboutsummaryrefslogtreecommitdiff
path: root/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/model/GLCall.java
diff options
context:
space:
mode:
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/model/GLCall.java')
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/model/GLCall.java183
1 files changed, 183 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/model/GLCall.java b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/model/GLCall.java
new file mode 100644
index 000000000..0f6a11646
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/model/GLCall.java
@@ -0,0 +1,183 @@
+/*
+ * Copyright (C) 2011 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.model;
+
+import com.android.ide.eclipse.gltrace.GLProtoBuf;
+import com.android.ide.eclipse.gltrace.GLProtoBuf.GLMessage.Function;
+import com.android.ide.eclipse.gltrace.state.transforms.IStateTransform;
+import com.android.utils.SparseArray;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * A GLCall is the in memory representation of a single {@link GLProtoBuf.GLMessage}.
+ *
+ * Some protocol buffer messages have a large amount of image data packed in them. Rather
+ * than storing all of that in memory, the GLCall stores a thumbnail image, and an offset
+ * into the trace file corresponding to original protocol buffer message. If full image data
+ * is required, the protocol buffer message can be recreated by reading the trace at the
+ * specified offset.
+ */
+public class GLCall {
+ /** Marker name provided by a {@link Function#glPushGroupMarkerEXT} call. */
+ public static final int PROPERTY_MARKERNAME = 0;
+
+ /** Size argument in a {@link Function#glVertexAttribPointerData} call. */
+ public static final int PROPERTY_VERTEX_ATTRIB_POINTER_SIZE = 1;
+
+ /** Type argument in a {@link Function#glVertexAttribPointerData} call. */
+ public static final int PROPERTY_VERTEX_ATTRIB_POINTER_TYPE = 2;
+
+ /** Data argument in a {@link Function#glVertexAttribPointerData} call. */
+ public static final int PROPERTY_VERTEX_ATTRIB_POINTER_DATA = 3;
+
+ /** Index of this call in the trace. */
+ private int mIndex;
+
+ /** Time on device when this call was invoked. */
+ private final long mStartTime;
+
+ /** Offset of the protobuf message corresponding to this call in the trace file. */
+ private final long mTraceFileOffset;
+
+ /** Flag indicating whether the original protobuf message included FB data. */
+ private final boolean mHasFb;
+
+ /** Full string representation of this call. */
+ private final String mDisplayString;
+
+ /** The actual GL Function called. */
+ private final Function mFunction;
+
+ /** GL Context identifier corresponding to the context of this call. */
+ private final int mContextId;
+
+ /** Duration of this call (MONOTONIC/wall clock time). */
+ private final int mWallDuration;
+
+ /** Duration of this call (THREAD time). */
+ private final int mThreadDuration;
+
+ /** List of state transformations performed by this call. */
+ private List<IStateTransform> mStateTransforms = Collections.emptyList();
+
+ /** Error conditions while creating state transforms for this call. */
+ private String mStateTransformationCreationErrorMessage;
+
+ /** List of properties associated to this call. */
+ private SparseArray<Object> mProperties;
+
+ public GLCall(int index, long startTime, long traceFileOffset, String displayString,
+ Function function, boolean hasFb, int contextId,
+ int wallTime, int threadTime) {
+ mIndex = index;
+ mStartTime = startTime;
+ mTraceFileOffset = traceFileOffset;
+ mDisplayString = displayString;
+ mFunction = function;
+ mHasFb = hasFb;
+ mContextId = contextId;
+ mWallDuration = wallTime;
+ mThreadDuration = threadTime;
+ }
+
+ public int getIndex() {
+ return mIndex;
+ }
+
+ public void setIndex(int i) {
+ mIndex = i;
+ }
+
+ public long getOffsetInTraceFile() {
+ return mTraceFileOffset;
+ }
+
+ public Function getFunction() {
+ return mFunction;
+ }
+
+ public int getContextId() {
+ return mContextId;
+ }
+
+ public boolean hasFb() {
+ return mHasFb;
+ }
+
+ public long getStartTime() {
+ return mStartTime;
+ }
+
+ public int getWallDuration() {
+ return mWallDuration;
+ }
+
+ public int getThreadDuration() {
+ return mThreadDuration;
+ }
+
+ public void setStateTransformations(List<IStateTransform> transforms) {
+ mStateTransforms = transforms;
+ }
+
+ public void setStateTransformationCreationError(String errorMessage) {
+ mStateTransformationCreationErrorMessage = errorMessage;
+ }
+
+ public boolean hasErrors() {
+ return mStateTransformationCreationErrorMessage != null;
+ }
+
+ public String getError() {
+ return mStateTransformationCreationErrorMessage;
+ }
+
+ public List<IStateTransform> getStateTransformations() {
+ return mStateTransforms;
+ }
+
+ @Override
+ public String toString() {
+ return mDisplayString;
+ }
+
+ /**
+ * Associate a certain value to the property name. Property names are defined
+ * as constants in {@link GLCall}.
+ */
+ public void addProperty(int propertyName, Object value) {
+ if (mProperties == null) {
+ mProperties = new SparseArray<Object>(1);
+ }
+
+ mProperties.put(propertyName, value);
+ }
+
+ /**
+ * Obtain the value for the given property. Returns null if no such property
+ * is associated with this {@link GLCall}.
+ */
+ public Object getProperty(int propertyName) {
+ if (mProperties == null) {
+ return null;
+ }
+
+ return mProperties.get(propertyName);
+ }
+}