summaryrefslogtreecommitdiff
path: root/src/mem/ruby/recorder
diff options
context:
space:
mode:
Diffstat (limited to 'src/mem/ruby/recorder')
-rw-r--r--src/mem/ruby/recorder/CacheRecorder.cc34
-rw-r--r--src/mem/ruby/recorder/CacheRecorder.hh8
-rw-r--r--src/mem/ruby/recorder/TraceRecord.hh12
-rw-r--r--src/mem/ruby/recorder/Tracer.cc1
-rw-r--r--src/mem/ruby/recorder/Tracer.hh1
5 files changed, 20 insertions, 36 deletions
diff --git a/src/mem/ruby/recorder/CacheRecorder.cc b/src/mem/ruby/recorder/CacheRecorder.cc
index 32db211b6..1d08eef12 100644
--- a/src/mem/ruby/recorder/CacheRecorder.cc
+++ b/src/mem/ruby/recorder/CacheRecorder.cc
@@ -26,31 +26,21 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include <algorithm>
+
#include "gzstream.hh"
-#include "mem/gems_common/PrioHeap.hh"
#include "mem/ruby/eventqueue/RubyEventQueue.hh"
#include "mem/ruby/recorder/CacheRecorder.hh"
-#include "mem/ruby/recorder/TraceRecord.hh"
using namespace std;
-CacheRecorder::CacheRecorder()
-{
- m_records_ptr = new PrioHeap<TraceRecord>;
-}
-
-CacheRecorder::~CacheRecorder()
-{
- delete m_records_ptr;
-}
-
void
CacheRecorder::addRecord(Sequencer* sequencer, const Address& data_addr,
const Address& pc_addr, RubyRequestType type, Time time)
{
- m_records_ptr->
- insert(TraceRecord(sequencer, data_addr, pc_addr, type, time));
+ TraceRecord rec(sequencer, data_addr, pc_addr, type, time);
+ m_records.push_back(rec);
}
int
@@ -62,13 +52,15 @@ CacheRecorder::dumpRecords(string filename)
return 0;
}
- int counter = 0;
- while (m_records_ptr->size() != 0) {
- TraceRecord record = m_records_ptr->extractMin();
- record.output(out);
- counter++;
- }
- return counter;
+ std::sort(m_records.begin(), m_records.end(), greater<TraceRecord>());
+
+ int size = m_records.size();
+ for (int i = 0; i < size; ++i)
+ m_records[i].output(out);
+
+ m_records.clear();
+
+ return size;
}
void
diff --git a/src/mem/ruby/recorder/CacheRecorder.hh b/src/mem/ruby/recorder/CacheRecorder.hh
index 18c246c9f..14066c387 100644
--- a/src/mem/ruby/recorder/CacheRecorder.hh
+++ b/src/mem/ruby/recorder/CacheRecorder.hh
@@ -36,13 +36,14 @@
#include <iostream>
#include <string>
+#include <vector>
#include "mem/protocol/CacheRequestType.hh"
#include "mem/ruby/common/Global.hh"
#include "mem/ruby/libruby_internal.hh"
#include "mem/ruby/system/NodeID.hh"
+#include "mem/ruby/recorder/TraceRecord.hh"
-template <class TYPE> class PrioHeap;
class Address;
class TraceRecord;
class Sequencer;
@@ -50,9 +51,6 @@ class Sequencer;
class CacheRecorder
{
public:
- CacheRecorder();
- ~CacheRecorder();
-
void addRecord(Sequencer* sequencer, const Address& data_addr,
const Address& pc_addr, RubyRequestType type, Time time);
int dumpRecords(std::string filename);
@@ -64,7 +62,7 @@ class CacheRecorder
CacheRecorder(const CacheRecorder& obj);
CacheRecorder& operator=(const CacheRecorder& obj);
- PrioHeap<TraceRecord>* m_records_ptr;
+ std::vector<TraceRecord> m_records;
};
inline std::ostream&
diff --git a/src/mem/ruby/recorder/TraceRecord.hh b/src/mem/ruby/recorder/TraceRecord.hh
index 98e78b20e..ed066debb 100644
--- a/src/mem/ruby/recorder/TraceRecord.hh
+++ b/src/mem/ruby/recorder/TraceRecord.hh
@@ -60,12 +60,6 @@ class TraceRecord
TraceRecord(const TraceRecord& obj);
TraceRecord& operator=(const TraceRecord& obj);
- bool
- node_less_then_eq(const TraceRecord& rec) const
- {
- return this->m_time <= rec.m_time;
- }
-
void issueRequest() const;
void print(std::ostream& out) const;
@@ -73,6 +67,8 @@ class TraceRecord
bool input(std::istream& in);
private:
+ friend bool operator>(const TraceRecord& n1, const TraceRecord& n2);
+
Sequencer* m_sequencer_ptr;
Time m_time;
Address m_data_address;
@@ -81,9 +77,9 @@ class TraceRecord
};
inline bool
-node_less_then_eq(const TraceRecord& n1, const TraceRecord& n2)
+operator>(const TraceRecord& n1, const TraceRecord& n2)
{
- return n1.node_less_then_eq(n2);
+ return n1.m_time > n2.m_time;
}
inline std::ostream&
diff --git a/src/mem/ruby/recorder/Tracer.cc b/src/mem/ruby/recorder/Tracer.cc
index 23dafdb6c..bff59a832 100644
--- a/src/mem/ruby/recorder/Tracer.cc
+++ b/src/mem/ruby/recorder/Tracer.cc
@@ -27,7 +27,6 @@
*/
#include "base/cprintf.hh"
-#include "mem/gems_common/PrioHeap.hh"
#include "mem/ruby/eventqueue/RubyEventQueue.hh"
#include "mem/ruby/recorder/TraceRecord.hh"
#include "mem/ruby/recorder/Tracer.hh"
diff --git a/src/mem/ruby/recorder/Tracer.hh b/src/mem/ruby/recorder/Tracer.hh
index d468b4920..4b81d6121 100644
--- a/src/mem/ruby/recorder/Tracer.hh
+++ b/src/mem/ruby/recorder/Tracer.hh
@@ -46,7 +46,6 @@
#include "params/RubyTracer.hh"
#include "sim/sim_object.hh"
-template <class TYPE> class PrioHeap;
class Address;
class TraceRecord;
class Sequencer;