| Index: src/profiler/profile-generator.cc
|
| diff --git a/src/profiler/profile-generator.cc b/src/profiler/profile-generator.cc
|
| index 890f341e895b10f5b645417b75b3b2208f2d3948..4c4205290fd0f677a4b8b876637fcc0f4fbffad0 100644
|
| --- a/src/profiler/profile-generator.cc
|
| +++ b/src/profiler/profile-generator.cc
|
| @@ -274,9 +274,8 @@ unsigned ProfileTree::GetFunctionId(const ProfileNode* node) {
|
| return static_cast<unsigned>(reinterpret_cast<uintptr_t>(entry->value));
|
| }
|
|
|
| -
|
| ProfileNode* ProfileTree::AddPathFromEnd(const Vector<CodeEntry*>& path,
|
| - int src_line) {
|
| + int src_line, bool update_stats) {
|
| ProfileNode* node = root_;
|
| CodeEntry* last_entry = NULL;
|
| for (CodeEntry** entry = path.start() + path.length() - 1;
|
| @@ -290,9 +289,11 @@ ProfileNode* ProfileTree::AddPathFromEnd(const Vector<CodeEntry*>& path,
|
| if (last_entry && last_entry->has_deopt_info()) {
|
| node->CollectDeoptInfo(last_entry);
|
| }
|
| - node->IncrementSelfTicks();
|
| - if (src_line != v8::CpuProfileNode::kNoLineNumberInfo) {
|
| - node->IncrementLineTicks(src_line);
|
| + if (update_stats) {
|
| + node->IncrementSelfTicks();
|
| + if (src_line != v8::CpuProfileNode::kNoLineNumberInfo) {
|
| + node->IncrementLineTicks(src_line);
|
| + }
|
| }
|
| return node;
|
| }
|
| @@ -354,10 +355,11 @@ CpuProfile::CpuProfile(Isolate* isolate, const char* title, bool record_samples)
|
| start_time_(base::TimeTicks::HighResolutionNow()),
|
| top_down_(isolate) {}
|
|
|
| -
|
| void CpuProfile::AddPath(base::TimeTicks timestamp,
|
| - const Vector<CodeEntry*>& path, int src_line) {
|
| - ProfileNode* top_frame_node = top_down_.AddPathFromEnd(path, src_line);
|
| + const Vector<CodeEntry*>& path, int src_line,
|
| + bool update_stats) {
|
| + ProfileNode* top_frame_node =
|
| + top_down_.AddPathFromEnd(path, src_line, update_stats);
|
| if (record_samples_) {
|
| timestamps_.Add(timestamp);
|
| samples_.Add(top_frame_node);
|
| @@ -522,15 +524,15 @@ void CpuProfilesCollection::RemoveProfile(CpuProfile* profile) {
|
| UNREACHABLE();
|
| }
|
|
|
| -
|
| void CpuProfilesCollection::AddPathToCurrentProfiles(
|
| - base::TimeTicks timestamp, const Vector<CodeEntry*>& path, int src_line) {
|
| + base::TimeTicks timestamp, const Vector<CodeEntry*>& path, int src_line,
|
| + bool update_stats) {
|
| // As starting / stopping profiles is rare relatively to this
|
| // method, we don't bother minimizing the duration of lock holding,
|
| // e.g. copying contents of the list to a local vector.
|
| current_profiles_semaphore_.Wait();
|
| for (int i = 0; i < current_profiles_.length(); ++i) {
|
| - current_profiles_[i]->AddPath(timestamp, path, src_line);
|
| + current_profiles_[i]->AddPath(timestamp, path, src_line, update_stats);
|
| }
|
| current_profiles_semaphore_.Signal();
|
| }
|
| @@ -670,7 +672,8 @@ void ProfileGenerator::RecordTickSample(const TickSample& sample) {
|
| }
|
| }
|
|
|
| - profiles_->AddPathToCurrentProfiles(sample.timestamp, entries, src_line);
|
| + profiles_->AddPathToCurrentProfiles(sample.timestamp, entries, src_line,
|
| + sample.update_stats);
|
| }
|
|
|
|
|
|
|