stats.cc revision 10458
110458Sandreas.hansson@arm.com/* 210458Sandreas.hansson@arm.com * Copyright (c) 2014 ARM Limited 310458Sandreas.hansson@arm.com * All rights reserved 410458Sandreas.hansson@arm.com * 510458Sandreas.hansson@arm.com * The license below extends only to copyright in the software and shall 610458Sandreas.hansson@arm.com * not be construed as granting a license to any other intellectual 710458Sandreas.hansson@arm.com * property including but not limited to intellectual property relating 810458Sandreas.hansson@arm.com * to a hardware implementation of the functionality of the software 910458Sandreas.hansson@arm.com * licensed hereunder. You may use the software subject to the license 1010458Sandreas.hansson@arm.com * terms below provided that you ensure that this notice is replicated 1110458Sandreas.hansson@arm.com * unmodified and in its entirety in all distributions of the software, 1210458Sandreas.hansson@arm.com * modified or unmodified, in source code or in binary form. 1310458Sandreas.hansson@arm.com * 1410458Sandreas.hansson@arm.com * Redistribution and use in source and binary forms, with or without 1510458Sandreas.hansson@arm.com * modification, are permitted provided that the following conditions are 1610458Sandreas.hansson@arm.com * met: redistributions of source code must retain the above copyright 1710458Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer; 1810458Sandreas.hansson@arm.com * redistributions in binary form must reproduce the above copyright 1910458Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer in the 2010458Sandreas.hansson@arm.com * documentation and/or other materials provided with the distribution; 2110458Sandreas.hansson@arm.com * neither the name of the copyright holders nor the names of its 2210458Sandreas.hansson@arm.com * contributors may be used to endorse or promote products derived from 2310458Sandreas.hansson@arm.com * this software without specific prior written permission. 2410458Sandreas.hansson@arm.com * 2510458Sandreas.hansson@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2610458Sandreas.hansson@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2710458Sandreas.hansson@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2810458Sandreas.hansson@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2910458Sandreas.hansson@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 3010458Sandreas.hansson@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 3110458Sandreas.hansson@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 3210458Sandreas.hansson@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 3310458Sandreas.hansson@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 3410458Sandreas.hansson@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 3510458Sandreas.hansson@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3610458Sandreas.hansson@arm.com * 3710458Sandreas.hansson@arm.com * Authors: Andrew Bardsley 3810458Sandreas.hansson@arm.com */ 3910458Sandreas.hansson@arm.com 4010458Sandreas.hansson@arm.com/** 4110458Sandreas.hansson@arm.com * @file 4210458Sandreas.hansson@arm.com * 4310458Sandreas.hansson@arm.com * C++-only configuration stats handling example 4410458Sandreas.hansson@arm.com * 4510458Sandreas.hansson@arm.com * Register with: Stats::registerHandlers(statsReset, statsDump) 4610458Sandreas.hansson@arm.com */ 4710458Sandreas.hansson@arm.com 4810458Sandreas.hansson@arm.com#include "base/statistics.hh" 4910458Sandreas.hansson@arm.com#include "stats.hh" 5010458Sandreas.hansson@arm.com 5110458Sandreas.hansson@arm.comnamespace CxxConfig 5210458Sandreas.hansson@arm.com{ 5310458Sandreas.hansson@arm.com 5410458Sandreas.hansson@arm.comvoid statsPrepare() 5510458Sandreas.hansson@arm.com{ 5610458Sandreas.hansson@arm.com std::list<Stats::Info *> stats = Stats::statsList(); 5710458Sandreas.hansson@arm.com 5810458Sandreas.hansson@arm.com /* gather_stats -> prepare */ 5910458Sandreas.hansson@arm.com for (auto i = stats.begin(); i != stats.end(); ++i) 6010458Sandreas.hansson@arm.com (*i)->prepare(); 6110458Sandreas.hansson@arm.com} 6210458Sandreas.hansson@arm.com 6310458Sandreas.hansson@arm.comvoid statsDump() 6410458Sandreas.hansson@arm.com{ 6510458Sandreas.hansson@arm.com std::cerr << "Stats dump\n"; 6610458Sandreas.hansson@arm.com 6710458Sandreas.hansson@arm.com Stats::processDumpQueue(); 6810458Sandreas.hansson@arm.com 6910458Sandreas.hansson@arm.com std::list<Stats::Info *> stats = Stats::statsList(); 7010458Sandreas.hansson@arm.com 7110458Sandreas.hansson@arm.com statsPrepare(); 7210458Sandreas.hansson@arm.com 7310458Sandreas.hansson@arm.com /* gather_stats -> convert_value */ 7410458Sandreas.hansson@arm.com for (auto i = stats.begin(); i != stats.end(); ++i) { 7510458Sandreas.hansson@arm.com Stats::Info *stat = *i; 7610458Sandreas.hansson@arm.com 7710458Sandreas.hansson@arm.com Stats::ScalarInfo *scalar = dynamic_cast<Stats::ScalarInfo *>(stat); 7810458Sandreas.hansson@arm.com Stats::VectorInfo *vector = dynamic_cast<Stats::VectorInfo *>(stat); 7910458Sandreas.hansson@arm.com 8010458Sandreas.hansson@arm.com if (scalar) { 8110458Sandreas.hansson@arm.com std::cerr << "SCALAR " << stat->name << ' ' 8210458Sandreas.hansson@arm.com << scalar->value() << '\n'; 8310458Sandreas.hansson@arm.com } else if (vector) { 8410458Sandreas.hansson@arm.com Stats::VResult results = vector->value(); 8510458Sandreas.hansson@arm.com 8610458Sandreas.hansson@arm.com unsigned int index = 0; 8710458Sandreas.hansson@arm.com for (auto e = results.begin(); e != results.end(); ++e) { 8810458Sandreas.hansson@arm.com std::cerr << "VECTOR " << stat->name << '[' << index 8910458Sandreas.hansson@arm.com << "] " << (*e) << '\n'; 9010458Sandreas.hansson@arm.com index++; 9110458Sandreas.hansson@arm.com } 9210458Sandreas.hansson@arm.com std::cerr << "VTOTAL " << stat->name << ' ' 9310458Sandreas.hansson@arm.com << vector->total() << '\n'; 9410458Sandreas.hansson@arm.com } else { 9510458Sandreas.hansson@arm.com std::cerr << "?????? " << stat->name << '\n'; 9610458Sandreas.hansson@arm.com } 9710458Sandreas.hansson@arm.com } 9810458Sandreas.hansson@arm.com} 9910458Sandreas.hansson@arm.com 10010458Sandreas.hansson@arm.comvoid statsReset() 10110458Sandreas.hansson@arm.com{ 10210458Sandreas.hansson@arm.com std::cerr << "Stats reset\n"; 10310458Sandreas.hansson@arm.com 10410458Sandreas.hansson@arm.com Stats::processResetQueue(); 10510458Sandreas.hansson@arm.com} 10610458Sandreas.hansson@arm.com 10710458Sandreas.hansson@arm.comvoid statsEnable() 10810458Sandreas.hansson@arm.com{ 10910458Sandreas.hansson@arm.com std::list<Stats::Info *> stats = Stats::statsList(); 11010458Sandreas.hansson@arm.com 11110458Sandreas.hansson@arm.com for (auto i = stats.begin(); i != stats.end(); ++i) 11210458Sandreas.hansson@arm.com (*i)->enable(); 11310458Sandreas.hansson@arm.com} 11410458Sandreas.hansson@arm.com 11510458Sandreas.hansson@arm.com} 116