[gem5-dev] Change in public/gem5[master]: config: Rework the SysPaths functions into functors.
Gabe Black has submitted this change and it was merged. ( https://gem5-review.googlesource.com/5341 ) Change subject: config: Rework the SysPaths functions into functors. .. config: Rework the SysPaths functions into functors. These functions were already being treated as psuedo objects and had properties assigned to them setting what their paths were. That's a bit unusual and made it less obvious what the code was doing, but also forced the "system" function to know what all the possible path searching functions were so that they'd have their "path" property initialized properly in a central location. This change introduces a PathSearcFunc class which encapsulates the mechanisms of the old code and makes it implicitly extensible so that other path searching functions which might look in other directories can be added in other places. Change-Id: I7be28e51481a06ec83997677af99927709b18003 Reviewed-on: https://gem5-review.googlesource.com/5341 Reviewed-by: Andreas SandbergMaintainer: Andreas Sandberg --- M configs/common/SysPaths.py 1 file changed, 28 insertions(+), 42 deletions(-) Approvals: Andreas Sandberg: Looks good to me, approved; Looks good to me, approved diff --git a/configs/common/SysPaths.py b/configs/common/SysPaths.py index 316fd03..c012846 100644 --- a/configs/common/SysPaths.py +++ b/configs/common/SysPaths.py @@ -27,55 +27,41 @@ # Authors: Ali Saidi import os, sys -from os.path import join as joinpath -from os import environ as env config_path = os.path.dirname(os.path.abspath(__file__)) config_root = os.path.dirname(config_path) -def searchpath(path, filename): -for p in path: -f = joinpath(p, filename) -if os.path.exists(f): -return f -raise IOError, "Can't find file '%s' on path." % filename +class PathSearchFunc(object): +_sys_paths = None -def disk(filename): -system() -return searchpath(disk.path, filename) +def __init__(self, *subdirs): +self._subdir = os.path.join(*subdirs) -def binary(filename): -system() -return searchpath(binary.path, filename) +def __call__(self, filename): +if self._sys_paths is None: +try: +paths = os.environ['M5_PATH'].split(':') +except KeyError: +paths = [ '/dist/m5/system', '/n/poolfs/z/dist/m5/system' ] -def script(filename): -system() -return searchpath(script.path, filename) +# expand '~' and '~user' in paths +paths = map(os.path.expanduser, paths) -def system(): -if not system.path: +# filter out non-existent directories +paths = filter(os.path.isdir, paths) + +if not paths: +raise IOError, "Can't find a path to system files." + +self._sys_paths = paths + +filepath = os.path.join(self._subdir, filename) +paths = (os.path.join(p, filepath) for p in self._sys_paths) try: -path = env['M5_PATH'].split(':') -except KeyError: -path = [ '/dist/m5/system', '/n/poolfs/z/dist/m5/system' ] +return next(p for p in paths if os.path.exists(p)) +except StopIteration: +raise IOError, "Can't find file '%s' on path." % filename -# expand '~' and '~user' in paths -path = map(os.path.expanduser, path) - -# filter out non-existent directories -system.path = filter(os.path.isdir, path) - -if not system.path: -raise IOError, "Can't find a path to system files." - -if not binary.path: -binary.path = [joinpath(p, 'binaries') for p in system.path] -if not disk.path: -disk.path = [joinpath(p, 'disks') for p in system.path] -if not script.path: -script.path = [joinpath(config_root, 'boot')] - -system.path = None -binary.path = None -disk.path = None -script.path = None +disk = PathSearchFunc('disks') +binary = PathSearchFunc('binaries') +script = PathSearchFunc('boot') -- To view, visit https://gem5-review.googlesource.com/5341 To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: master Gerrit-MessageType: merged Gerrit-Change-Id: I7be28e51481a06ec83997677af99927709b18003 Gerrit-Change-Number: 5341 Gerrit-PatchSet: 2 Gerrit-Owner: Gabe Black Gerrit-Assignee: Andreas Sandberg Gerrit-Reviewer: Andreas Sandberg Gerrit-Reviewer: Gabe Black ___ gem5-dev mailing list gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev
[gem5-dev] Change in public/gem5[master]: base: Introducing utility for writing raw data in png format
Giacomo Travaglini has submitted this change and it was merged. ( https://gem5-review.googlesource.com/5181 ) Change subject: base: Introducing utility for writing raw data in png format .. base: Introducing utility for writing raw data in png format Originally it was possible to use a Bitmap writer class for dumping a framebuffer snapshot in a .bmp file. This patch enables you to choose another format. In particular it implements the writing of PNG Images using libpng library. The latter has to be already installed in your machine, otherwise gem5 will default to the Bitmap format. This configurable writer has been introduced in the VNC frame dumping mechanism, which is storing changed frame buffers from the VNC server Change-Id: Id7e5763c82235f1ce90381c8486b85a7cce734ce Reviewed-by: Andreas SandbergReviewed-on: https://gem5-review.googlesource.com/5181 Reviewed-by: Jason Lowe-Power Maintainer: Andreas Sandberg --- M SConstruct A src/base/Graphics.py M src/base/SConscript R src/base/bmpwriter.cc R src/base/bmpwriter.hh A src/base/imgwriter.cc A src/base/imgwriter.hh A src/base/pngwriter.cc C src/base/pngwriter.hh M src/base/vnc/Vnc.py M src/base/vnc/vncinput.cc M src/base/vnc/vncinput.hh M src/base/vnc/vncserver.cc M src/base/vnc/vncserver.hh M src/dev/arm/hdlcd.hh M src/dev/arm/pl111.hh 16 files changed, 509 insertions(+), 103 deletions(-) Approvals: Jason Lowe-Power: Looks good to me, approved Andreas Sandberg: Looks good to me, approved diff --git a/SConstruct b/SConstruct index 95efb83..230232d 100755 --- a/SConstruct +++ b/SConstruct @@ -1,6 +1,6 @@ # -*- mode:python -*- -# Copyright (c) 2013, 2015, 2016 ARM Limited +# Copyright (c) 2013, 2015-2017 ARM Limited # All rights reserved. # # The license below extends only to copyright in the software and shall @@ -1134,6 +1134,14 @@ print "Warning: Header file not found." print " This host has no IEEE FP rounding mode control." +# Check for (libpng library needed if wanting to dump +# frame buffer image in png format) +have_png = conf.CheckHeader('png.h', '<>') +if not have_png: +print "Warning: Header file not found." +print " This host has no libpng library." +print " Disabling support for PNG framebuffers." + # Check if we should enable KVM-based hardware virtualization. The API # we rely on exists since version 2.6.36 of the kernel, but somehow # the KVM_API_VERSION does not reflect the change. We test for one of @@ -1278,8 +1286,11 @@ False), BoolVariable('USE_POSIX_CLOCK', 'Use POSIX Clocks', have_posix_clock), BoolVariable('USE_FENV', 'Use IEEE mode control', have_fenv), -BoolVariable('CP_ANNOTATE', 'Enable critical path annotation capability', False), -BoolVariable('USE_KVM', 'Enable hardware virtualized (KVM) CPU models', have_kvm), +BoolVariable('USE_PNG', 'Enable support for PNG images', have_png), +BoolVariable('CP_ANNOTATE', 'Enable critical path annotation capability', + False), +BoolVariable('USE_KVM', 'Enable hardware virtualized (KVM) CPU models', + have_kvm), BoolVariable('USE_TUNTAP', 'Enable using a tap device to bridge to the host network', have_tuntap), @@ -1293,7 +1304,8 @@ # These variables get exported to #defines in config/*.hh (see src/SConscript). export_vars += ['USE_FENV', 'SS_COMPATIBLE_FP', 'TARGET_ISA', 'TARGET_GPU_ISA', 'CP_ANNOTATE', 'USE_POSIX_CLOCK', 'USE_KVM', 'USE_TUNTAP', -'PROTOCOL', 'HAVE_PROTOBUF', 'HAVE_PERF_ATTR_EXCLUDE_HOST'] +'PROTOCOL', 'HAVE_PROTOBUF', 'HAVE_PERF_ATTR_EXCLUDE_HOST', +'USE_PNG'] ### # @@ -1486,6 +1498,14 @@ print "Warning: No IEEE FP rounding mode control in", variant_dir + "." print " FP results may deviate slightly from other platforms." +if not have_png and env['USE_PNG']: +print "Warning: not available; " \ + "forcing USE_PNG to False in", variant_dir + "." +env['USE_PNG'] = False + +if env['USE_PNG']: +env.Append(LIBS=['png']) + if env['EFENCE']: env.Append(LIBS=['efence']) diff --git a/src/base/Graphics.py b/src/base/Graphics.py new file mode 100644 index 000..c42882e --- /dev/null +++ b/src/base/Graphics.py @@ -0,0 +1,43 @@ +# Copyright (c) 2017 ARM Limited +# All rights reserved +# +# The license below extends only to copyright in the software and shall +# not be construed as granting a license to any other intellectual +# property including but not limited to intellectual property relating +# to a hardware implementation of the functionality of the software +# licensed hereunder. You may use the software subject to the
[gem5-dev] Change in public/gem5[master]: vnc: Default image writer type set to Auto
Giacomo Travaglini has submitted this change and it was merged. ( https://gem5-review.googlesource.com/5182 ) Change subject: vnc: Default image writer type set to Auto .. vnc: Default image writer type set to Auto This commit modifies the default behaviour of the vnc frame dumping process: rather than using 'Bitmap' as a default parameter value, it is using 'Auto'. Auto parameter is letting gem5 to choose the most efficient image format among the available ones. Change-Id: I3c8e2b5a34a5925d24892880ac362dfe38de36e3 Reviewed-by: Andreas SandbergReviewed-on: https://gem5-review.googlesource.com/5182 Reviewed-by: Jason Lowe-Power Maintainer: Andreas Sandberg --- M src/base/vnc/Vnc.py 1 file changed, 1 insertion(+), 1 deletion(-) Approvals: Jason Lowe-Power: Looks good to me, approved Andreas Sandberg: Looks good to me, approved diff --git a/src/base/vnc/Vnc.py b/src/base/vnc/Vnc.py index 0aed0dc..e440d10 100644 --- a/src/base/vnc/Vnc.py +++ b/src/base/vnc/Vnc.py @@ -45,7 +45,7 @@ cxx_header = "base/vnc/vncinput.hh" frame_capture = Param.Bool(False, "capture changed frames to files") img_format = Param.ImageFormat( -"Bitmap", "Format of the dumped Framebuffer" +"Auto", "Format of the dumped Framebuffer" ) class VncServer(VncInput): -- To view, visit https://gem5-review.googlesource.com/5182 To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: master Gerrit-MessageType: merged Gerrit-Change-Id: I3c8e2b5a34a5925d24892880ac362dfe38de36e3 Gerrit-Change-Number: 5182 Gerrit-PatchSet: 3 Gerrit-Owner: Giacomo Travaglini Gerrit-Reviewer: Andreas Sandberg Gerrit-Reviewer: Gabe Black Gerrit-Reviewer: Giacomo Travaglini Gerrit-Reviewer: Jason Lowe-Power ___ gem5-dev mailing list gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev
[gem5-dev] Change in public/gem5[master]: dev: Using Configurable image writer in HDLcd
Giacomo Travaglini has submitted this change and it was merged. ( https://gem5-review.googlesource.com/5183 ) Change subject: dev: Using Configurable image writer in HDLcd .. dev: Using Configurable image writer in HDLcd The fixed image writer (which was dumping .bmp images only) has been replaced by the configurable one in HDLcd device. Default format is Auto, which gives gem5 the freedom to choose the format it prefers. Change-Id: I0643266556bb10b43cdebd628f6daa2cd5e105dd Reviewed-by: Andreas SandbergReviewed-on: https://gem5-review.googlesource.com/5183 Reviewed-by: Jason Lowe-Power Maintainer: Andreas Sandberg --- M src/dev/arm/RealView.py M src/dev/arm/hdlcd.cc M src/dev/arm/hdlcd.hh 3 files changed, 17 insertions(+), 6 deletions(-) Approvals: Jason Lowe-Power: Looks good to me, approved Andreas Sandberg: Looks good to me, approved; Looks good to me, approved diff --git a/src/dev/arm/RealView.py b/src/dev/arm/RealView.py index 51aa1cf..08145bf 100644 --- a/src/dev/arm/RealView.py +++ b/src/dev/arm/RealView.py @@ -56,6 +56,7 @@ from EnergyCtrl import EnergyCtrl from ClockDomain import SrcClockDomain from SubSystem import SubSystem +from Graphics import ImageFormat # Platforms with KVM support should generally use in-kernel GIC # emulation. Use a GIC model that automatically switches between @@ -298,7 +299,10 @@ "selector order in some kernels") workaround_dma_line_count = Param.Bool(True, "Workaround incorrect " "DMA line count (off by 1)") -enable_capture = Param.Bool(True, "capture frame to system.framebuffer.bmp") +enable_capture = Param.Bool(True, "capture frame to " + "system.framebuffer.{extension}") +frame_format = Param.ImageFormat("Auto", + "image format of the captured frame") pixel_buffer_size = Param.MemorySize32("2kB", "Size of address range") diff --git a/src/dev/arm/hdlcd.cc b/src/dev/arm/hdlcd.cc index 98f2a3d..20dc7d4 100644 --- a/src/dev/arm/hdlcd.cc +++ b/src/dev/arm/hdlcd.cc @@ -47,6 +47,7 @@ #include "debug/HDLcd.hh" #include "dev/arm/amba_device.hh" #include "dev/arm/base_gic.hh" +#include "enums/ImageFormat.hh" #include "mem/packet.hh" #include "mem/packet_access.hh" #include "params/HDLcd.hh" @@ -85,11 +86,13 @@ virtRefreshEvent([this]{ virtRefresh(); }, name()), // Other - bmp(), pic(NULL), conv(PixelConverter::rgba_le), + imgFormat(p->frame_format), pic(NULL), conv(PixelConverter::rgba_le), pixelPump(*this, *p->pxl_clk, p->pixel_chunk) { if (vnc) vnc->setFrameBuffer(); + +imgWriter = createImgWriter(imgFormat, ); } HDLcd::~HDLcd() @@ -572,13 +575,14 @@ if (enableCapture) { if (!pic) { pic = simout.create( -csprintf("%s.framebuffer.bmp", sys->name()), +csprintf("%s.framebuffer.%s", + sys->name(), imgWriter->getImgExtension()), true); } assert(pic); pic->stream()->seekp(0); -bmp.write(*pic->stream()); +imgWriter->write(*pic->stream()); } } diff --git a/src/dev/arm/hdlcd.hh b/src/dev/arm/hdlcd.hh index dd52e20..f737710 100644 --- a/src/dev/arm/hdlcd.hh +++ b/src/dev/arm/hdlcd.hh @@ -79,8 +79,8 @@ #include #include -#include "base/bmpwriter.hh" #include "base/framebuffer.hh" +#include "base/imgwriter.hh" #include "base/output.hh" #include "dev/arm/amba_device.hh" #include "dev/pixelpump.hh" @@ -350,7 +350,10 @@ EventFunctionWrapper virtRefreshEvent; /** Helper to write out bitmaps */ -BmpWriter bmp; +std::unique_ptr imgWriter; + +/** Image Format */ +Enums::ImageFormat imgFormat; /** Picture of what the current frame buffer looks like */ OutputStream *pic; -- To view, visit https://gem5-review.googlesource.com/5183 To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: master Gerrit-MessageType: merged Gerrit-Change-Id: I0643266556bb10b43cdebd628f6daa2cd5e105dd Gerrit-Change-Number: 5183 Gerrit-PatchSet: 3 Gerrit-Owner: Giacomo Travaglini Gerrit-Reviewer: Andreas Sandberg Gerrit-Reviewer: Giacomo Travaglini Gerrit-Reviewer: Jason Lowe-Power ___ gem5-dev mailing list gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev
[gem5-dev] Cron <m5test@zizzer> /z/m5/regression/do-regression quick
* build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64m/simple-timing: FAILED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64m/simple-timing-ruby: FAILED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64f/simple-timing: FAILED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64i/minor-timing: FAILED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64f/simple-atomic: FAILED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64a/minor-timing: FAILED! * build/RISCV/tests/opt/quick/se/00.hello/riscv/linux/minor-timing: FAILED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64c/simple-timing-ruby: FAILED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64d/o3-timing: FAILED! * build/RISCV/tests/opt/quick/se/00.hello/riscv/linux/o3-timing: FAILED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64f/simple-timing-ruby: FAILED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64f/minor-timing: FAILED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64a/simple-atomic: FAILED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64a/simple-timing-ruby: FAILED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64a/o3-timing: FAILED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64i/o3-timing: FAILED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64c/simple-atomic: FAILED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64d/simple-timing: FAILED! * build/RISCV/tests/opt/quick/se/00.hello/riscv/linux/simple-timing-ruby: FAILED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64f/o3-timing: FAILED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64m/simple-atomic: FAILED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64m/minor-timing: FAILED! * build/RISCV/tests/opt/quick/se/00.hello/riscv/linux/simple-atomic: FAILED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64i/simple-timing-ruby: FAILED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64d/minor-timing: FAILED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64d/simple-timing-ruby: FAILED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64i/simple-atomic: FAILED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64c/minor-timing: FAILED! * build/RISCV/tests/opt/quick/se/00.hello/riscv/linux/simple-timing: FAILED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64m/o3-timing: FAILED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64a/simple-timing: FAILED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64c/o3-timing: FAILED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64c/simple-timing: FAILED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64i/simple-timing: FAILED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64d/simple-atomic: FAILED! * build/ALPHA/tests/opt/quick/se/00.hello/alpha/linux/minor-timing: CHANGED! * build/ARM/tests/opt/quick/se/00.hello/arm/linux/minor-timing: CHANGED! * build/ARM/tests/opt/quick/se/00.hello/arm/linux/o3-timing: CHANGED! * build/ARM/tests/opt/quick/se/00.hello/arm/linux/o3-timing-checker: CHANGED! * build/ARM/tests/opt/quick/se/00.hello/arm/linux/simple-atomic: CHANGED! * build/ARM/tests/opt/quick/se/00.hello/arm/linux/simple-atomic-dummychecker: CHANGED! * build/ARM/tests/opt/quick/se/00.hello/arm/linux/simple-timing: CHANGED! * build/ARM/tests/opt/quick/se/03.learning-gem5/arm/linux/learning-gem5-p1-simple: CHANGED! * build/ARM/tests/opt/quick/se/03.learning-gem5/arm/linux/learning-gem5-p1-two-level: CHANGED! * build/ARM/tests/opt/quick/se/10.mcf/arm/linux/simple-atomic: CHANGED! * build/ARM/tests/opt/quick/se/50.vortex/arm/linux/simple-atomic: CHANGED! * build/ARM/tests/opt/quick/se/10.mcf/arm/linux/simple-timing: CHANGED! * build/ARM/tests/opt/quick/se/50.vortex/arm/linux/simple-timing: CHANGED! * build/ARM/tests/opt/quick/se/70.twolf/arm/linux/simple-atomic: CHANGED! * build/ARM/tests/opt/quick/fs/10.linux-boot/arm/linux/realview-simple-atomic: CHANGED! * build/ARM/tests/opt/quick/fs/10.linux-boot/arm/linux/realview-simple-atomic-dual: CHANGED! * build/ARM/tests/opt/quick/se/70.twolf/arm/linux/simple-timing: CHANGED! * build/ARM/tests/opt/quick/fs/10.linux-boot/arm/linux/realview-simple-timing: CHANGED! * build/ARM/tests/opt/quick/fs/10.linux-boot/arm/linux/realview-simple-timing-dual: CHANGED! scons: `build/MIPS/tests/opt/quick/fs' is up to date. scons: `build/NULL/tests/opt/quick/fs' is up to date. scons: `build/NULL_MOESI_hammer/tests/opt/quick/fs' is up to date. scons: