| OLD | NEW |
| 1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 125 CHECK_EQ(NULL, helper.Walk(&entry2)); | 125 CHECK_EQ(NULL, helper.Walk(&entry2)); |
| 126 CHECK_EQ(NULL, helper.Walk(&entry3)); | 126 CHECK_EQ(NULL, helper.Walk(&entry3)); |
| 127 | 127 |
| 128 CodeEntry* path[] = {NULL, &entry1, NULL, &entry2, NULL, NULL, &entry3, NULL}; | 128 CodeEntry* path[] = {NULL, &entry1, NULL, &entry2, NULL, NULL, &entry3, NULL}; |
| 129 Vector<CodeEntry*> path_vec(path, sizeof(path) / sizeof(path[0])); | 129 Vector<CodeEntry*> path_vec(path, sizeof(path) / sizeof(path[0])); |
| 130 tree.AddPathFromStart(path_vec); | 130 tree.AddPathFromStart(path_vec); |
| 131 CHECK_EQ(NULL, helper.Walk(&entry2)); | 131 CHECK_EQ(NULL, helper.Walk(&entry2)); |
| 132 CHECK_EQ(NULL, helper.Walk(&entry3)); | 132 CHECK_EQ(NULL, helper.Walk(&entry3)); |
| 133 ProfileNode* node1 = helper.Walk(&entry1); | 133 ProfileNode* node1 = helper.Walk(&entry1); |
| 134 CHECK_NE(NULL, node1); | 134 CHECK_NE(NULL, node1); |
| 135 CHECK_EQ(0, node1->total_ticks()); | |
| 136 CHECK_EQ(0, node1->self_ticks()); | 135 CHECK_EQ(0, node1->self_ticks()); |
| 137 CHECK_EQ(NULL, helper.Walk(&entry1, &entry1)); | 136 CHECK_EQ(NULL, helper.Walk(&entry1, &entry1)); |
| 138 CHECK_EQ(NULL, helper.Walk(&entry1, &entry3)); | 137 CHECK_EQ(NULL, helper.Walk(&entry1, &entry3)); |
| 139 ProfileNode* node2 = helper.Walk(&entry1, &entry2); | 138 ProfileNode* node2 = helper.Walk(&entry1, &entry2); |
| 140 CHECK_NE(NULL, node2); | 139 CHECK_NE(NULL, node2); |
| 141 CHECK_NE(node1, node2); | 140 CHECK_NE(node1, node2); |
| 142 CHECK_EQ(0, node2->total_ticks()); | |
| 143 CHECK_EQ(0, node2->self_ticks()); | 141 CHECK_EQ(0, node2->self_ticks()); |
| 144 CHECK_EQ(NULL, helper.Walk(&entry1, &entry2, &entry1)); | 142 CHECK_EQ(NULL, helper.Walk(&entry1, &entry2, &entry1)); |
| 145 CHECK_EQ(NULL, helper.Walk(&entry1, &entry2, &entry2)); | 143 CHECK_EQ(NULL, helper.Walk(&entry1, &entry2, &entry2)); |
| 146 ProfileNode* node3 = helper.Walk(&entry1, &entry2, &entry3); | 144 ProfileNode* node3 = helper.Walk(&entry1, &entry2, &entry3); |
| 147 CHECK_NE(NULL, node3); | 145 CHECK_NE(NULL, node3); |
| 148 CHECK_NE(node1, node3); | 146 CHECK_NE(node1, node3); |
| 149 CHECK_NE(node2, node3); | 147 CHECK_NE(node2, node3); |
| 150 CHECK_EQ(0, node3->total_ticks()); | |
| 151 CHECK_EQ(1, node3->self_ticks()); | 148 CHECK_EQ(1, node3->self_ticks()); |
| 152 | 149 |
| 153 tree.AddPathFromStart(path_vec); | 150 tree.AddPathFromStart(path_vec); |
| 154 CHECK_EQ(node1, helper.Walk(&entry1)); | 151 CHECK_EQ(node1, helper.Walk(&entry1)); |
| 155 CHECK_EQ(node2, helper.Walk(&entry1, &entry2)); | 152 CHECK_EQ(node2, helper.Walk(&entry1, &entry2)); |
| 156 CHECK_EQ(node3, helper.Walk(&entry1, &entry2, &entry3)); | 153 CHECK_EQ(node3, helper.Walk(&entry1, &entry2, &entry3)); |
| 157 CHECK_EQ(0, node1->total_ticks()); | |
| 158 CHECK_EQ(0, node1->self_ticks()); | 154 CHECK_EQ(0, node1->self_ticks()); |
| 159 CHECK_EQ(0, node2->total_ticks()); | |
| 160 CHECK_EQ(0, node2->self_ticks()); | 155 CHECK_EQ(0, node2->self_ticks()); |
| 161 CHECK_EQ(0, node3->total_ticks()); | |
| 162 CHECK_EQ(2, node3->self_ticks()); | 156 CHECK_EQ(2, node3->self_ticks()); |
| 163 | 157 |
| 164 CodeEntry* path2[] = {&entry1, &entry2, &entry2}; | 158 CodeEntry* path2[] = {&entry1, &entry2, &entry2}; |
| 165 Vector<CodeEntry*> path2_vec(path2, sizeof(path2) / sizeof(path2[0])); | 159 Vector<CodeEntry*> path2_vec(path2, sizeof(path2) / sizeof(path2[0])); |
| 166 tree.AddPathFromStart(path2_vec); | 160 tree.AddPathFromStart(path2_vec); |
| 167 CHECK_EQ(NULL, helper.Walk(&entry2)); | 161 CHECK_EQ(NULL, helper.Walk(&entry2)); |
| 168 CHECK_EQ(NULL, helper.Walk(&entry3)); | 162 CHECK_EQ(NULL, helper.Walk(&entry3)); |
| 169 CHECK_EQ(node1, helper.Walk(&entry1)); | 163 CHECK_EQ(node1, helper.Walk(&entry1)); |
| 170 CHECK_EQ(NULL, helper.Walk(&entry1, &entry1)); | 164 CHECK_EQ(NULL, helper.Walk(&entry1, &entry1)); |
| 171 CHECK_EQ(NULL, helper.Walk(&entry1, &entry3)); | 165 CHECK_EQ(NULL, helper.Walk(&entry1, &entry3)); |
| 172 CHECK_EQ(node2, helper.Walk(&entry1, &entry2)); | 166 CHECK_EQ(node2, helper.Walk(&entry1, &entry2)); |
| 173 CHECK_EQ(NULL, helper.Walk(&entry1, &entry2, &entry1)); | 167 CHECK_EQ(NULL, helper.Walk(&entry1, &entry2, &entry1)); |
| 174 CHECK_EQ(node3, helper.Walk(&entry1, &entry2, &entry3)); | 168 CHECK_EQ(node3, helper.Walk(&entry1, &entry2, &entry3)); |
| 175 CHECK_EQ(0, node3->total_ticks()); | |
| 176 CHECK_EQ(2, node3->self_ticks()); | 169 CHECK_EQ(2, node3->self_ticks()); |
| 177 ProfileNode* node4 = helper.Walk(&entry1, &entry2, &entry2); | 170 ProfileNode* node4 = helper.Walk(&entry1, &entry2, &entry2); |
| 178 CHECK_NE(NULL, node4); | 171 CHECK_NE(NULL, node4); |
| 179 CHECK_NE(node3, node4); | 172 CHECK_NE(node3, node4); |
| 180 CHECK_EQ(0, node4->total_ticks()); | |
| 181 CHECK_EQ(1, node4->self_ticks()); | 173 CHECK_EQ(1, node4->self_ticks()); |
| 182 } | 174 } |
| 183 | 175 |
| 184 | 176 |
| 185 TEST(ProfileTreeAddPathFromEnd) { | 177 TEST(ProfileTreeAddPathFromEnd) { |
| 186 CodeEntry entry1(i::Logger::FUNCTION_TAG, "aaa"); | 178 CodeEntry entry1(i::Logger::FUNCTION_TAG, "aaa"); |
| 187 CodeEntry entry2(i::Logger::FUNCTION_TAG, "bbb"); | 179 CodeEntry entry2(i::Logger::FUNCTION_TAG, "bbb"); |
| 188 CodeEntry entry3(i::Logger::FUNCTION_TAG, "ccc"); | 180 CodeEntry entry3(i::Logger::FUNCTION_TAG, "ccc"); |
| 189 ProfileTree tree; | 181 ProfileTree tree; |
| 190 ProfileTreeTestHelper helper(&tree); | 182 ProfileTreeTestHelper helper(&tree); |
| 191 CHECK_EQ(NULL, helper.Walk(&entry1)); | 183 CHECK_EQ(NULL, helper.Walk(&entry1)); |
| 192 CHECK_EQ(NULL, helper.Walk(&entry2)); | 184 CHECK_EQ(NULL, helper.Walk(&entry2)); |
| 193 CHECK_EQ(NULL, helper.Walk(&entry3)); | 185 CHECK_EQ(NULL, helper.Walk(&entry3)); |
| 194 | 186 |
| 195 CodeEntry* path[] = {NULL, &entry3, NULL, &entry2, NULL, NULL, &entry1, NULL}; | 187 CodeEntry* path[] = {NULL, &entry3, NULL, &entry2, NULL, NULL, &entry1, NULL}; |
| 196 Vector<CodeEntry*> path_vec(path, sizeof(path) / sizeof(path[0])); | 188 Vector<CodeEntry*> path_vec(path, sizeof(path) / sizeof(path[0])); |
| 197 tree.AddPathFromEnd(path_vec); | 189 tree.AddPathFromEnd(path_vec); |
| 198 CHECK_EQ(NULL, helper.Walk(&entry2)); | 190 CHECK_EQ(NULL, helper.Walk(&entry2)); |
| 199 CHECK_EQ(NULL, helper.Walk(&entry3)); | 191 CHECK_EQ(NULL, helper.Walk(&entry3)); |
| 200 ProfileNode* node1 = helper.Walk(&entry1); | 192 ProfileNode* node1 = helper.Walk(&entry1); |
| 201 CHECK_NE(NULL, node1); | 193 CHECK_NE(NULL, node1); |
| 202 CHECK_EQ(0, node1->total_ticks()); | |
| 203 CHECK_EQ(0, node1->self_ticks()); | 194 CHECK_EQ(0, node1->self_ticks()); |
| 204 CHECK_EQ(NULL, helper.Walk(&entry1, &entry1)); | 195 CHECK_EQ(NULL, helper.Walk(&entry1, &entry1)); |
| 205 CHECK_EQ(NULL, helper.Walk(&entry1, &entry3)); | 196 CHECK_EQ(NULL, helper.Walk(&entry1, &entry3)); |
| 206 ProfileNode* node2 = helper.Walk(&entry1, &entry2); | 197 ProfileNode* node2 = helper.Walk(&entry1, &entry2); |
| 207 CHECK_NE(NULL, node2); | 198 CHECK_NE(NULL, node2); |
| 208 CHECK_NE(node1, node2); | 199 CHECK_NE(node1, node2); |
| 209 CHECK_EQ(0, node2->total_ticks()); | |
| 210 CHECK_EQ(0, node2->self_ticks()); | 200 CHECK_EQ(0, node2->self_ticks()); |
| 211 CHECK_EQ(NULL, helper.Walk(&entry1, &entry2, &entry1)); | 201 CHECK_EQ(NULL, helper.Walk(&entry1, &entry2, &entry1)); |
| 212 CHECK_EQ(NULL, helper.Walk(&entry1, &entry2, &entry2)); | 202 CHECK_EQ(NULL, helper.Walk(&entry1, &entry2, &entry2)); |
| 213 ProfileNode* node3 = helper.Walk(&entry1, &entry2, &entry3); | 203 ProfileNode* node3 = helper.Walk(&entry1, &entry2, &entry3); |
| 214 CHECK_NE(NULL, node3); | 204 CHECK_NE(NULL, node3); |
| 215 CHECK_NE(node1, node3); | 205 CHECK_NE(node1, node3); |
| 216 CHECK_NE(node2, node3); | 206 CHECK_NE(node2, node3); |
| 217 CHECK_EQ(0, node3->total_ticks()); | |
| 218 CHECK_EQ(1, node3->self_ticks()); | 207 CHECK_EQ(1, node3->self_ticks()); |
| 219 | 208 |
| 220 tree.AddPathFromEnd(path_vec); | 209 tree.AddPathFromEnd(path_vec); |
| 221 CHECK_EQ(node1, helper.Walk(&entry1)); | 210 CHECK_EQ(node1, helper.Walk(&entry1)); |
| 222 CHECK_EQ(node2, helper.Walk(&entry1, &entry2)); | 211 CHECK_EQ(node2, helper.Walk(&entry1, &entry2)); |
| 223 CHECK_EQ(node3, helper.Walk(&entry1, &entry2, &entry3)); | 212 CHECK_EQ(node3, helper.Walk(&entry1, &entry2, &entry3)); |
| 224 CHECK_EQ(0, node1->total_ticks()); | |
| 225 CHECK_EQ(0, node1->self_ticks()); | 213 CHECK_EQ(0, node1->self_ticks()); |
| 226 CHECK_EQ(0, node2->total_ticks()); | |
| 227 CHECK_EQ(0, node2->self_ticks()); | 214 CHECK_EQ(0, node2->self_ticks()); |
| 228 CHECK_EQ(0, node3->total_ticks()); | |
| 229 CHECK_EQ(2, node3->self_ticks()); | 215 CHECK_EQ(2, node3->self_ticks()); |
| 230 | 216 |
| 231 CodeEntry* path2[] = {&entry2, &entry2, &entry1}; | 217 CodeEntry* path2[] = {&entry2, &entry2, &entry1}; |
| 232 Vector<CodeEntry*> path2_vec(path2, sizeof(path2) / sizeof(path2[0])); | 218 Vector<CodeEntry*> path2_vec(path2, sizeof(path2) / sizeof(path2[0])); |
| 233 tree.AddPathFromEnd(path2_vec); | 219 tree.AddPathFromEnd(path2_vec); |
| 234 CHECK_EQ(NULL, helper.Walk(&entry2)); | 220 CHECK_EQ(NULL, helper.Walk(&entry2)); |
| 235 CHECK_EQ(NULL, helper.Walk(&entry3)); | 221 CHECK_EQ(NULL, helper.Walk(&entry3)); |
| 236 CHECK_EQ(node1, helper.Walk(&entry1)); | 222 CHECK_EQ(node1, helper.Walk(&entry1)); |
| 237 CHECK_EQ(NULL, helper.Walk(&entry1, &entry1)); | 223 CHECK_EQ(NULL, helper.Walk(&entry1, &entry1)); |
| 238 CHECK_EQ(NULL, helper.Walk(&entry1, &entry3)); | 224 CHECK_EQ(NULL, helper.Walk(&entry1, &entry3)); |
| 239 CHECK_EQ(node2, helper.Walk(&entry1, &entry2)); | 225 CHECK_EQ(node2, helper.Walk(&entry1, &entry2)); |
| 240 CHECK_EQ(NULL, helper.Walk(&entry1, &entry2, &entry1)); | 226 CHECK_EQ(NULL, helper.Walk(&entry1, &entry2, &entry1)); |
| 241 CHECK_EQ(node3, helper.Walk(&entry1, &entry2, &entry3)); | 227 CHECK_EQ(node3, helper.Walk(&entry1, &entry2, &entry3)); |
| 242 CHECK_EQ(0, node3->total_ticks()); | |
| 243 CHECK_EQ(2, node3->self_ticks()); | 228 CHECK_EQ(2, node3->self_ticks()); |
| 244 ProfileNode* node4 = helper.Walk(&entry1, &entry2, &entry2); | 229 ProfileNode* node4 = helper.Walk(&entry1, &entry2, &entry2); |
| 245 CHECK_NE(NULL, node4); | 230 CHECK_NE(NULL, node4); |
| 246 CHECK_NE(node3, node4); | 231 CHECK_NE(node3, node4); |
| 247 CHECK_EQ(0, node4->total_ticks()); | |
| 248 CHECK_EQ(1, node4->self_ticks()); | 232 CHECK_EQ(1, node4->self_ticks()); |
| 249 } | 233 } |
| 250 | 234 |
| 251 | 235 |
| 252 TEST(ProfileTreeCalculateTotalTicks) { | 236 TEST(ProfileTreeCalculateTotalTicks) { |
| 253 ProfileTree empty_tree; | 237 ProfileTree empty_tree; |
| 254 CHECK_EQ(0, empty_tree.root()->total_ticks()); | |
| 255 CHECK_EQ(0, empty_tree.root()->self_ticks()); | |
| 256 empty_tree.CalculateTotalTicks(); | |
| 257 CHECK_EQ(0, empty_tree.root()->total_ticks()); | |
| 258 CHECK_EQ(0, empty_tree.root()->self_ticks()); | 238 CHECK_EQ(0, empty_tree.root()->self_ticks()); |
| 259 empty_tree.root()->IncrementSelfTicks(); | 239 empty_tree.root()->IncrementSelfTicks(); |
| 260 CHECK_EQ(0, empty_tree.root()->total_ticks()); | |
| 261 CHECK_EQ(1, empty_tree.root()->self_ticks()); | |
| 262 empty_tree.CalculateTotalTicks(); | |
| 263 CHECK_EQ(1, empty_tree.root()->total_ticks()); | |
| 264 CHECK_EQ(1, empty_tree.root()->self_ticks()); | 240 CHECK_EQ(1, empty_tree.root()->self_ticks()); |
| 265 | 241 |
| 266 CodeEntry entry1(i::Logger::FUNCTION_TAG, "aaa"); | 242 CodeEntry entry1(i::Logger::FUNCTION_TAG, "aaa"); |
| 267 CodeEntry* e1_path[] = {&entry1}; | 243 CodeEntry* e1_path[] = {&entry1}; |
| 268 Vector<CodeEntry*> e1_path_vec( | 244 Vector<CodeEntry*> e1_path_vec( |
| 269 e1_path, sizeof(e1_path) / sizeof(e1_path[0])); | 245 e1_path, sizeof(e1_path) / sizeof(e1_path[0])); |
| 270 | 246 |
| 271 ProfileTree single_child_tree; | 247 ProfileTree single_child_tree; |
| 272 single_child_tree.AddPathFromStart(e1_path_vec); | 248 single_child_tree.AddPathFromStart(e1_path_vec); |
| 273 single_child_tree.root()->IncrementSelfTicks(); | 249 single_child_tree.root()->IncrementSelfTicks(); |
| 274 CHECK_EQ(0, single_child_tree.root()->total_ticks()); | |
| 275 CHECK_EQ(1, single_child_tree.root()->self_ticks()); | 250 CHECK_EQ(1, single_child_tree.root()->self_ticks()); |
| 276 ProfileTreeTestHelper single_child_helper(&single_child_tree); | 251 ProfileTreeTestHelper single_child_helper(&single_child_tree); |
| 277 ProfileNode* node1 = single_child_helper.Walk(&entry1); | 252 ProfileNode* node1 = single_child_helper.Walk(&entry1); |
| 278 CHECK_NE(NULL, node1); | 253 CHECK_NE(NULL, node1); |
| 279 CHECK_EQ(0, node1->total_ticks()); | |
| 280 CHECK_EQ(1, node1->self_ticks()); | |
| 281 single_child_tree.CalculateTotalTicks(); | |
| 282 CHECK_EQ(2, single_child_tree.root()->total_ticks()); | |
| 283 CHECK_EQ(1, single_child_tree.root()->self_ticks()); | 254 CHECK_EQ(1, single_child_tree.root()->self_ticks()); |
| 284 CHECK_EQ(1, node1->total_ticks()); | |
| 285 CHECK_EQ(1, node1->self_ticks()); | 255 CHECK_EQ(1, node1->self_ticks()); |
| 286 | 256 |
| 287 CodeEntry entry2(i::Logger::FUNCTION_TAG, "bbb"); | 257 CodeEntry entry2(i::Logger::FUNCTION_TAG, "bbb"); |
| 288 CodeEntry* e1_e2_path[] = {&entry1, &entry2}; | 258 CodeEntry* e1_e2_path[] = {&entry1, &entry2}; |
| 289 Vector<CodeEntry*> e1_e2_path_vec( | 259 Vector<CodeEntry*> e1_e2_path_vec( |
| 290 e1_e2_path, sizeof(e1_e2_path) / sizeof(e1_e2_path[0])); | 260 e1_e2_path, sizeof(e1_e2_path) / sizeof(e1_e2_path[0])); |
| 291 | 261 |
| 292 ProfileTree flat_tree; | 262 ProfileTree flat_tree; |
| 293 ProfileTreeTestHelper flat_helper(&flat_tree); | 263 ProfileTreeTestHelper flat_helper(&flat_tree); |
| 294 flat_tree.AddPathFromStart(e1_path_vec); | 264 flat_tree.AddPathFromStart(e1_path_vec); |
| 295 flat_tree.AddPathFromStart(e1_path_vec); | 265 flat_tree.AddPathFromStart(e1_path_vec); |
| 296 flat_tree.AddPathFromStart(e1_e2_path_vec); | 266 flat_tree.AddPathFromStart(e1_e2_path_vec); |
| 297 flat_tree.AddPathFromStart(e1_e2_path_vec); | 267 flat_tree.AddPathFromStart(e1_e2_path_vec); |
| 298 flat_tree.AddPathFromStart(e1_e2_path_vec); | 268 flat_tree.AddPathFromStart(e1_e2_path_vec); |
| 299 // Results in {root,0,0} -> {entry1,0,2} -> {entry2,0,3} | 269 // Results in {root,0,0} -> {entry1,0,2} -> {entry2,0,3} |
| 300 CHECK_EQ(0, flat_tree.root()->total_ticks()); | |
| 301 CHECK_EQ(0, flat_tree.root()->self_ticks()); | 270 CHECK_EQ(0, flat_tree.root()->self_ticks()); |
| 302 node1 = flat_helper.Walk(&entry1); | 271 node1 = flat_helper.Walk(&entry1); |
| 303 CHECK_NE(NULL, node1); | 272 CHECK_NE(NULL, node1); |
| 304 CHECK_EQ(0, node1->total_ticks()); | |
| 305 CHECK_EQ(2, node1->self_ticks()); | 273 CHECK_EQ(2, node1->self_ticks()); |
| 306 ProfileNode* node2 = flat_helper.Walk(&entry1, &entry2); | 274 ProfileNode* node2 = flat_helper.Walk(&entry1, &entry2); |
| 307 CHECK_NE(NULL, node2); | 275 CHECK_NE(NULL, node2); |
| 308 CHECK_EQ(0, node2->total_ticks()); | |
| 309 CHECK_EQ(3, node2->self_ticks()); | 276 CHECK_EQ(3, node2->self_ticks()); |
| 310 flat_tree.CalculateTotalTicks(); | |
| 311 // Must calculate {root,5,0} -> {entry1,5,2} -> {entry2,3,3} | 277 // Must calculate {root,5,0} -> {entry1,5,2} -> {entry2,3,3} |
| 312 CHECK_EQ(5, flat_tree.root()->total_ticks()); | |
| 313 CHECK_EQ(0, flat_tree.root()->self_ticks()); | 278 CHECK_EQ(0, flat_tree.root()->self_ticks()); |
| 314 CHECK_EQ(5, node1->total_ticks()); | |
| 315 CHECK_EQ(2, node1->self_ticks()); | 279 CHECK_EQ(2, node1->self_ticks()); |
| 316 CHECK_EQ(3, node2->total_ticks()); | |
| 317 CHECK_EQ(3, node2->self_ticks()); | |
| 318 | 280 |
| 319 CodeEntry* e2_path[] = {&entry2}; | 281 CodeEntry* e2_path[] = {&entry2}; |
| 320 Vector<CodeEntry*> e2_path_vec( | 282 Vector<CodeEntry*> e2_path_vec( |
| 321 e2_path, sizeof(e2_path) / sizeof(e2_path[0])); | 283 e2_path, sizeof(e2_path) / sizeof(e2_path[0])); |
| 322 CodeEntry entry3(i::Logger::FUNCTION_TAG, "ccc"); | 284 CodeEntry entry3(i::Logger::FUNCTION_TAG, "ccc"); |
| 323 CodeEntry* e3_path[] = {&entry3}; | 285 CodeEntry* e3_path[] = {&entry3}; |
| 324 Vector<CodeEntry*> e3_path_vec( | 286 Vector<CodeEntry*> e3_path_vec( |
| 325 e3_path, sizeof(e3_path) / sizeof(e3_path[0])); | 287 e3_path, sizeof(e3_path) / sizeof(e3_path[0])); |
| 326 | 288 |
| 327 ProfileTree wide_tree; | 289 ProfileTree wide_tree; |
| 328 ProfileTreeTestHelper wide_helper(&wide_tree); | 290 ProfileTreeTestHelper wide_helper(&wide_tree); |
| 329 wide_tree.AddPathFromStart(e1_path_vec); | 291 wide_tree.AddPathFromStart(e1_path_vec); |
| 330 wide_tree.AddPathFromStart(e1_path_vec); | 292 wide_tree.AddPathFromStart(e1_path_vec); |
| 331 wide_tree.AddPathFromStart(e1_e2_path_vec); | 293 wide_tree.AddPathFromStart(e1_e2_path_vec); |
| 332 wide_tree.AddPathFromStart(e2_path_vec); | 294 wide_tree.AddPathFromStart(e2_path_vec); |
| 333 wide_tree.AddPathFromStart(e2_path_vec); | 295 wide_tree.AddPathFromStart(e2_path_vec); |
| 334 wide_tree.AddPathFromStart(e2_path_vec); | 296 wide_tree.AddPathFromStart(e2_path_vec); |
| 335 wide_tree.AddPathFromStart(e3_path_vec); | 297 wide_tree.AddPathFromStart(e3_path_vec); |
| 336 wide_tree.AddPathFromStart(e3_path_vec); | 298 wide_tree.AddPathFromStart(e3_path_vec); |
| 337 wide_tree.AddPathFromStart(e3_path_vec); | 299 wide_tree.AddPathFromStart(e3_path_vec); |
| 338 wide_tree.AddPathFromStart(e3_path_vec); | 300 wide_tree.AddPathFromStart(e3_path_vec); |
| 339 // Results in -> {entry1,0,2} -> {entry2,0,1} | 301 // Results in -> {entry1,0,2} -> {entry2,0,1} |
| 340 // {root,0,0} -> {entry2,0,3} | 302 // {root,0,0} -> {entry2,0,3} |
| 341 // -> {entry3,0,4} | 303 // -> {entry3,0,4} |
| 342 CHECK_EQ(0, wide_tree.root()->total_ticks()); | |
| 343 CHECK_EQ(0, wide_tree.root()->self_ticks()); | 304 CHECK_EQ(0, wide_tree.root()->self_ticks()); |
| 344 node1 = wide_helper.Walk(&entry1); | 305 node1 = wide_helper.Walk(&entry1); |
| 345 CHECK_NE(NULL, node1); | 306 CHECK_NE(NULL, node1); |
| 346 CHECK_EQ(0, node1->total_ticks()); | |
| 347 CHECK_EQ(2, node1->self_ticks()); | 307 CHECK_EQ(2, node1->self_ticks()); |
| 348 ProfileNode* node1_2 = wide_helper.Walk(&entry1, &entry2); | 308 ProfileNode* node1_2 = wide_helper.Walk(&entry1, &entry2); |
| 349 CHECK_NE(NULL, node1_2); | 309 CHECK_NE(NULL, node1_2); |
| 350 CHECK_EQ(0, node1_2->total_ticks()); | |
| 351 CHECK_EQ(1, node1_2->self_ticks()); | 310 CHECK_EQ(1, node1_2->self_ticks()); |
| 352 node2 = wide_helper.Walk(&entry2); | 311 node2 = wide_helper.Walk(&entry2); |
| 353 CHECK_NE(NULL, node2); | 312 CHECK_NE(NULL, node2); |
| 354 CHECK_EQ(0, node2->total_ticks()); | |
| 355 CHECK_EQ(3, node2->self_ticks()); | 313 CHECK_EQ(3, node2->self_ticks()); |
| 356 ProfileNode* node3 = wide_helper.Walk(&entry3); | 314 ProfileNode* node3 = wide_helper.Walk(&entry3); |
| 357 CHECK_NE(NULL, node3); | 315 CHECK_NE(NULL, node3); |
| 358 CHECK_EQ(0, node3->total_ticks()); | |
| 359 CHECK_EQ(4, node3->self_ticks()); | 316 CHECK_EQ(4, node3->self_ticks()); |
| 360 wide_tree.CalculateTotalTicks(); | |
| 361 // Calculates -> {entry1,3,2} -> {entry2,1,1} | 317 // Calculates -> {entry1,3,2} -> {entry2,1,1} |
| 362 // {root,10,0} -> {entry2,3,3} | 318 // {root,10,0} -> {entry2,3,3} |
| 363 // -> {entry3,4,4} | 319 // -> {entry3,4,4} |
| 364 CHECK_EQ(10, wide_tree.root()->total_ticks()); | |
| 365 CHECK_EQ(0, wide_tree.root()->self_ticks()); | 320 CHECK_EQ(0, wide_tree.root()->self_ticks()); |
| 366 CHECK_EQ(3, node1->total_ticks()); | |
| 367 CHECK_EQ(2, node1->self_ticks()); | 321 CHECK_EQ(2, node1->self_ticks()); |
| 368 CHECK_EQ(1, node1_2->total_ticks()); | |
| 369 CHECK_EQ(1, node1_2->self_ticks()); | 322 CHECK_EQ(1, node1_2->self_ticks()); |
| 370 CHECK_EQ(3, node2->total_ticks()); | |
| 371 CHECK_EQ(3, node2->self_ticks()); | 323 CHECK_EQ(3, node2->self_ticks()); |
| 372 CHECK_EQ(4, node3->total_ticks()); | |
| 373 CHECK_EQ(4, node3->self_ticks()); | 324 CHECK_EQ(4, node3->self_ticks()); |
| 374 } | 325 } |
| 375 | 326 |
| 376 | 327 |
| 377 static inline i::Address ToAddress(int n) { | 328 static inline i::Address ToAddress(int n) { |
| 378 return reinterpret_cast<i::Address>(n); | 329 return reinterpret_cast<i::Address>(n); |
| 379 } | 330 } |
| 380 | 331 |
| 381 | 332 |
| 382 TEST(CodeMapAddCode) { | 333 TEST(CodeMapAddCode) { |
| (...skipping 441 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 824 | 775 |
| 825 profiler->processor()->StopSynchronously(); | 776 profiler->processor()->StopSynchronously(); |
| 826 | 777 |
| 827 CHECK_EQ(1, GetFunctionLineNumber(&env, "foo_at_the_first_line")); | 778 CHECK_EQ(1, GetFunctionLineNumber(&env, "foo_at_the_first_line")); |
| 828 CHECK_EQ(0, GetFunctionLineNumber(&env, "lazy_func_at_forth_line")); | 779 CHECK_EQ(0, GetFunctionLineNumber(&env, "lazy_func_at_forth_line")); |
| 829 CHECK_EQ(2, GetFunctionLineNumber(&env, "bar_at_the_second_line")); | 780 CHECK_EQ(2, GetFunctionLineNumber(&env, "bar_at_the_second_line")); |
| 830 CHECK_EQ(0, GetFunctionLineNumber(&env, "lazy_func_at_6th_line")); | 781 CHECK_EQ(0, GetFunctionLineNumber(&env, "lazy_func_at_6th_line")); |
| 831 | 782 |
| 832 profiler->StopProfiling("LineNumber"); | 783 profiler->StopProfiling("LineNumber"); |
| 833 } | 784 } |
| OLD | NEW |