From ad614bf24da852ecd28c03a5bcb72ecd24b37238 Mon Sep 17 00:00:00 2001 From: Dam Sunwoo Date: Thu, 17 Oct 2013 10:20:45 -0500 Subject: [PATCH] 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(-) diff --git a/src/dev/arm/RealView.py b/src/dev/arm/RealView.py index 167108850e..b3c14580ea 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 c5daebc9be..349b246c26 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 ab4df5ed66..ba22cc1639 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 c3d684f29e..6abc9b4acf 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 a994067154..603cf943fd 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;