Home | History | Annotate | Download | only in cygprofile
      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