⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 events.cc

📁 linux下基于c++的处理器仿真平台。具有处理器流水线
💻 CC
字号:
/* * Copyright (c) 2004, 2005 * The Regents of The University of Michigan * All Rights Reserved * * This code is part of the M5 simulator, developed by Nathan Binkert, * Erik Hallnor, Steve Raasch, and Steve Reinhardt, with contributions * from Ron Dreslinski, Dave Greene, Lisa Hsu, Kevin Lim, Ali Saidi, * and Andrew Schultz. * * Permission is granted to use, copy, create derivative works and * redistribute this software and such derivative works for any * purpose, so long as the copyright notice above, this grant of * permission, and the disclaimer below appear in all copies made; and * so long as the name of The University of Michigan is not used in * any advertising or publicity pertaining to the use or distribution * of this software without specific, written prior authorization. * * THIS SOFTWARE IS PROVIDED AS IS, WITHOUT REPRESENTATION FROM THE * UNIVERSITY OF MICHIGAN AS TO ITS FITNESS FOR ANY PURPOSE, AND * WITHOUT WARRANTY BY THE UNIVERSITY OF MICHIGAN OF ANY KIND, EITHER * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. THE REGENTS OF THE UNIVERSITY OF MICHIGAN SHALL NOT BE * LIABLE FOR ANY DAMAGES, INCLUDING DIRECT, SPECIAL, INDIRECT, * INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WITH RESPECT TO ANY CLAIM * ARISING OUT OF OR IN CONNECTION WITH THE USE OF THE SOFTWARE, EVEN * IF IT HAS BEEN OR IS HEREAFTER ADVISED OF THE POSSIBILITY OF SUCH * DAMAGES. */#include <vector>#include "base/stats/events.hh"#if USE_MYSQL#include "base/cprintf.hh"#include "base/misc.hh"#include "base/mysql.hh"#include "base/stats/mysql.hh"#include "base/stats/mysql_run.hh"#include "base/str.hh"#endif#include "base/match.hh"#include "sim/host.hh"#include "sim/sim_object.hh"#include "sim/root.hh"using namespace std;namespace Stats {Tick EventStart = ULL(0x7fffffffffffffff);ObjectMatch event_ignore;#if USE_MYSQLclass InsertEvent{  private:    char *query;    int size;    bool first;    static const int maxsize = 1024*1024;    typedef map<string, uint32_t> event_map_t;    event_map_t events;    MySQL::Connection &mysql;    uint16_t run;  public:    InsertEvent()	: mysql(MySqlDB.conn()), run(MySqlDB.run())    {	query = new char[maxsize + 1];	size = 0;	first = true;	flush();    }    ~InsertEvent()    {	flush();    }    void flush();    void insert(const string &stat);};voidInsertEvent::insert(const string &stat){    assert(mysql.connected());    event_map_t::iterator i = events.find(stat);    uint32_t event;    if (i == events.end()) {	mysql.query(	    csprintf("SELECT en_id "		     "from event_names "		     "where en_name=\"%s\"",		     stat));	MySQL::Result result = mysql.store_result();	if (!result)	    panic("could not get a run\n%s\n", mysql.error);	assert(result.num_fields() == 1);	MySQL::Row row = result.fetch_row();	if (row) {	    if (!to_number(row[0], event))		panic("invalid event id: %s\n", row[0]);	} else {	    mysql.query(		csprintf("INSERT INTO "			 "event_names(en_name)"			 "values(\"%s\")",			 stat));	    if (mysql.error)		panic("could not get a run\n%s\n", mysql.error);	    event = mysql.insert_id();	}    } else {	event = (*i).second;    }    if (size + 1024 > maxsize)	flush();    if (!first) {	query[size++] = ',';	query[size] = '\0';    }    first = false;    size += sprintf(query + size, "(%u,%u,%llu)",		    event, run, (unsigned long long)curTick);}voidInsertEvent::flush(){    static const char query_header[] = "INSERT INTO "	"events(ev_event, ev_run, ev_tick)"	"values";    if (size) {	MySQL::Connection &mysql = MySqlDB.conn();	assert(mysql.connected());	mysql.query(query);    }    query[0] = '\0';    size = sizeof(query_header);    first = true;    memcpy(query, query_header, size);}void__event(const string &stat){    static InsertEvent event;    event.insert(stat);}#endif/* namespace Stats */ }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -