1 # Copyright 2014 The Chromium Authors. All rights reserved. 2 # Use of this source code is governed by a BSD-style license that can be 3 # found in the LICENSE file. 4 5 import unittest 6 7 import mergetraces 8 9 class GroupByProcessAndThreadIdTestBasic(unittest.TestCase): 10 def runTest(self): 11 # (sec, usec, 'pid:tid', function address). 12 input_trace = [ 13 (100, 10, '2000:2001', 0x5), 14 (100, 11, '2000:2001', 0x3), 15 (100, 13, '2000:1999', 0x8), 16 (100, 14, '2000:2000', 0x7), 17 (120, 13, '2001:2003', 0x9), 18 (150, 12, '2001:2004', 0x6), 19 (180, 11, '2000:2000', 0x1), 20 ] 21 22 # Functions should be grouped by thread-id and PIDs should not be 23 # interleaved. 24 expected_trace = [ 25 (100, 10, '2000:2001', 0x5), 26 (100, 11, '2000:2001', 0x3), 27 (100, 13, '2000:1999', 0x8), 28 (100, 14, '2000:2000', 0x7), 29 (180, 11, '2000:2000', 0x1), 30 (120, 13, '2001:2003', 0x9), 31 (150, 12, '2001:2004', 0x6), 32 ] 33 34 grouped_trace = mergetraces.GroupByProcessAndThreadId(input_trace) 35 36 self.assertEqual(grouped_trace, expected_trace) 37 38 class GroupByProcessAndThreadIdFailsWithNonUniqueTIDs(unittest.TestCase): 39 def runTest(self): 40 # (sec, usec, 'pid:tid', function address). 41 input_trace = [ 42 (100, 10, '1999:2001', 0x5), 43 (100, 10, '1988:2001', 0x5), 44 ] 45 46 try: 47 mergetraces.GroupByProcessAndThreadId(input_trace) 48 except Exception: 49 return 50 51 self.fail('Multiple processes should not have a same thread-ID.') 52