dev: Add an underrun statistic to the HDLCD controller
authorAndreas Sandberg <andreas.sandberg@arm.com>
Fri, 11 Sep 2015 14:56:09 +0000 (15:56 +0100)
committerAndreas Sandberg <andreas.sandberg@arm.com>
Fri, 11 Sep 2015 14:56:09 +0000 (15:56 +0100)
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.

src/dev/arm/hdlcd.cc
src/dev/arm/hdlcd.hh

index 84df2447214539a689b224a63c6d12d01bc1cd4f..2c402b00a47223551b13990f44831b119c10af16 100644 (file)
@@ -94,6 +94,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
 {
@@ -503,6 +515,7 @@ void
 HDLcd::pxlUnderrun()
 {
     DPRINTF(HDLcd, "Buffer underrun, stopping DMA fill.\n");
+    ++stats.underruns;
     intRaise(INT_UNDERRUN);
     dmaEngine->abortFrame();
 }
index 3a83c6ad429f0b91e820d67d9aaf2461ad0ef291..cb47b85226235df47126cb00ea1650890375ab92 100644 (file)
@@ -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