blob: 40ac24490b04ff9e4edcdcaa047df89efbc811cb [file] [log] [blame]
/*
* Copyright (C) 2006 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.traceview;
import org.eclipse.swt.graphics.Color;
class Call implements TimeLineView.Block {
// Values for bits within the mFlags field.
private static final int METHOD_ACTION_MASK = 0x3;
private static final int IS_RECURSIVE = 0x10;
private int mThreadId;
private int mFlags;
MethodData mMethodData;
/** 0-based thread-local start time */
long mThreadStartTime;
/** global start time */
long mGlobalStartTime;
/** global end time */
long mGlobalEndTime;
private String mName;
/**
* This constructor is used for the root of a Call tree. The name is
* the name of the corresponding thread.
*/
Call(String name, MethodData methodData) {
mName = name;
mMethodData = methodData;
}
Call() {
}
Call(int threadId, MethodData methodData, long time, int methodAction) {
mThreadId = threadId;
mMethodData = methodData;
mThreadStartTime = time;
mFlags = methodAction & METHOD_ACTION_MASK;
mName = methodData.getProfileName();
}
public void set(int threadId, MethodData methodData, long time, int methodAction) {
mThreadId = threadId;
mMethodData = methodData;
mThreadStartTime = time;
mFlags = methodAction & METHOD_ACTION_MASK;
mName = methodData.getProfileName();
}
public void updateName() {
mName = mMethodData.getProfileName();
}
public double addWeight(int x, int y, double weight) {
return mMethodData.addWeight(x, y, weight);
}
public void clearWeight() {
mMethodData.clearWeight();
}
public long getStartTime() {
return mGlobalStartTime;
}
public long getEndTime() {
return mGlobalEndTime;
}
public Color getColor() {
return mMethodData.getColor();
}
public void addExclusiveTime(long elapsed) {
mMethodData.addElapsedExclusive(elapsed);
if ((mFlags & IS_RECURSIVE) == 0) {
mMethodData.addTopExclusive(elapsed);
}
}
public void addInclusiveTime(long elapsed, Call parent) {
boolean isRecursive = (mFlags & IS_RECURSIVE) != 0;
mMethodData.addElapsedInclusive(elapsed, isRecursive, parent);
}
public String getName() {
return mName;
}
public void setName(String name) {
mName = name;
}
int getThreadId() {
return mThreadId;
}
public MethodData getMethodData() {
return mMethodData;
}
int getMethodAction() {
return mFlags & METHOD_ACTION_MASK;
}
public void dump() {
System.out.printf("%s [%d, %d]\n", mName, mGlobalStartTime, mGlobalEndTime);
}
public void setRecursive(boolean isRecursive) {
if (isRecursive) {
mFlags |= IS_RECURSIVE;
} else {
mFlags &= ~IS_RECURSIVE;
}
}
public boolean isRecursive() {
return (mFlags & IS_RECURSIVE) != 0;
}
}