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

Side by Side Diff: src/log.cc

Issue 6708056: Change the way sampler / profiler handle external callbacks. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 9 years, 9 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
« no previous file with comments | « no previous file | src/platform.h » ('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 2009 the V8 project authors. All rights reserved. 1 // Copyright 2009 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 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 // Avoid collecting traces while doing GC. 153 // Avoid collecting traces while doing GC.
154 if (sample->state == GC) return; 154 if (sample->state == GC) return;
155 155
156 const Address js_entry_sp = 156 const Address js_entry_sp =
157 Isolate::js_entry_sp(isolate->thread_local_top()); 157 Isolate::js_entry_sp(isolate->thread_local_top());
158 if (js_entry_sp == 0) { 158 if (js_entry_sp == 0) {
159 // Not executing JS now. 159 // Not executing JS now.
160 return; 160 return;
161 } 161 }
162 162
163 // Sample potential return address value for frameless invocation of
164 // stubs (we'll figure out later, if this value makes sense).
165 sample->tos = Memory::Address_at(sample->sp);
166
167 int i = 0;
168 const Address callback = isolate->external_callback(); 163 const Address callback = isolate->external_callback();
169 // Surprisingly, PC can point _exactly_ to callback start, with good 164 if (callback != NULL) {
170 // probability, and this will result in reporting fake nested 165 sample->external_callback = callback;
171 // callback call. 166 sample->has_external_callback = true;
172 if (callback != NULL && callback != sample->pc) { 167 } else {
173 sample->stack[i++] = callback; 168 // Sample potential return address value for frameless invocation of
169 // stubs (we'll figure out later, if this value makes sense).
170 sample->tos = Memory::Address_at(sample->sp);
171 sample->has_external_callback = false;
174 } 172 }
175 173
176 SafeStackTraceFrameIterator it(isolate, 174 SafeStackTraceFrameIterator it(isolate,
177 sample->fp, sample->sp, 175 sample->fp, sample->sp,
178 sample->sp, js_entry_sp); 176 sample->sp, js_entry_sp);
177 int i = 0;
179 while (!it.done() && i < TickSample::kMaxFramesCount) { 178 while (!it.done() && i < TickSample::kMaxFramesCount) {
180 sample->stack[i++] = it.frame()->pc(); 179 sample->stack[i++] = it.frame()->pc();
181 it.Advance(); 180 it.Advance();
182 } 181 }
183 sample->frames_count = i; 182 sample->frames_count = i;
184 } 183 }
185 184
186 185
187 // 186 //
188 // Ticker used to provide ticks to the profiler and the sliding state 187 // Ticker used to provide ticks to the profiler and the sliding state
(...skipping 938 matching lines...) Expand 10 before | Expand all | Expand 10 after
1127 1126
1128 #ifdef ENABLE_LOGGING_AND_PROFILING 1127 #ifdef ENABLE_LOGGING_AND_PROFILING
1129 void Logger::TickEvent(TickSample* sample, bool overflow) { 1128 void Logger::TickEvent(TickSample* sample, bool overflow) {
1130 if (!log_->IsEnabled() || !FLAG_prof) return; 1129 if (!log_->IsEnabled() || !FLAG_prof) return;
1131 LogMessageBuilder msg(this); 1130 LogMessageBuilder msg(this);
1132 msg.Append("%s,", kLogEventsNames[TICK_EVENT]); 1131 msg.Append("%s,", kLogEventsNames[TICK_EVENT]);
1133 msg.AppendAddress(sample->pc); 1132 msg.AppendAddress(sample->pc);
1134 msg.Append(','); 1133 msg.Append(',');
1135 msg.AppendAddress(sample->sp); 1134 msg.AppendAddress(sample->sp);
1136 msg.Append(','); 1135 msg.Append(',');
1137 msg.AppendAddress(sample->tos); 1136 if (sample->has_external_callback) {
1137 msg.Append(",1,");
1138 msg.AppendAddress(sample->external_callback);
1139 } else {
1140 msg.Append(",0,");
1141 msg.AppendAddress(sample->tos);
1142 }
1138 msg.Append(",%d", static_cast<int>(sample->state)); 1143 msg.Append(",%d", static_cast<int>(sample->state));
1139 if (overflow) { 1144 if (overflow) {
1140 msg.Append(",overflow"); 1145 msg.Append(",overflow");
1141 } 1146 }
1142 for (int i = 0; i < sample->frames_count; ++i) { 1147 for (int i = 0; i < sample->frames_count; ++i) {
1143 msg.Append(','); 1148 msg.Append(',');
1144 msg.AppendAddress(sample->stack[i]); 1149 msg.AppendAddress(sample->stack[i]);
1145 } 1150 }
1146 msg.Append('\n'); 1151 msg.Append('\n');
1147 msg.WriteToLogFile(); 1152 msg.WriteToLogFile();
(...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after
1649 void SamplerRegistry::RemoveActiveSampler(Sampler* sampler) { 1654 void SamplerRegistry::RemoveActiveSampler(Sampler* sampler) {
1650 ASSERT(sampler->IsActive()); 1655 ASSERT(sampler->IsActive());
1651 ScopedLock lock(mutex_); 1656 ScopedLock lock(mutex_);
1652 ASSERT(active_samplers_ != NULL); 1657 ASSERT(active_samplers_ != NULL);
1653 bool removed = active_samplers_->RemoveElement(sampler); 1658 bool removed = active_samplers_->RemoveElement(sampler);
1654 ASSERT(removed); 1659 ASSERT(removed);
1655 USE(removed); 1660 USE(removed);
1656 } 1661 }
1657 1662
1658 } } // namespace v8::internal 1663 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « no previous file | src/platform.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698