예제 #1
0
    def runTest(self):
        rule_tree = native_heap_classifier.LoadRules(_TEST_RULES)
        nheap = native_heap.NativeHeap()
        mock_addr = 0
        for test_entry in _TEST_STACK_TRACES:
            mock_strace = stacktrace.Stacktrace()
            for mock_btstr in test_entry[1]:
                mock_addr += 4  # Addr is irrelevant, just keep it distinct.
                mock_frame = stacktrace.Frame(mock_addr)
                mock_frame.SetSymbolInfo(symbol.Symbol(mock_btstr))
                mock_strace.Add(mock_frame)
            nheap.Add(
                native_heap.Allocation(size=test_entry[0],
                                       count=1,
                                       stack_trace=mock_strace))

        res = native_heap_classifier.Classify(nheap, rule_tree)

        def CheckResult(node, prefix):
            node_name = prefix + node.name
            self.assertIn(node_name, _EXPECTED_RESULTS)
            self.assertEqual(node.values, _EXPECTED_RESULTS[node_name])
            for child in node.children:
                CheckResult(child, node_name + '::')

        CheckResult(res.total, '')
예제 #2
0
  def testStandardRuleParsingAndProcessing(self):
    rule_tree = native_heap_classifier.LoadRules(_TEST_RULES)
    nheap = native_heap.NativeHeap()
    mock_addr = 0
    for test_entry in _TEST_STACK_TRACES:
      mock_strace = stacktrace.Stacktrace()
      for (mock_btstr, mock_source_path) in test_entry[1]:
        mock_addr += 4  # Addr is irrelevant, just keep it distinct.
        mock_frame = stacktrace.Frame(mock_addr)
        mock_frame.SetSymbolInfo(symbol.Symbol(mock_btstr, mock_source_path))
        mock_strace.Add(mock_frame)
      nheap.Add(native_heap.Allocation(
          size=test_entry[0], count=1, stack_trace=mock_strace))

    res = native_heap_classifier.Classify(nheap, rule_tree)
    self._CheckResult(res.total, '', _EXPECTED_RESULTS)
예제 #3
0
  def testInferHeuristicRules(self):
    nheap = native_heap.NativeHeap()
    mock_addr = 0
    for (mock_alloc_size, mock_source_path) in _HEURISTIC_TEST_STACK_TRACES:
      mock_strace = stacktrace.Stacktrace()
      mock_addr += 4  # Addr is irrelevant, just keep it distinct.
      mock_frame = stacktrace.Frame(mock_addr)
      mock_frame.SetSymbolInfo(symbol.Symbol(str(mock_addr), mock_source_path))
      for _ in xrange(10):  # Just repeat the same stack frame 10 times
        mock_strace.Add(mock_frame)
      nheap.Add(native_heap.Allocation(
          size=mock_alloc_size, count=1, stack_trace=mock_strace))

    rule_tree = native_heap_classifier.InferHeuristicRulesFromHeap(
        nheap, threshold=0.05)
    res = native_heap_classifier.Classify(nheap, rule_tree)
    self._CheckResult(res.total, '', _HEURISTIC_EXPECTED_RESULTS)