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 /src/dev/arm | |
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.
Diffstat (limited to 'src/dev/arm')
-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 |