00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 #ifndef COH_OBJECT_COUNT_HEAP_ANALYZER_HPP
00017 #define COH_OBJECT_COUNT_HEAP_ANALYZER_HPP
00018 
00019 #include "coherence/lang/compatibility.hpp"
00020 
00021 #include "coherence/lang/HeapAnalyzer.hpp"
00022 #include "coherence/native/NativeAtomic64.hpp"
00023 
00024 
00025 
00026 COH_OPEN_NAMESPACE2(coherence,lang)
00027 
00028 using coherence::native::NativeAtomic64;
00029 
00030 
00031 
00032 
00033 
00034 
00035 
00036 
00037 
00038 
00039 
00040 
00041 class COH_EXPORT ObjectCountHeapAnalyzer
00042     : public class_spec<ObjectCountHeapAnalyzer,
00043         extends<Object>,
00044         implements<HeapAnalyzer> >
00045     {
00046     friend class factory<ObjectCountHeapAnalyzer>;
00047 
00048     
00049 
00050     protected:
00051 
00052 
00053 
00054 
00055 
00056         ObjectCountHeapAnalyzer();
00057 
00058 
00059     
00060 
00061     public:
00062 
00063 
00064 
00065         class COH_EXPORT Snapshot
00066             : public class_spec<Snapshot,
00067                 extends<Object>,
00068                 implements<HeapAnalyzer::Snapshot> >
00069             {
00070             friend class factory<Snapshot>;
00071 
00072             
00073 
00074             protected:
00075 
00076 
00077 
00078 
00079 
00080 
00081 
00082                 Snapshot(int64_t cObjects);
00083 
00084             
00085 
00086             public:
00087 
00088 
00089 
00090                 virtual int64_t getObjectCount() const;
00091 
00092 
00093 
00094 
00095                 virtual HeapAnalyzer::Snapshot::View delta(
00096                         HeapAnalyzer::Snapshot::View vThat) const;
00097 
00098             
00099 
00100             public:
00101 
00102 
00103 
00104                 virtual TypedHandle<const String> toString() const;
00105 
00106             
00107 
00108             protected:
00109 
00110 
00111 
00112                 int64_t m_cObjects;
00113             };
00114 
00115 
00116     
00117 
00118     public:
00119 
00120 
00121 
00122         virtual HeapAnalyzer::Snapshot::View capture() const;
00123 
00124 
00125 
00126 
00127         virtual HeapAnalyzer::Snapshot::View delta(
00128                 HeapAnalyzer::Snapshot::View vSnap) const;
00129 
00130 
00131 
00132 
00133         virtual int64_t getObjectCount() const;
00134 
00135 
00136 
00137 
00138         virtual int64_t getImmortalCount() const;
00139 
00140     protected:
00141 
00142 
00143 
00144         virtual void registerObject(const Object& o);
00145 
00146 
00147 
00148 
00149         virtual void unregisterObject(const Object& o);
00150 
00151 
00152 
00153 
00154         virtual void registerImmortal(const Object& o);
00155 
00156 
00157     
00158 
00159     public:
00160 
00161 
00162 
00163         virtual TypedHandle<const String> toString() const;
00164 
00165 
00166     
00167 
00168     protected:
00169 
00170 
00171 
00172         static const size_t s_cCount = 257;
00173 
00174 
00175 
00176 
00177         NativeAtomic64 m_acObjects[s_cCount];
00178 
00179 
00180 
00181 
00182         NativeAtomic64 m_cImmortals;
00183     };
00184 
00185 COH_CLOSE_NAMESPACE2
00186 
00187 #endif // COH_OBJECT_COUNT_HEAP_ANALYZER_HPP