From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11820 invoked by alias); 20 Jun 2008 11:47:54 -0000 Received: (qmail 11794 invoked by uid 9697); 20 Jun 2008 11:47:54 -0000 Date: Fri, 20 Jun 2008 11:47:00 -0000 Message-ID: <20080620114754.11778.qmail@sourceware.org> From: pmachata@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Align mismatched eventLeaves correctly X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: a9eb3c2804253d3206bc429404bffc78ecb83b4e X-Git-Newrev: ba8ffe9b1b7d9c253c93b958a7d8202c4addfa5e Mailing-List: contact frysk-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: frysk-cvs-owner@sourceware.org Reply-To: frysk@sourceware.org X-SW-Source: 2008-q2/txt/msg00387.txt.bz2 The branch, master has been updated via ba8ffe9b1b7d9c253c93b958a7d8202c4addfa5e (commit) from a9eb3c2804253d3206bc429404bffc78ecb83b4e (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit ba8ffe9b1b7d9c253c93b958a7d8202c4addfa5e Author: Petr Machata Date: Fri Jun 20 13:29:15 2008 +0200 Align mismatched eventLeaves correctly * of course it would be ideal to fix underlying bugs, but for the time being, this serves the purpose of presenting the data to the user ----------------------------------------------------------------------- Summary of changes: frysk-core/frysk/ftrace/ChangeLog | 5 ++++ frysk-core/frysk/ftrace/Reporter.java | 42 +++++++++++++++++--------------- 2 files changed, 27 insertions(+), 20 deletions(-) First 500 lines of diff: diff --git a/frysk-core/frysk/ftrace/ChangeLog b/frysk-core/frysk/ftrace/ChangeLog index a6f9abb..3fe6e9b 100644 --- a/frysk-core/frysk/ftrace/ChangeLog +++ b/frysk-core/frysk/ftrace/ChangeLog @@ -1,3 +1,8 @@ +2008-06-20 Petr Machata + + * Ftrace.java: Keep a list of event entry tokens, and align + eventLeave with matching eventEntry. + 2008-06-10 Andrew Cagney * Ftrace.java: Use PrintDebugInfoStackOptions. diff --git a/frysk-core/frysk/ftrace/Reporter.java b/frysk-core/frysk/ftrace/Reporter.java index cbc95bd..6233c3f 100644 --- a/frysk-core/frysk/ftrace/Reporter.java +++ b/frysk-core/frysk/ftrace/Reporter.java @@ -40,6 +40,7 @@ package frysk.ftrace; import java.util.HashMap; +import java.util.ArrayList; import inua.util.PrintWriter; @@ -53,7 +54,10 @@ class Reporter private PrintWriter writer; private Object lastItem = null; private Task lastTask = null; - private HashMap levelMap = new HashMap(); + + // HashMap> -- array of entry tokens for each taks + private final HashMap tokenMap = new HashMap(); + private final PrintDebugInfoStackOptions stackPrintOptions; private final boolean showPC; @@ -65,18 +69,14 @@ class Reporter this.showPC = show; } - private int getLevel(Task task) + private ArrayList getTokens(Task task) { - int level = 0; - Integer l = (Integer)levelMap.get(task); - if (l != null) - level = l.intValue(); - return level; - } - - private void setLevel(Task task, int level) - { - levelMap.put(task, new Integer(level)); + ArrayList l = (ArrayList)tokenMap.get(task); + if (l == null) { + l = new ArrayList(); + tokenMap.put(task, l); + } + return l; } private boolean lineOpened() @@ -138,9 +138,9 @@ class Reporter public void eventEntry(Task task, Object item, String eventType, String eventName, Object[] args) { - int level = this.getLevel(task); - String spaces = ArchFormatter.repeat(' ', level); - this.setLevel(task, ++level); + ArrayList tokens = getTokens(task); + String spaces = ArchFormatter.repeat(' ', tokens.size()); + tokens.add(item); if (lineOpened()) writer.println('\\'); @@ -158,13 +158,15 @@ class Reporter public void eventLeave(Task task, Object item, String eventType, String eventName, Object retVal) { - int level = this.getLevel(task); - this.setLevel(task, --level); + ArrayList tokens = getTokens(task); + int i = tokens.size(); + while (tokens.remove(--i) != item) { + } if (!myLineOpened(task, item)) { if (lineOpened()) writer.println(); - String spaces = ArchFormatter.repeat(' ', level); + String spaces = ArchFormatter.repeat(' ', tokens.size()); writer.print(pidInfo(task) + " " + formatTaskPC(task) + spaces + eventType @@ -184,12 +186,12 @@ class Reporter public void eventSingle(Task task, String eventName, Object[] args) { - int level = this.getLevel(task); + ArrayList tokens = getTokens(task); if (lineOpened()) writer.println("\\"); writer.print(pidInfo(task) + " " + formatTaskPC(task) - + ArchFormatter.repeat(' ', level) + + ArchFormatter.repeat(' ', tokens.size()) + eventName); if (args != null) hooks/post-receive -- frysk system monitor/debugger