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

Side by Side Diff: src/profiler/profile-generator.cc

Issue 1709873002: Do not record CPU profile samples when stack collection is failed. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Make spoiled samples still contribute to the stats. Created 4 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
« no previous file with comments | « no previous file | src/profiler/sampler.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/debug/debug.h" 8 #include "src/debug/debug.h"
9 #include "src/deoptimizer.h" 9 #include "src/deoptimizer.h"
10 #include "src/global-handles.h" 10 #include "src/global-handles.h"
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 : title_(title), 353 : title_(title),
354 record_samples_(record_samples), 354 record_samples_(record_samples),
355 start_time_(base::TimeTicks::HighResolutionNow()), 355 start_time_(base::TimeTicks::HighResolutionNow()),
356 top_down_(isolate) {} 356 top_down_(isolate) {}
357 357
358 void CpuProfile::AddPath(base::TimeTicks timestamp, 358 void CpuProfile::AddPath(base::TimeTicks timestamp,
359 const Vector<CodeEntry*>& path, int src_line, 359 const Vector<CodeEntry*>& path, int src_line,
360 bool update_stats) { 360 bool update_stats) {
361 ProfileNode* top_frame_node = 361 ProfileNode* top_frame_node =
362 top_down_.AddPathFromEnd(path, src_line, update_stats); 362 top_down_.AddPathFromEnd(path, src_line, update_stats);
363 if (record_samples_) { 363 if (record_samples_ && !timestamp.IsNull()) {
364 timestamps_.Add(timestamp); 364 timestamps_.Add(timestamp);
365 samples_.Add(top_frame_node); 365 samples_.Add(top_frame_node);
366 } 366 }
367 } 367 }
368 368
369 369
370 void CpuProfile::CalculateTotalTicksAndSamplingRate() { 370 void CpuProfile::CalculateTotalTicksAndSamplingRate() {
371 end_time_ = base::TimeTicks::HighResolutionNow(); 371 end_time_ = base::TimeTicks::HighResolutionNow();
372 } 372 }
373 373
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
629 // In the latter case we know the caller for sure but in the 629 // In the latter case we know the caller for sure but in the
630 // former case we don't so we simply replace the frame with 630 // former case we don't so we simply replace the frame with
631 // 'unresolved' entry. 631 // 'unresolved' entry.
632 if (sample.top_frame_type == StackFrame::JAVA_SCRIPT) { 632 if (sample.top_frame_type == StackFrame::JAVA_SCRIPT) {
633 *entry++ = unresolved_entry_; 633 *entry++ = unresolved_entry_;
634 } 634 }
635 } 635 }
636 } 636 }
637 } 637 }
638 638
639 for (const Address* stack_pos = sample.stack, 639 for (const Address *stack_pos = sample.stack,
640 *stack_end = stack_pos + sample.frames_count; 640 *stack_end = stack_pos + sample.frames_count;
641 stack_pos != stack_end; 641 stack_pos != stack_end; ++stack_pos) {
642 ++stack_pos) {
643 *entry = code_map_.FindEntry(*stack_pos); 642 *entry = code_map_.FindEntry(*stack_pos);
644 643
645 // Skip unresolved frames (e.g. internal frame) and get source line of 644 // Skip unresolved frames (e.g. internal frame) and get source line of
646 // the first JS caller. 645 // the first JS caller.
647 if (src_line_not_found && *entry) { 646 if (src_line_not_found && *entry) {
648 int pc_offset = 647 int pc_offset =
649 static_cast<int>(*stack_pos - (*entry)->instruction_start()); 648 static_cast<int>(*stack_pos - (*entry)->instruction_start());
650 src_line = (*entry)->GetSourceLine(pc_offset); 649 src_line = (*entry)->GetSourceLine(pc_offset);
651 if (src_line == v8::CpuProfileNode::kNoLineNumberInfo) { 650 if (src_line == v8::CpuProfileNode::kNoLineNumberInfo) {
652 src_line = (*entry)->line_number(); 651 src_line = (*entry)->line_number();
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
690 case EXTERNAL: 689 case EXTERNAL:
691 return program_entry_; 690 return program_entry_;
692 case IDLE: 691 case IDLE:
693 return idle_entry_; 692 return idle_entry_;
694 default: return NULL; 693 default: return NULL;
695 } 694 }
696 } 695 }
697 696
698 } // namespace internal 697 } // namespace internal
699 } // namespace v8 698 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/profiler/sampler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698