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 "../alloc/allocObjectMethod.h" 00036 #include "../prof/prof.h" 00037 #include "../alloc/allocObject.h" 00038 #include "../alloc/allocObjectTrace.h" 00039 00040 #ifdef USE_ALLOCATOR 00041 Allocator AllocObjectMethod::_allocator; 00042 #endif 00043 00044 void AllocObjectMethod::addMemoryStat( jint size) { 00045 00046 if( !modified()) { 00047 00048 AllocAbstractStatThreadObject::addMemoryStat( size); 00049 00050 method->addMemoryStat( size); 00051 object->addMemoryStat( size); 00052 } 00053 } 00054 00055 void AllocObjectMethod::subMemoryStat( jint size) { 00056 00057 if( !modified()) { 00058 00059 AllocAbstractStatThreadObject::subMemoryStat( size); 00060 00061 method->subMemoryStat( size); 00062 object->subMemoryStat( size); 00063 } 00064 } 00065 00066 void AllocObjectMethod::clearFlag() { 00067 00068 AllocAbstractStatThreadObject::clearFlag(); 00069 00070 object->clearFlag(); 00071 } 00072 00073 void AllocObjectMethod::deactivate() { 00074 00075 Prof::prof().activeAllocObjectMethods.removeNoRehash(this); 00076 00077 AllocObjectTrace* ot = objectTraces.first(); 00078 while (ot) { 00079 ot->deactivate(); 00080 ot = objectTraces.next(ot); 00081 } 00082 } 00083 00084 const AllocObjectMethodKey& AllocObjectMethod::getKey(AllocObjectMethodKey& key) { 00085 00086 object->getKey(key.objectKey); 00087 method->getKey(key.methodId); 00088 return key; 00089 } 00090 00091 int AllocObjectMethod::operator==(const AllocObjectMethodKey& key) { 00092 00093 return (*object == key.objectKey) && (*method == key.methodId); 00094 } 00095 00096 int AllocObjectMethod::hashKey(const AllocObjectMethodKey& key) { 00097 00098 return AllocObject::hashKey(key.objectKey) ^ Method::hashKey(key.methodId); 00099 } 00100 00101 int AllocObjectMethod::isActive() { 00102 00103 return (method->isActive() && object->isActive()); 00104 } 00105 00106 void AllocObjectMethod::setUnchanged() { 00107 00108 IdObject::setUnchanged(); 00109 clearDataChanged(); 00110 }