| Index: tools/traceline/traceline/scripts/crit_sec.py
|
| diff --git a/tools/traceline/traceline/scripts/crit_sec.py b/tools/traceline/traceline/scripts/crit_sec.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..f43f50d3bdae8cee2e47e0ac8018b13954e9294e
|
| --- /dev/null
|
| +++ b/tools/traceline/traceline/scripts/crit_sec.py
|
| @@ -0,0 +1,51 @@
|
| +# Copyright (c) 2009 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +import sys
|
| +import os
|
| +
|
| +execfile(os.path.join(
|
| + os.path.dirname(os.path.join(os.path.curdir, __file__)),
|
| + 'syscalls.py'))
|
| +
|
| +def parseEvents(z):
|
| + crits = { }
|
| + calls = { }
|
| + for e in z:
|
| + if (e['eventtype'] == 'EVENT_TYPE_ENTER_CS' or
|
| + e['eventtype'] == 'EVENT_TYPE_TRYENTER_CS' or
|
| + e['eventtype'] == 'EVENT_TYPE_LEAVE_CS'):
|
| + cs = e['critical_section']
|
| + if not crits.has_key(cs):
|
| + crits[cs] = [ ]
|
| + crits[cs].append(e)
|
| +
|
| +# for cs, es in crits.iteritems():
|
| +# print 'cs: 0x%08x' % cs
|
| +# for e in es:
|
| +# print ' 0x%08x - %s - %f' % (e['thread'], e['eventtype'], e['ms'])
|
| +
|
| + for cs, es in crits.iteritems():
|
| + print 'cs: 0x%08x' % cs
|
| +
|
| + tid_stack = [ ]
|
| + for e in es:
|
| + if e['eventtype'] == 'EVENT_TYPE_ENTER_CS':
|
| + tid_stack.append(e)
|
| + elif e['eventtype'] == 'EVENT_TYPE_TRYENTER_CS':
|
| + if e['retval'] != 0:
|
| + tid_stack.append(e)
|
| + elif e['eventtype'] == 'EVENT_TYPE_LEAVE_CS':
|
| + if not tid_stack:
|
| + raise repr(e)
|
| + tid = tid_stack.pop()
|
| + if tid['thread'] != e['thread']:
|
| + raise repr(tid) + '--' + repr(e)
|
| +
|
| + # Critical section left locked?
|
| + if tid_stack:
|
| + #raise repr(tid_stack)
|
| + pass
|
| +
|
| +execfile(sys.argv[1])
|
|
|