%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
# 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()