86 lines
2.2 KiB
Python
86 lines
2.2 KiB
Python
|
# Copyright 2016 the V8 project 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 StringIO
|
||
|
import unittest
|
||
|
import linux_perf_bytecode_annotate as bytecode_annotate
|
||
|
|
||
|
|
||
|
PERF_SCRIPT_OUTPUT = """
|
||
|
# This line is a comment
|
||
|
# This should be ignored too
|
||
|
#
|
||
|
# cdefab01 aRandomSymbol::Name(to, be, ignored)
|
||
|
|
||
|
00000000 firstSymbol
|
||
|
00000123 secondSymbol
|
||
|
|
||
|
01234567 foo
|
||
|
abcdef76 BytecodeHandler:bar+0x12
|
||
|
76543210 baz
|
||
|
abcdef76 BytecodeHandler:bar+0x16
|
||
|
76543210 baz
|
||
|
|
||
|
01234567 foo
|
||
|
abcdef76 BytecodeHandler:foo+0x1
|
||
|
76543210 baz
|
||
|
abcdef76 BytecodeHandler:bar+0x2
|
||
|
76543210 bar
|
||
|
|
||
|
abcdef76 BytecodeHandler:bar+0x19
|
||
|
|
||
|
abcdef76 BytecodeHandler:bar+0x12
|
||
|
|
||
|
abcdef76 BytecodeHandler:bar+0x12
|
||
|
"""
|
||
|
|
||
|
|
||
|
D8_CODEGEN_OUTPUT = """
|
||
|
kind = BYTECODE_HANDLER
|
||
|
name = foo
|
||
|
compiler = turbofan
|
||
|
Instructions (size = 3)
|
||
|
0x3101394a3c0 0 55 push rbp
|
||
|
0x3101394a3c1 1 ffe3 jmp rbx
|
||
|
|
||
|
kind = BYTECODE_HANDLER
|
||
|
name = bar
|
||
|
compiler = turbofan
|
||
|
Instructions (size = 5)
|
||
|
0x3101394b3c0 0 55 push rbp
|
||
|
0x3101394b3c1 1 4883c428 REX.W addq rsp,0x28
|
||
|
# Unexpected comment
|
||
|
0x3101394b3c5 5 ffe3 jmp rbx
|
||
|
|
||
|
kind = BYTECODE_HANDLER
|
||
|
name = baz
|
||
|
compiler = turbofan
|
||
|
Instructions (size = 5)
|
||
|
0x3101394c3c0 0 55 push rbp
|
||
|
0x3101394c3c1 1 4883c428 REX.W addq rsp,0x28
|
||
|
0x3101394c3c5 5 ffe3 jmp rbx
|
||
|
"""
|
||
|
|
||
|
|
||
|
class LinuxPerfBytecodeAnnotateTest(unittest.TestCase):
|
||
|
|
||
|
def test_bytecode_offset_generator(self):
|
||
|
perf_stream = StringIO.StringIO(PERF_SCRIPT_OUTPUT)
|
||
|
offsets = list(
|
||
|
bytecode_annotate.bytecode_offset_generator(perf_stream, "bar"))
|
||
|
self.assertListEqual(offsets, [18, 25, 18, 18])
|
||
|
|
||
|
def test_bytecode_disassembly_generator(self):
|
||
|
codegen_stream = StringIO.StringIO(D8_CODEGEN_OUTPUT)
|
||
|
disassembly = list(
|
||
|
bytecode_annotate.bytecode_disassembly_generator(codegen_stream, "bar"))
|
||
|
self.assertListEqual(disassembly, [
|
||
|
"0x3101394b3c0 0 55 push rbp",
|
||
|
"0x3101394b3c1 1 4883c428 REX.W addq rsp,0x28",
|
||
|
"0x3101394b3c5 5 ffe3 jmp rbx"])
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
unittest.main()
|