From ad614bf24da852ecd28c03a5bcb72ecd24b37238 Mon Sep 17 00:00:00 2001 From: Dam Sunwoo Date: Thu, 17 Oct 2013 10:20:45 -0500 Subject: dev: Add option to disable framebuffer .bmp dump in run folder There is an option to enable/disable all framebuffer dumps, but the last frame always gets dumped in the run folder with no other way to disable it. These files can add up very quickly running many experiments. This patch adds an option to disable them. The default behavior remains unchanged. --- src/dev/arm/RealView.py | 3 +++ src/dev/arm/hdlcd.cc | 17 ++++++++++------- src/dev/arm/hdlcd.hh | 2 ++ src/dev/arm/pl111.cc | 18 ++++++++++-------- src/dev/arm/pl111.hh | 2 ++ 5 files changed, 27 insertions(+), 15 deletions(-) (limited to 'src/dev/arm') diff --git a/src/dev/arm/RealView.py b/src/dev/arm/RealView.py index 167108850..b3c14580e 100644 --- a/src/dev/arm/RealView.py +++ b/src/dev/arm/RealView.py @@ -139,6 +139,8 @@ class Pl111(AmbaDmaDevice): pixel_clock = Param.Clock('24MHz', "Pixel clock") vnc = Param.VncInput(Parent.any, "Vnc server for remote frame buffer display") amba_id = 0x00141111 + enable_capture = Param.Bool(True, "capture frame to system.framebuffer.bmp") + class HDLcd(AmbaDmaDevice): type = 'HDLcd' @@ -149,6 +151,7 @@ class HDLcd(AmbaDmaDevice): vnc = Param.VncInput(Parent.any, "Vnc server for remote frame buffer " "display") amba_id = 0x00141000 + enable_capture = Param.Bool(True, "capture frame to system.framebuffer.bmp") class RealView(Platform): type = 'RealView' diff --git a/src/dev/arm/hdlcd.cc b/src/dev/arm/hdlcd.cc index c5daebc9b..349b246c2 100644 --- a/src/dev/arm/hdlcd.cc +++ b/src/dev/arm/hdlcd.cc @@ -72,7 +72,8 @@ HDLcd::HDLcd(const Params *p) startFrameEvent(this), endFrameEvent(this), renderPixelEvent(this), fillPixelBufferEvent(this), intEvent(this), dmaDoneEventAll(MAX_OUTSTANDING_DMA_REQ_CAPACITY, this), - dmaDoneEventFree(MAX_OUTSTANDING_DMA_REQ_CAPACITY) + dmaDoneEventFree(MAX_OUTSTANDING_DMA_REQ_CAPACITY), + enableCapture(p->enable_capture) { pioSize = 0xFFFF; @@ -560,13 +561,15 @@ HDLcd::endFrame() { if (vnc) vnc->setDirty(); - if (!pic) - pic = simout.create(csprintf("%s.framebuffer.bmp", sys->name()), true); + if (enableCapture) { + if (!pic) + pic = simout.create(csprintf("%s.framebuffer.bmp", sys->name()), true); - assert(bmp); - assert(pic); - pic->seekp(0); - bmp->write(pic); + assert(bmp); + assert(pic); + pic->seekp(0); + bmp->write(pic); + } // start the next frame frameUnderway = false; diff --git a/src/dev/arm/hdlcd.hh b/src/dev/arm/hdlcd.hh index ab4df5ed6..ba22cc163 100644 --- a/src/dev/arm/hdlcd.hh +++ b/src/dev/arm/hdlcd.hh @@ -474,6 +474,8 @@ class HDLcd: public AmbaDmaDevice std::vector dmaDoneEventFree; /**@}*/ + bool enableCapture; + public: typedef HDLcdParams Params; diff --git a/src/dev/arm/pl111.cc b/src/dev/arm/pl111.cc index c3d684f29..6abc9b4ac 100644 --- a/src/dev/arm/pl111.cc +++ b/src/dev/arm/pl111.cc @@ -69,7 +69,7 @@ Pl111::Pl111(const Params *p) waterMark(0), dmaPendingNum(0), readEvent(this), fillFifoEvent(this), dmaDoneEventAll(maxOutstandingDma, this), dmaDoneEventFree(maxOutstandingDma), - intEvent(this) + intEvent(this), enableCapture(p->enable_capture) { pioSize = 0xFFFF; @@ -497,15 +497,17 @@ Pl111::dmaDone() if (vnc) vnc->setDirty(); - DPRINTF(PL111, "-- write out frame buffer into bmp\n"); + if (enableCapture) { + DPRINTF(PL111, "-- write out frame buffer into bmp\n"); - if (!pic) - pic = simout.create(csprintf("%s.framebuffer.bmp", sys->name()), true); + if (!pic) + pic = simout.create(csprintf("%s.framebuffer.bmp", sys->name()), true); - assert(bmp); - assert(pic); - pic->seekp(0); - bmp->write(pic); + assert(bmp); + assert(pic); + pic->seekp(0); + bmp->write(pic); + } // schedule the next read based on when the last frame started // and the desired fps (i.e. maxFrameTime), we turn the diff --git a/src/dev/arm/pl111.hh b/src/dev/arm/pl111.hh index a99406715..603cf943f 100644 --- a/src/dev/arm/pl111.hh +++ b/src/dev/arm/pl111.hh @@ -348,6 +348,8 @@ class Pl111: public AmbaDmaDevice /** Wrapper to create an event out of the interrupt */ EventWrapper intEvent; + bool enableCapture; + public: typedef Pl111Params Params; -- cgit v1.2.3