CacheRecorder.hh revision 6890
14202Sbinkertn@umich.edu
24202Sbinkertn@umich.edu/*
34202Sbinkertn@umich.edu * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
44202Sbinkertn@umich.edu * All rights reserved.
54202Sbinkertn@umich.edu *
64202Sbinkertn@umich.edu * Redistribution and use in source and binary forms, with or without
74202Sbinkertn@umich.edu * modification, are permitted provided that the following conditions are
84202Sbinkertn@umich.edu * met: redistributions of source code must retain the above copyright
94202Sbinkertn@umich.edu * notice, this list of conditions and the following disclaimer;
104202Sbinkertn@umich.edu * redistributions in binary form must reproduce the above copyright
114202Sbinkertn@umich.edu * notice, this list of conditions and the following disclaimer in the
124202Sbinkertn@umich.edu * documentation and/or other materials provided with the distribution;
134202Sbinkertn@umich.edu * neither the name of the copyright holders nor the names of its
144202Sbinkertn@umich.edu * contributors may be used to endorse or promote products derived from
154202Sbinkertn@umich.edu * this software without specific prior written permission.
164202Sbinkertn@umich.edu *
174202Sbinkertn@umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
184202Sbinkertn@umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
194202Sbinkertn@umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
204202Sbinkertn@umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
214202Sbinkertn@umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
224202Sbinkertn@umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
234202Sbinkertn@umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
244202Sbinkertn@umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
254202Sbinkertn@umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
264202Sbinkertn@umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
274202Sbinkertn@umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
284202Sbinkertn@umich.edu */
294202Sbinkertn@umich.edu
304202Sbinkertn@umich.edu/*
314202Sbinkertn@umich.edu * $Id$
324202Sbinkertn@umich.edu *
334295Sbinkertn@umich.edu * Description: Recording cache requests made to a ruby cache at certain
344295Sbinkertn@umich.edu *              ruby time. Also dump the requests to a gziped file.
354295Sbinkertn@umich.edu *
364295Sbinkertn@umich.edu */
374295Sbinkertn@umich.edu
384295Sbinkertn@umich.edu#ifndef CACHERECORDER_H
394295Sbinkertn@umich.edu#define CACHERECORDER_H
404295Sbinkertn@umich.edu
414295Sbinkertn@umich.edu#include "mem/ruby/libruby_internal.hh"
424295Sbinkertn@umich.edu
434295Sbinkertn@umich.edu#include "mem/ruby/common/Global.hh"
444295Sbinkertn@umich.edu#include "mem/ruby/system/NodeID.hh"
454295Sbinkertn@umich.edu#include "mem/protocol/CacheRequestType.hh"
464295Sbinkertn@umich.edu
474295Sbinkertn@umich.edutemplate <class TYPE> class PrioHeap;
484295Sbinkertn@umich.educlass Address;
494295Sbinkertn@umich.educlass TraceRecord;
504295Sbinkertn@umich.educlass Sequencer;
514295Sbinkertn@umich.edu
524295Sbinkertn@umich.educlass CacheRecorder {
534202Sbinkertn@umich.edupublic:
544202Sbinkertn@umich.edu  // Constructors
554202Sbinkertn@umich.edu  CacheRecorder();
564202Sbinkertn@umich.edu
574202Sbinkertn@umich.edu  // Destructor
584202Sbinkertn@umich.edu  ~CacheRecorder();
594202Sbinkertn@umich.edu
604202Sbinkertn@umich.edu  // Public Methods
614202Sbinkertn@umich.edu  void addRecord(Sequencer* sequencer,
624202Sbinkertn@umich.edu                 const Address& data_addr,
634202Sbinkertn@umich.edu                 const Address& pc_addr,
644202Sbinkertn@umich.edu                 RubyRequestType type,
654202Sbinkertn@umich.edu                 Time time);
664202Sbinkertn@umich.edu  int dumpRecords(string filename);
674202Sbinkertn@umich.edu
684202Sbinkertn@umich.edu  void print(ostream& out) const;
694202Sbinkertn@umich.eduprivate:
704202Sbinkertn@umich.edu  // Private Methods
714202Sbinkertn@umich.edu
724202Sbinkertn@umich.edu  // Private copy constructor and assignment operator
734202Sbinkertn@umich.edu  CacheRecorder(const CacheRecorder& obj);
744202Sbinkertn@umich.edu  CacheRecorder& operator=(const CacheRecorder& obj);
754202Sbinkertn@umich.edu
764202Sbinkertn@umich.edu  // Data Members (m_ prefix)
774202Sbinkertn@umich.edu  PrioHeap<TraceRecord>* m_records_ptr;
784202Sbinkertn@umich.edu};
794202Sbinkertn@umich.edu
804202Sbinkertn@umich.edu// Output operator declaration
814202Sbinkertn@umich.eduostream& operator<<(ostream& out, const CacheRecorder& obj);
824202Sbinkertn@umich.edu
834202Sbinkertn@umich.edu// ******************* Definitions *******************
844202Sbinkertn@umich.edu
854202Sbinkertn@umich.edu// Output operator definition
864202Sbinkertn@umich.eduextern inline
874202Sbinkertn@umich.eduostream& operator<<(ostream& out, const CacheRecorder& obj)
884202Sbinkertn@umich.edu{
894202Sbinkertn@umich.edu  obj.print(out);
904202Sbinkertn@umich.edu  out << flush;
914202Sbinkertn@umich.edu  return out;
924202Sbinkertn@umich.edu}
934202Sbinkertn@umich.edu
944202Sbinkertn@umich.edu#endif //CACHERECORDER_H
954202Sbinkertn@umich.edu