Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(579)

Side by Side Diff: runtime/vm/unit_test.h

Issue 137483010: Add more timing information in the VM to track time spent is dart code Vs native code. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« runtime/vm/native_arguments.h ('K') | « runtime/vm/timer.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #ifndef VM_UNIT_TEST_H_ 5 #ifndef VM_UNIT_TEST_H_
6 #define VM_UNIT_TEST_H_ 6 #define VM_UNIT_TEST_H_
7 7
8 #include "include/dart_api.h" 8 #include "include/dart_api.h"
9 9
10 #include "vm/ast.h" 10 #include "vm/ast.h"
11 #include "vm/dart.h" 11 #include "vm/dart.h"
12 #include "vm/dart_api_impl.h"
12 #include "vm/globals.h" 13 #include "vm/globals.h"
13 #include "vm/heap.h" 14 #include "vm/heap.h"
14 #include "vm/isolate.h" 15 #include "vm/isolate.h"
15 #include "vm/longjump.h" 16 #include "vm/longjump.h"
16 #include "vm/object.h" 17 #include "vm/object.h"
17 #include "vm/object_store.h" 18 #include "vm/object_store.h"
18 #include "vm/simulator.h" 19 #include "vm/simulator.h"
19 #include "vm/zone.h" 20 #include "vm/zone.h"
20 21
21 // The UNIT_TEST_CASE macro is used for tests that do not need any 22 // The UNIT_TEST_CASE macro is used for tests that do not need any
(...skipping 25 matching lines...) Expand all
47 // for the assembler. 48 // for the assembler.
48 #define ASSEMBLER_TEST_EXTERN(name) \ 49 #define ASSEMBLER_TEST_EXTERN(name) \
49 extern void AssemblerTestGenerate##name(Assembler* assembler); 50 extern void AssemblerTestGenerate##name(Assembler* assembler);
50 51
51 // The ASSEMBLER_TEST_RUN macro is used to execute the assembler unit 52 // The ASSEMBLER_TEST_RUN macro is used to execute the assembler unit
52 // test generated using the ASSEMBLER_TEST_GENERATE macro. 53 // test generated using the ASSEMBLER_TEST_GENERATE macro.
53 // C++ callee-saved registers are not preserved. Arguments may be passed in. 54 // C++ callee-saved registers are not preserved. Arguments may be passed in.
54 #define ASSEMBLER_TEST_RUN(name, test) \ 55 #define ASSEMBLER_TEST_RUN(name, test) \
55 static void AssemblerTestRun##name(AssemblerTest* test); \ 56 static void AssemblerTestRun##name(AssemblerTest* test); \
56 TEST_CASE(name) { \ 57 TEST_CASE(name) { \
58 NativeToVmTimerScope timer(Isolate::Current()); \
57 Assembler __assembler__; \ 59 Assembler __assembler__; \
58 AssemblerTest test(""#name, &__assembler__); \ 60 AssemblerTest test(""#name, &__assembler__); \
59 AssemblerTestGenerate##name(test.assembler()); \ 61 AssemblerTestGenerate##name(test.assembler()); \
60 test.Assemble(); \ 62 test.Assemble(); \
61 AssemblerTestRun##name(&test); \ 63 AssemblerTestRun##name(&test); \
62 } \ 64 } \
63 static void AssemblerTestRun##name(AssemblerTest* test) 65 static void AssemblerTestRun##name(AssemblerTest* test)
64 66
65 // Populate node list with AST nodes. 67 // Populate node list with AST nodes.
66 #define CODEGEN_TEST_GENERATE(name, test) \ 68 #define CODEGEN_TEST_GENERATE(name, test) \
67 static void CodeGenTestGenerate##name(CodeGenTest* test) 69 static void CodeGenTestGenerate##name(CodeGenTest* test)
68 70
69 // Populate node list with AST nodes, possibly using the provided function 71 // Populate node list with AST nodes, possibly using the provided function
70 // object built by a previous CODEGEN_TEST_GENERATE. 72 // object built by a previous CODEGEN_TEST_GENERATE.
71 #define CODEGEN_TEST2_GENERATE(name, function, test) \ 73 #define CODEGEN_TEST2_GENERATE(name, function, test) \
72 static void CodeGenTestGenerate##name(const Function& function, \ 74 static void CodeGenTestGenerate##name(const Function& function, \
73 CodeGenTest* test) 75 CodeGenTest* test)
74 76
75 77
76 // Pass the name of test and the expected results as RawObject. 78 // Pass the name of test and the expected results as RawObject.
77 #define CODEGEN_TEST_RUN(name, expected) \ 79 #define CODEGEN_TEST_RUN(name, expected) \
78 static void CodeGenTestRun##name(const Function& function); \ 80 static void CodeGenTestRun##name(const Function& function); \
79 TEST_CASE(name) { \ 81 TEST_CASE(name) { \
82 NativeToVmTimerScope timer(Isolate::Current()); \
80 CodeGenTest __test__(""#name); \ 83 CodeGenTest __test__(""#name); \
81 CodeGenTestGenerate##name(&__test__); \ 84 CodeGenTestGenerate##name(&__test__); \
82 __test__.Compile(); \ 85 __test__.Compile(); \
83 CodeGenTestRun##name(__test__.function()); \ 86 CodeGenTestRun##name(__test__.function()); \
84 } \ 87 } \
85 static void CodeGenTestRun##name(const Function& function) { \ 88 static void CodeGenTestRun##name(const Function& function) { \
86 Object& result = Object::Handle(); \ 89 Object& result = Object::Handle(); \
87 result = DartEntry::InvokeFunction(function, Object::empty_array()); \ 90 result = DartEntry::InvokeFunction(function, Object::empty_array()); \
88 EXPECT(!result.IsError()); \ 91 EXPECT(!result.IsError()); \
89 Instance& actual = Instance::Handle(); \ 92 Instance& actual = Instance::Handle(); \
90 actual ^= result.raw(); \ 93 actual ^= result.raw(); \
91 EXPECT(actual.Equals(Instance::Handle(expected))); \ 94 EXPECT(actual.Equals(Instance::Handle(expected))); \
92 } 95 }
93 96
94 97
95 // Pass the name of test, and use the generated function to call it 98 // Pass the name of test, and use the generated function to call it
96 // and evaluate its result. 99 // and evaluate its result.
97 #define CODEGEN_TEST_RAW_RUN(name, function) \ 100 #define CODEGEN_TEST_RAW_RUN(name, function) \
98 static void CodeGenTestRun##name(const Function& function); \ 101 static void CodeGenTestRun##name(const Function& function); \
99 TEST_CASE(name) { \ 102 TEST_CASE(name) { \
103 NativeToVmTimerScope timer(Isolate::Current()); \
100 CodeGenTest __test__(""#name); \ 104 CodeGenTest __test__(""#name); \
101 CodeGenTestGenerate##name(&__test__); \ 105 CodeGenTestGenerate##name(&__test__); \
102 __test__.Compile(); \ 106 __test__.Compile(); \
103 CodeGenTestRun##name(__test__.function()); \ 107 CodeGenTestRun##name(__test__.function()); \
104 } \ 108 } \
105 static void CodeGenTestRun##name(const Function& function) 109 static void CodeGenTestRun##name(const Function& function)
106 110
107 111
108 // Generate code for two sequences of AST nodes and execute the first one. 112 // Generate code for two sequences of AST nodes and execute the first one.
109 // The first one may reference the Function object generated by the second one. 113 // The first one may reference the Function object generated by the second one.
110 #define CODEGEN_TEST2_RUN(name1, name2, expected) \ 114 #define CODEGEN_TEST2_RUN(name1, name2, expected) \
111 static void CodeGenTestRun##name1(const Function& function); \ 115 static void CodeGenTestRun##name1(const Function& function); \
112 TEST_CASE(name1) { \ 116 TEST_CASE(name1) { \
117 NativeToVmTimerScope timer(Isolate::Current()); \
113 /* Generate code for name2 */ \ 118 /* Generate code for name2 */ \
114 CodeGenTest __test2__(""#name2); \ 119 CodeGenTest __test2__(""#name2); \
115 CodeGenTestGenerate##name2(&__test2__); \ 120 CodeGenTestGenerate##name2(&__test2__); \
116 __test2__.Compile(); \ 121 __test2__.Compile(); \
117 /* Generate code for name1, providing function2 */ \ 122 /* Generate code for name1, providing function2 */ \
118 CodeGenTest __test1__(""#name1); \ 123 CodeGenTest __test1__(""#name1); \
119 CodeGenTestGenerate##name1(__test2__.function(), &__test1__); \ 124 CodeGenTestGenerate##name1(__test2__.function(), &__test1__); \
120 __test1__.Compile(); \ 125 __test1__.Compile(); \
121 CodeGenTestRun##name1(__test1__.function()); \ 126 CodeGenTestRun##name1(__test1__.function()); \
122 } \ 127 } \
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after
382 } \ 387 } \
383 } else { \ 388 } else { \
384 dart::Expect(__FILE__, __LINE__).Fail("expected True, but was '%s'\n", \ 389 dart::Expect(__FILE__, __LINE__).Fail("expected True, but was '%s'\n", \
385 #handle); \ 390 #handle); \
386 } \ 391 } \
387 } while (0) 392 } while (0)
388 393
389 } // namespace dart 394 } // namespace dart
390 395
391 #endif // VM_UNIT_TEST_H_ 396 #endif // VM_UNIT_TEST_H_
OLDNEW
« runtime/vm/native_arguments.h ('K') | « runtime/vm/timer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698