| /* |
| * 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 { |
| final private ThreadData mThreadData; |
| final private MethodData mMethodData; |
| final Call mCaller; // the caller, or null if this is the root |
| |
| private String mName; |
| private boolean mIsRecursive; |
| |
| long mGlobalStartTime; |
| long mGlobalEndTime; |
| |
| long mThreadStartTime; |
| long mThreadEndTime; |
| |
| long mInclusiveRealTime; // real time spent in this call including its children |
| long mExclusiveRealTime; // real time spent in this call including its children |
| |
| long mInclusiveCpuTime; // cpu time spent in this call including its children |
| long mExclusiveCpuTime; // cpu time spent in this call excluding its children |
| |
| Call(ThreadData threadData, MethodData methodData, Call caller) { |
| mThreadData = threadData; |
| mMethodData = methodData; |
| mName = methodData.getProfileName(); |
| mCaller = caller; |
| } |
| |
| public void updateName() { |
| mName = mMethodData.getProfileName(); |
| } |
| |
| @Override |
| public double addWeight(int x, int y, double weight) { |
| return mMethodData.addWeight(x, y, weight); |
| } |
| |
| @Override |
| public void clearWeight() { |
| mMethodData.clearWeight(); |
| } |
| |
| @Override |
| public long getStartTime() { |
| return mGlobalStartTime; |
| } |
| |
| @Override |
| public long getEndTime() { |
| return mGlobalEndTime; |
| } |
| |
| @Override |
| public long getExclusiveCpuTime() { |
| return mExclusiveCpuTime; |
| } |
| |
| @Override |
| public long getInclusiveCpuTime() { |
| return mInclusiveCpuTime; |
| } |
| |
| @Override |
| public long getExclusiveRealTime() { |
| return mExclusiveRealTime; |
| } |
| |
| @Override |
| public long getInclusiveRealTime() { |
| return mInclusiveRealTime; |
| } |
| |
| @Override |
| public Color getColor() { |
| return mMethodData.getColor(); |
| } |
| |
| @Override |
| public String getName() { |
| return mName; |
| } |
| |
| public void setName(String name) { |
| mName = name; |
| } |
| |
| public ThreadData getThreadData() { |
| return mThreadData; |
| } |
| |
| public int getThreadId() { |
| return mThreadData.getId(); |
| } |
| |
| @Override |
| public MethodData getMethodData() { |
| return mMethodData; |
| } |
| |
| @Override |
| public boolean isContextSwitch() { |
| return mMethodData.getId() == -1; |
| } |
| |
| @Override |
| public boolean isIgnoredBlock() { |
| // Ignore the top-level call or context switches within the top-level call. |
| return mCaller == null || isContextSwitch() && mCaller.mCaller == null; |
| } |
| |
| @Override |
| public TimeLineView.Block getParentBlock() { |
| return mCaller; |
| } |
| |
| public boolean isRecursive() { |
| return mIsRecursive; |
| } |
| |
| void setRecursive(boolean isRecursive) { |
| mIsRecursive = isRecursive; |
| } |
| |
| void addCpuTime(long elapsedCpuTime) { |
| mExclusiveCpuTime += elapsedCpuTime; |
| mInclusiveCpuTime += elapsedCpuTime; |
| } |
| |
| /** |
| * Record time spent in the method call. |
| */ |
| void finish() { |
| if (mCaller != null) { |
| mCaller.mInclusiveCpuTime += mInclusiveCpuTime; |
| mCaller.mInclusiveRealTime += mInclusiveRealTime; |
| } |
| |
| mMethodData.addElapsedExclusive(mExclusiveCpuTime, mExclusiveRealTime); |
| if (!mIsRecursive) { |
| mMethodData.addTopExclusive(mExclusiveCpuTime, mExclusiveRealTime); |
| } |
| mMethodData.addElapsedInclusive(mInclusiveCpuTime, mInclusiveRealTime, |
| mIsRecursive, mCaller); |
| } |
| |
| public static final class TraceAction { |
| public static final int ACTION_ENTER = 0; |
| public static final int ACTION_EXIT = 1; |
| |
| public final int mAction; |
| public final Call mCall; |
| |
| public TraceAction(int action, Call call) { |
| mAction = action; |
| mCall = call; |
| } |
| } |
| } |