From: Dam Sunwoo Date: Thu, 17 Oct 2013 15:20:45 +0000 (-0500) Subject: dev: Add option to disable framebuffer .bmp dump in run folder X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ad614bf24da852ecd28c03a5bcb72ecd24b37238;p=gem5.git 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. --- 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;