/* * Copyright (c) 1999-2000, Eric Moon. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions, and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions, and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // ProfileTarget.cpp #include "ProfileTarget.h" #include #include #include #include __USE_CORTEX_NAMESPACE // -------------------------------------------------------- // // ctor/dtor // -------------------------------------------------------- // ProfileTarget::~ProfileTarget() {} ProfileTarget::ProfileTarget() {} // -------------------------------------------------------- // // user operations // -------------------------------------------------------- // void ProfileTarget::clear() { m_blockEntryMap.clear(); } // [e.moon 14oct99] moved prototype out of header bool operator<(const ProfileTarget::block_entry& a, const ProfileTarget::block_entry& b); bool operator<(const ProfileTarget::block_entry& a, const ProfileTarget::block_entry& b) { return b.elapsed < a.elapsed; } class fnDumpEntry { public: uint32 nameLength; BString maxPad; fnDumpEntry(uint32 _n) : nameLength(_n) { maxPad.SetTo(' ', nameLength); fprintf(stderr, " BLOCK%s COUNT ELAPSED AVERAGE\n" " ----------------------------------------------------------------------------\n", maxPad.String()); } void operator()(ProfileTarget::block_entry& entry) const { BString namePad; namePad.SetTo(' ', nameLength-strlen(entry.name)); fprintf(stderr, " %s:%s %8ld %8Ld %.4f\n", entry.name, namePad.String(), entry.count, entry.elapsed, (float)entry.elapsed/entry.count); } }; void ProfileTarget::dump() const { fprintf(stderr, "\nProfileTarget::dump()\n\n"); list sorted; uint32 nameLength = 0; for(block_entry_map::const_iterator it = m_blockEntryMap.begin(); it != m_blockEntryMap.end(); it++) { if((*it).first.Length() > nameLength) nameLength = (*it).first.Length(); sorted.push_back(block_entry()); sorted.back() = (*it).second; sorted.back().name = (*it).first.String(); } sorted.sort(); for_each(sorted.begin(), sorted.end(), fnDumpEntry(nameLength)); } // -------------------------------------------------------- // // profile-source operations // -------------------------------------------------------- // inline void ProfileTarget::addBlockEntry( const char* blockName, bigtime_t elapsed) { block_entry& e = m_blockEntryMap[blockName]; e.count++; e.elapsed += elapsed; } // END -- ProfileTarget.cpp --