1#!/usr/bin/env python2.7 2# 3# Copyright (c) 2013 ARM Limited 4# All rights reserved 5# 6# The license below extends only to copyright in the software and shall 7# not be construed as granting a license to any other intellectual 8# property including but not limited to intellectual property relating 9# to a hardware implementation of the functionality of the software 10# licensed hereunder. You may use the software subject to the license 11# terms below provided that you ensure that this notice is replicated 12# unmodified and in its entirety in all distributions of the software, 13# modified or unmodified, in source code or in binary form. 14# 15# Redistribution and use in source and binary forms, with or without 16# modification, are permitted provided that the following conditions are 17# met: redistributions of source code must retain the above copyright 18# notice, this list of conditions and the following disclaimer; 19# redistributions in binary form must reproduce the above copyright 20# notice, this list of conditions and the following disclaimer in the 21# documentation and/or other materials provided with the distribution; 22# neither the name of the copyright holders nor the names of its 23# contributors may be used to endorse or promote products derived from 24# this software without specific prior written permission. 25# 26# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 27# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 28# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 29# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 30# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 31# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 32# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 33# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 34# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 35# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 36# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 37# 38# Authors: Andrew Bardsley 39# 40# minorview.py: Minorview visuliser for MinorCPU model MinorTrace output 41# 42 43import gtk 44import os 45import sys 46import argparse 47 48# Find MinorView modules even if not called from minorview directory 49minorviewDir = os.path.dirname(os.path.realpath(__file__)) 50sys.path.append(minorviewDir) 51 52from minorview.model import BlobModel 53from minorview.view import BlobView, BlobController, BlobWindow 54from minorview.point import Point 55 56if __name__ == '__main__': 57 parser = argparse.ArgumentParser(description='Minor visualiser') 58 59 parser.add_argument('--picture', metavar='picture-file', 60 default=minorviewDir + '/minorview/minor.pic', 61 help='markup file containing blob information ' 62 + '(default: <minorview-path>/minor.pic)') 63 parser.add_argument('--prefix', metavar='name', default='system.cpu', 64 help='name prefix in trace for CPU to be visualised (default: ' 65 + 'system.cpu)') 66 parser.add_argument('--start-time', metavar='time', type=int, default=0, 67 help='time of first event to load from file') 68 parser.add_argument('--end-time', metavar='time', type=int, default=None, 69 help='time of last event to load from file') 70 parser.add_argument('--mini-views', action='store_true', default=False, 71 help='show tiny views of the next 10 time steps') 72 parser.add_argument('eventFile', metavar='event-file', default='ev') 73 74 args = parser.parse_args(sys.argv[1:]) 75 76 model = BlobModel(unitNamePrefix=args.prefix) 77 78 if args.picture and os.access(args.picture, os.O_RDONLY): 79 model.load_picture(args.picture) 80 else: 81 parser.error('Can\'t read picture file: ' + args.picture) 82 83 # Make the key objects 84 view = BlobView(model) 85 controller = BlobController(model, view, 86 defaultEventFile=args.eventFile, 87 defaultPictureFile=args.picture) 88 window = BlobWindow(model, view, controller) 89 window.add_control_bar(controller.bar) 90 91 # Miniviews allow future timesteps to appear at the bottom of the 92 # display. 93 if args.mini_views: 94 window.miniViewCount = 10 95 96 window.show_window() 97 98 if args.eventFile and os.access(args.eventFile, os.O_RDONLY): 99 controller.startTime = args.start_time 100 controller.endTime = args.end_time 101 model.load_events(args.eventFile, startTime=args.start_time, 102 endTime=args.end_time) 103 controller.set_time_index(0) 104 else: 105 parser.error('Can\'t read event file: ' + args.eventFile) 106 107 gtk.main() 108