diff options
author | Andreas Sandberg <andreas.sandberg@arm.com> | 2015-09-11 15:56:09 +0100 |
---|---|---|
committer | Andreas Sandberg <andreas.sandberg@arm.com> | 2015-09-11 15:56:09 +0100 |
commit | a1517867415abe0705d195bbe4cf62cc7fa03e47 (patch) | |
tree | c3388a37379ccf1110492f7b451912d0b8644461 | |
parent | f7055e9215106fbd8297083298a815ef7098a028 (diff) | |
download | gem5-a1517867415abe0705d195bbe4cf62cc7fa03e47.tar.xz |
dev: Add an underrun statistic to the HDLCD controller
Add a stat that counts buffer underruns in the HDLCD controller. The
stat counts at most one underrun per frame since the controller aborts
the current frame if it underruns.
-rw-r--r-- | src/dev/arm/hdlcd.cc | 13 | ||||
-rw-r--r-- | src/dev/arm/hdlcd.hh | 7 |
2 files changed, 20 insertions, 0 deletions
diff --git a/src/dev/arm/hdlcd.cc b/src/dev/arm/hdlcd.cc index 84df24472..2c402b00a 100644 --- a/src/dev/arm/hdlcd.cc +++ b/src/dev/arm/hdlcd.cc @@ -95,6 +95,18 @@ HDLcd::~HDLcd() } void +HDLcd::regStats() +{ + using namespace Stats; + + stats.underruns + .name(name() + ".underruns") + .desc("number of buffer underruns") + .flags(nozero) + ; +} + +void HDLcd::serialize(CheckpointOut &cp) const { DPRINTF(Checkpoint, "Serializing ARM HDLCD\n"); @@ -503,6 +515,7 @@ void HDLcd::pxlUnderrun() { DPRINTF(HDLcd, "Buffer underrun, stopping DMA fill.\n"); + ++stats.underruns; intRaise(INT_UNDERRUN); dmaEngine->abortFrame(); } diff --git a/src/dev/arm/hdlcd.hh b/src/dev/arm/hdlcd.hh index 3a83c6ad4..cb47b8522 100644 --- a/src/dev/arm/hdlcd.hh +++ b/src/dev/arm/hdlcd.hh @@ -95,6 +95,8 @@ class HDLcd: public AmbaDmaDevice HDLcd(const HDLcdParams *p); ~HDLcd(); + void regStats() M5_ATTR_OVERRIDE; + void serialize(CheckpointOut &cp) const M5_ATTR_OVERRIDE; void unserialize(CheckpointIn &cp) M5_ATTR_OVERRIDE; @@ -381,6 +383,11 @@ class HDLcd: public AmbaDmaDevice }; std::unique_ptr<DmaEngine> dmaEngine; + + protected: // Statistics + struct { + Stats::Scalar underruns; + } stats; }; #endif |