OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/profiler/profile-generator.h" | 5 #include "src/profiler/profile-generator.h" |
6 | 6 |
7 #include "src/ast/scopeinfo.h" | 7 #include "src/ast/scopeinfo.h" |
8 #include "src/base/adapters.h" | 8 #include "src/base/adapters.h" |
9 #include "src/debug/debug.h" | 9 #include "src/debug/debug.h" |
10 #include "src/deoptimizer.h" | 10 #include "src/deoptimizer.h" |
11 #include "src/global-handles.h" | 11 #include "src/global-handles.h" |
| 12 #include "src/profiler/cpu-profiler.h" |
12 #include "src/profiler/profile-generator-inl.h" | 13 #include "src/profiler/profile-generator-inl.h" |
13 #include "src/profiler/tick-sample.h" | 14 #include "src/profiler/tick-sample.h" |
14 #include "src/unicode.h" | 15 #include "src/unicode.h" |
15 | 16 |
16 namespace v8 { | 17 namespace v8 { |
17 namespace internal { | 18 namespace internal { |
18 | 19 |
19 | 20 |
20 JITLineInfoTable::JITLineInfoTable() {} | 21 JITLineInfoTable::JITLineInfoTable() {} |
21 | 22 |
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
358 Position& parent = stack[stack.length() - 2]; | 359 Position& parent = stack[stack.length() - 2]; |
359 callback->AfterChildTraversed(parent.node, current.node); | 360 callback->AfterChildTraversed(parent.node, current.node); |
360 parent.next_child(); | 361 parent.next_child(); |
361 } | 362 } |
362 // Remove child from the stack. | 363 // Remove child from the stack. |
363 stack.RemoveLast(); | 364 stack.RemoveLast(); |
364 } | 365 } |
365 } | 366 } |
366 } | 367 } |
367 | 368 |
368 | 369 CpuProfile::CpuProfile(CpuProfiler* profiler, const char* title, |
369 CpuProfile::CpuProfile(Isolate* isolate, const char* title, bool record_samples) | 370 bool record_samples) |
370 : title_(title), | 371 : title_(title), |
371 record_samples_(record_samples), | 372 record_samples_(record_samples), |
372 start_time_(base::TimeTicks::HighResolutionNow()), | 373 start_time_(base::TimeTicks::HighResolutionNow()), |
373 top_down_(isolate) {} | 374 top_down_(profiler->isolate()), |
| 375 profiler_(profiler) {} |
374 | 376 |
375 void CpuProfile::AddPath(base::TimeTicks timestamp, | 377 void CpuProfile::AddPath(base::TimeTicks timestamp, |
376 const std::vector<CodeEntry*>& path, int src_line, | 378 const std::vector<CodeEntry*>& path, int src_line, |
377 bool update_stats) { | 379 bool update_stats) { |
378 ProfileNode* top_frame_node = | 380 ProfileNode* top_frame_node = |
379 top_down_.AddPathFromEnd(path, src_line, update_stats); | 381 top_down_.AddPathFromEnd(path, src_line, update_stats); |
380 if (record_samples_ && !timestamp.IsNull()) { | 382 if (record_samples_ && !timestamp.IsNull()) { |
381 timestamps_.Add(timestamp); | 383 timestamps_.Add(timestamp); |
382 samples_.Add(top_frame_node); | 384 samples_.Add(top_frame_node); |
383 } | 385 } |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
425 AddCode(to, info.entry, info.size); | 427 AddCode(to, info.entry, info.size); |
426 } | 428 } |
427 | 429 |
428 void CodeMap::Print() { | 430 void CodeMap::Print() { |
429 for (auto it = code_map_.begin(); it != code_map_.end(); ++it) { | 431 for (auto it = code_map_.begin(); it != code_map_.end(); ++it) { |
430 base::OS::Print("%p %5d %s\n", static_cast<void*>(it->first), | 432 base::OS::Print("%p %5d %s\n", static_cast<void*>(it->first), |
431 it->second.size, it->second.entry->name()); | 433 it->second.size, it->second.entry->name()); |
432 } | 434 } |
433 } | 435 } |
434 | 436 |
435 CpuProfilesCollection::CpuProfilesCollection(Heap* heap) | 437 CpuProfilesCollection::CpuProfilesCollection(Isolate* isolate) |
436 : function_and_resource_names_(heap), | 438 : function_and_resource_names_(isolate->heap()), |
437 isolate_(heap->isolate()), | 439 profiler_(nullptr), |
438 current_profiles_semaphore_(1) {} | 440 current_profiles_semaphore_(1) {} |
439 | 441 |
440 | |
441 static void DeleteCodeEntry(CodeEntry** entry_ptr) { | 442 static void DeleteCodeEntry(CodeEntry** entry_ptr) { |
442 delete *entry_ptr; | 443 delete *entry_ptr; |
443 } | 444 } |
444 | 445 |
445 | 446 |
446 static void DeleteCpuProfile(CpuProfile** profile_ptr) { | 447 static void DeleteCpuProfile(CpuProfile** profile_ptr) { |
447 delete *profile_ptr; | 448 delete *profile_ptr; |
448 } | 449 } |
449 | 450 |
450 | 451 |
(...skipping 12 matching lines...) Expand all Loading... |
463 return false; | 464 return false; |
464 } | 465 } |
465 for (int i = 0; i < current_profiles_.length(); ++i) { | 466 for (int i = 0; i < current_profiles_.length(); ++i) { |
466 if (strcmp(current_profiles_[i]->title(), title) == 0) { | 467 if (strcmp(current_profiles_[i]->title(), title) == 0) { |
467 // Ignore attempts to start profile with the same title... | 468 // Ignore attempts to start profile with the same title... |
468 current_profiles_semaphore_.Signal(); | 469 current_profiles_semaphore_.Signal(); |
469 // ... though return true to force it collect a sample. | 470 // ... though return true to force it collect a sample. |
470 return true; | 471 return true; |
471 } | 472 } |
472 } | 473 } |
473 current_profiles_.Add(new CpuProfile(isolate_, title, record_samples)); | 474 current_profiles_.Add(new CpuProfile(profiler_, title, record_samples)); |
474 current_profiles_semaphore_.Signal(); | 475 current_profiles_semaphore_.Signal(); |
475 return true; | 476 return true; |
476 } | 477 } |
477 | 478 |
478 | 479 |
479 CpuProfile* CpuProfilesCollection::StopProfiling(const char* title) { | 480 CpuProfile* CpuProfilesCollection::StopProfiling(const char* title) { |
480 const int title_len = StrLength(title); | 481 const int title_len = StrLength(title); |
481 CpuProfile* profile = NULL; | 482 CpuProfile* profile = NULL; |
482 current_profiles_semaphore_.Wait(); | 483 current_profiles_semaphore_.Wait(); |
483 for (int i = current_profiles_.length() - 1; i >= 0; --i) { | 484 for (int i = current_profiles_.length() - 1; i >= 0; --i) { |
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
684 case EXTERNAL: | 685 case EXTERNAL: |
685 return program_entry_; | 686 return program_entry_; |
686 case IDLE: | 687 case IDLE: |
687 return idle_entry_; | 688 return idle_entry_; |
688 default: return NULL; | 689 default: return NULL; |
689 } | 690 } |
690 } | 691 } |
691 | 692 |
692 } // namespace internal | 693 } // namespace internal |
693 } // namespace v8 | 694 } // namespace v8 |
OLD | NEW |