Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members  

cpuStack.cpp

00001 /*
00002  *                         Sun Public License Notice
00003  *
00004  * The contents of this file are subject to the Sun Public License
00005  * Version 1.0 (the "License"); you may not use this file except
00006  * in compliance with the License. A copy of the License is available
00007  * at http://www.sun.com/
00008  *
00009  * The Original Code is the Java Profiler module.  The Initial Developers
00010  * of the Original Code are Jan Stola, Pavel Vacha, Michal Pise, Petr Luner,
00011  * Lukas Petru and Marek Przeczek.
00012  *
00013  * Portions created by Jan Stola are Copyright (C) 2000-2001.
00014  * All Rights Reserved.
00015  *
00016  * Portions created by Pavel Vacha are Copyright (C) 2000-2001.
00017  * All Rights Reserved.
00018  *
00019  * Portions created by Michal Pise are Copyright (C) 2000-2001.
00020  * All Rights Reserved.
00021  *
00022  * Portions created by Petr Luner are Copyright (C) 2000-2001.
00023  * All Rights Reserved.
00024  *
00025  * Portions created by Lukas Petru are Copyright (C) 2000-2001.
00026  * All Rights Reserved.
00027  *
00028  * Portions created by Marek Przeczek are Copyright (C) 2000-2001.
00029  * All Rights Reserved.
00030  *
00031  * Contributors: Jan Stola, Pavel Vacha, Michal Pise, Petr Luner,
00032  *               Lukas Petru and Marek Przeczek.
00033  */
00034 
00035 #include "../cpu/cpuStack.h"
00036 
00037 CpuStack::~CpuStack() {
00038 
00039         if (stack) delete[] stack;
00040 }
00041 
00042 void CpuStack::push(JVMPI_CallFrame& callFrame, jlong entryTime) {
00043 
00044         if (++top == size) grow();
00045 
00046         stack[top].callFrame = callFrame;
00047         stack[top].entryTime = entryTime;
00048         stack[top].calleesTime = (jlong)0;
00049 }
00050 
00051 void CpuStack::pop(jlong exitTime, jlong& totalTime, jlong& pureTime) {
00052 
00053         totalTime = exitTime - stack[top].entryTime;
00054         pureTime = totalTime - stack[top].calleesTime;
00055         top--;
00056 }
00057 
00058 int CpuStack::getTopCallTrace(int maxFrames, JVMPI_CallFrame* frames) const {
00059 
00060         int i;
00061         for (i = 0; (i < maxFrames) && (top - i >= 0); i++) {
00062                 frames[i] = stack[top - i].callFrame;
00063         }
00064         return i;
00065 }
00066 
00067 void CpuStack::grow() {
00068 
00069         long newSize = 2 * size + 10;
00070         Frame* newStack = new Frame[newSize];
00071 
00072         if (stack) {
00073                 memcpy(newStack, stack, size * sizeof(Frame));
00074                 delete[] stack;
00075         }
00076 
00077         stack = newStack;
00078         size = newSize;
00079 }

Generated on Mon Jan 28 14:53:26 2002 for Java Profiler Dynamic Library by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001