| OLD | NEW | 
|---|
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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/log.h" | 5 #include "src/log.h" | 
| 6 | 6 | 
| 7 #include <cstdarg> | 7 #include <cstdarg> | 
| 8 #include <sstream> | 8 #include <sstream> | 
| 9 | 9 | 
| 10 #include "src/v8.h" | 10 #include "src/v8.h" | 
| (...skipping 30 matching lines...) Expand all  Loading... | 
| 41 } | 41 } | 
| 42 | 42 | 
| 43 #define PROFILER_LOG(Call)                                \ | 43 #define PROFILER_LOG(Call)                                \ | 
| 44   do {                                                    \ | 44   do {                                                    \ | 
| 45     CpuProfiler* cpu_profiler = isolate_->cpu_profiler(); \ | 45     CpuProfiler* cpu_profiler = isolate_->cpu_profiler(); \ | 
| 46     if (cpu_profiler->is_profiling()) {                   \ | 46     if (cpu_profiler->is_profiling()) {                   \ | 
| 47       cpu_profiler->Call;                                 \ | 47       cpu_profiler->Call;                                 \ | 
| 48     }                                                     \ | 48     }                                                     \ | 
| 49   } while (false); | 49   } while (false); | 
| 50 | 50 | 
| 51 // ComputeMarker must only be used when SharedFunctionInfo is known. | 51 static const char* ComputeMarker(SharedFunctionInfo* shared, Code* code) { | 
| 52 static const char* ComputeMarker(Code* code) { |  | 
| 53   switch (code->kind()) { | 52   switch (code->kind()) { | 
| 54     case Code::FUNCTION: return code->optimizable() ? "~" : ""; | 53     case Code::FUNCTION: | 
| 55     case Code::OPTIMIZED_FUNCTION: return "*"; | 54       return shared->optimization_disabled() ? "" : "~"; | 
| 56     default: return ""; | 55     case Code::OPTIMIZED_FUNCTION: | 
|  | 56       return "*"; | 
|  | 57     default: | 
|  | 58       return ""; | 
| 57   } | 59   } | 
| 58 } | 60 } | 
| 59 | 61 | 
| 60 | 62 | 
| 61 class CodeEventLogger::NameBuffer { | 63 class CodeEventLogger::NameBuffer { | 
| 62  public: | 64  public: | 
| 63   NameBuffer() { Reset(); } | 65   NameBuffer() { Reset(); } | 
| 64 | 66 | 
| 65   void Reset() { | 67   void Reset() { | 
| 66     utf8_pos_ = 0; | 68     utf8_pos_ = 0; | 
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 176   LogRecordedBuffer(code, NULL, name_buffer_->get(), name_buffer_->size()); | 178   LogRecordedBuffer(code, NULL, name_buffer_->get(), name_buffer_->size()); | 
| 177 } | 179 } | 
| 178 | 180 | 
| 179 | 181 | 
| 180 void CodeEventLogger::CodeCreateEvent(Logger::LogEventsAndTags tag, | 182 void CodeEventLogger::CodeCreateEvent(Logger::LogEventsAndTags tag, | 
| 181                                       Code* code, | 183                                       Code* code, | 
| 182                                       SharedFunctionInfo* shared, | 184                                       SharedFunctionInfo* shared, | 
| 183                                       CompilationInfo* info, | 185                                       CompilationInfo* info, | 
| 184                                       Name* name) { | 186                                       Name* name) { | 
| 185   name_buffer_->Init(tag); | 187   name_buffer_->Init(tag); | 
| 186   name_buffer_->AppendBytes(ComputeMarker(code)); | 188   name_buffer_->AppendBytes(ComputeMarker(shared, code)); | 
| 187   name_buffer_->AppendName(name); | 189   name_buffer_->AppendName(name); | 
| 188   LogRecordedBuffer(code, shared, name_buffer_->get(), name_buffer_->size()); | 190   LogRecordedBuffer(code, shared, name_buffer_->get(), name_buffer_->size()); | 
| 189 } | 191 } | 
| 190 | 192 | 
| 191 | 193 | 
| 192 void CodeEventLogger::CodeCreateEvent(Logger::LogEventsAndTags tag, | 194 void CodeEventLogger::CodeCreateEvent(Logger::LogEventsAndTags tag, | 
| 193                                       Code* code, | 195                                       Code* code, | 
| 194                                       SharedFunctionInfo* shared, | 196                                       SharedFunctionInfo* shared, | 
| 195                                       CompilationInfo* info, | 197                                       CompilationInfo* info, | 
| 196                                       Name* source, int line, int column) { | 198                                       Name* source, int line, int column) { | 
| 197   name_buffer_->Init(tag); | 199   name_buffer_->Init(tag); | 
| 198   name_buffer_->AppendBytes(ComputeMarker(code)); | 200   name_buffer_->AppendBytes(ComputeMarker(shared, code)); | 
| 199   name_buffer_->AppendString(shared->DebugName()); | 201   name_buffer_->AppendString(shared->DebugName()); | 
| 200   name_buffer_->AppendByte(' '); | 202   name_buffer_->AppendByte(' '); | 
| 201   if (source->IsString()) { | 203   if (source->IsString()) { | 
| 202     name_buffer_->AppendString(String::cast(source)); | 204     name_buffer_->AppendString(String::cast(source)); | 
| 203   } else { | 205   } else { | 
| 204     name_buffer_->AppendBytes("symbol(hash "); | 206     name_buffer_->AppendBytes("symbol(hash "); | 
| 205     name_buffer_->AppendHex(Name::cast(source)->Hash()); | 207     name_buffer_->AppendHex(Name::cast(source)->Hash()); | 
| 206     name_buffer_->AppendByte(')'); | 208     name_buffer_->AppendByte(')'); | 
| 207   } | 209   } | 
| 208   name_buffer_->AppendByte(':'); | 210   name_buffer_->AppendByte(':'); | 
| (...skipping 983 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1192   AppendCodeCreateHeader(&msg, tag, code); | 1194   AppendCodeCreateHeader(&msg, tag, code); | 
| 1193   if (name->IsString()) { | 1195   if (name->IsString()) { | 
| 1194     SmartArrayPointer<char> str = | 1196     SmartArrayPointer<char> str = | 
| 1195         String::cast(name)->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); | 1197         String::cast(name)->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); | 
| 1196     msg.Append("\"%s\"", str.get()); | 1198     msg.Append("\"%s\"", str.get()); | 
| 1197   } else { | 1199   } else { | 
| 1198     msg.AppendSymbolName(Symbol::cast(name)); | 1200     msg.AppendSymbolName(Symbol::cast(name)); | 
| 1199   } | 1201   } | 
| 1200   msg.Append(','); | 1202   msg.Append(','); | 
| 1201   msg.AppendAddress(shared->address()); | 1203   msg.AppendAddress(shared->address()); | 
| 1202   msg.Append(",%s", ComputeMarker(code)); | 1204   msg.Append(",%s", ComputeMarker(shared, code)); | 
| 1203   msg.WriteToLogFile(); | 1205   msg.WriteToLogFile(); | 
| 1204 } | 1206 } | 
| 1205 | 1207 | 
| 1206 | 1208 | 
| 1207 // Although, it is possible to extract source and line from | 1209 // Although, it is possible to extract source and line from | 
| 1208 // the SharedFunctionInfo object, we left it to caller | 1210 // the SharedFunctionInfo object, we left it to caller | 
| 1209 // to leave logging functions free from heap allocations. | 1211 // to leave logging functions free from heap allocations. | 
| 1210 void Logger::CodeCreateEvent(LogEventsAndTags tag, | 1212 void Logger::CodeCreateEvent(LogEventsAndTags tag, | 
| 1211                              Code* code, | 1213                              Code* code, | 
| 1212                              SharedFunctionInfo* shared, | 1214                              SharedFunctionInfo* shared, | 
| (...skipping 13 matching lines...) Expand all  Loading... | 
| 1226   msg.Append("\"%s ", name.get()); | 1228   msg.Append("\"%s ", name.get()); | 
| 1227   if (source->IsString()) { | 1229   if (source->IsString()) { | 
| 1228     SmartArrayPointer<char> sourcestr = | 1230     SmartArrayPointer<char> sourcestr = | 
| 1229        String::cast(source)->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); | 1231        String::cast(source)->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); | 
| 1230     msg.Append("%s", sourcestr.get()); | 1232     msg.Append("%s", sourcestr.get()); | 
| 1231   } else { | 1233   } else { | 
| 1232     msg.AppendSymbolName(Symbol::cast(source)); | 1234     msg.AppendSymbolName(Symbol::cast(source)); | 
| 1233   } | 1235   } | 
| 1234   msg.Append(":%d:%d\",", line, column); | 1236   msg.Append(":%d:%d\",", line, column); | 
| 1235   msg.AppendAddress(shared->address()); | 1237   msg.AppendAddress(shared->address()); | 
| 1236   msg.Append(",%s", ComputeMarker(code)); | 1238   msg.Append(",%s", ComputeMarker(shared, code)); | 
| 1237   msg.WriteToLogFile(); | 1239   msg.WriteToLogFile(); | 
| 1238 } | 1240 } | 
| 1239 | 1241 | 
| 1240 | 1242 | 
| 1241 void Logger::CodeCreateEvent(LogEventsAndTags tag, | 1243 void Logger::CodeCreateEvent(LogEventsAndTags tag, | 
| 1242                              Code* code, | 1244                              Code* code, | 
| 1243                              int args_count) { | 1245                              int args_count) { | 
| 1244   PROFILER_LOG(CodeCreateEvent(tag, code, args_count)); | 1246   PROFILER_LOG(CodeCreateEvent(tag, code, args_count)); | 
| 1245 | 1247 | 
| 1246   if (!is_logging_code_events()) return; | 1248   if (!is_logging_code_events()) return; | 
| (...skipping 658 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1905   if (jit_logger_) { | 1907   if (jit_logger_) { | 
| 1906     removeCodeEventListener(jit_logger_); | 1908     removeCodeEventListener(jit_logger_); | 
| 1907     delete jit_logger_; | 1909     delete jit_logger_; | 
| 1908     jit_logger_ = NULL; | 1910     jit_logger_ = NULL; | 
| 1909   } | 1911   } | 
| 1910 | 1912 | 
| 1911   return log_->Close(); | 1913   return log_->Close(); | 
| 1912 } | 1914 } | 
| 1913 | 1915 | 
| 1914 } }  // namespace v8::internal | 1916 } }  // namespace v8::internal | 
| OLD | NEW | 
|---|