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

Side by Side Diff: src/log.cc

Issue 499483002: [WIP] A sampler thread in d8 for consuming the new API. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 4 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
OLDNEW
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 <stdarg.h> 5 #include <stdarg.h>
6 6
7 #include "src/v8.h" 7 #include "src/v8.h"
8 8
9 #include "src/base/platform/platform.h" 9 #include "src/base/platform/platform.h"
10 #include "src/bootstrapper.h" 10 #include "src/bootstrapper.h"
(...skipping 1045 matching lines...) Expand 10 before | Expand all | Expand 10 after
1056 ApiEvent("api,check-security,undefined\n"); 1056 ApiEvent("api,check-security,undefined\n");
1057 } else { 1057 } else {
1058 ApiEvent("api,check-security,['no-name']\n"); 1058 ApiEvent("api,check-security,['no-name']\n");
1059 } 1059 }
1060 } 1060 }
1061 1061
1062 1062
1063 void Logger::SharedLibraryEvent(const std::string& library_path, 1063 void Logger::SharedLibraryEvent(const std::string& library_path,
1064 uintptr_t start, 1064 uintptr_t start,
1065 uintptr_t end) { 1065 uintptr_t end) {
1066 codeEventHandler()->SharedLibrary(library_path,
1067 (const void*)start,
1068 (const void*)end);
1066 if (!log_->IsEnabled() || !FLAG_prof) return; 1069 if (!log_->IsEnabled() || !FLAG_prof) return;
1067 Log::MessageBuilder msg(log_); 1070 Log::MessageBuilder msg(log_);
1068 msg.Append("shared-library,\"%s\",0x%08" V8PRIxPTR ",0x%08" V8PRIxPTR "\n", 1071 msg.Append("shared-library,\"%s\",0x%08" V8PRIxPTR ",0x%08" V8PRIxPTR "\n",
1069 library_path.c_str(), 1072 library_path.c_str(),
1070 start, 1073 start,
1071 end); 1074 end);
1072 msg.WriteToLogFile(); 1075 msg.WriteToLogFile();
1073 } 1076 }
1074 1077
1075 1078
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after
1346 Code* code, 1349 Code* code,
1347 const char* comment) { 1350 const char* comment) {
1348 PROFILER_LOG(CodeCreateEvent(tag, code, comment)); 1351 PROFILER_LOG(CodeCreateEvent(tag, code, comment));
1349 1352
1350 if (!is_logging_code_events()) return; 1353 if (!is_logging_code_events()) return;
1351 CALL_LISTENERS(CodeCreateEvent(tag, code, comment)); 1354 CALL_LISTENERS(CodeCreateEvent(tag, code, comment));
1352 1355
1353 if (!FLAG_log_code || !log_->IsEnabled()) return; 1356 if (!FLAG_log_code || !log_->IsEnabled()) return;
1354 Log::MessageBuilder msg(log_); 1357 Log::MessageBuilder msg(log_);
1355 AppendCodeCreateHeader(&msg, tag, code); 1358 AppendCodeCreateHeader(&msg, tag, code);
1359 msg.StartSubstring();
1356 msg.AppendDoubleQuotedString(comment); 1360 msg.AppendDoubleQuotedString(comment);
1361 msg.EndSubstring();
1357 msg.Append('\n'); 1362 msg.Append('\n');
1358 msg.WriteToLogFile(); 1363 msg.WriteToLogFile();
1364 std::string code_name;
1365 msg.GetSubstring(&code_name);
1366 codeEventHandler()->Create((const void*)code->address(),
Jarin 2014/08/26 08:23:57 If you are interested in the address of actual cod
1367 (const int)code->ExecutableSize(),
1368 code_name);
1359 } 1369 }
1360 1370
1361 1371
1362 void Logger::CodeCreateEvent(LogEventsAndTags tag, 1372 void Logger::CodeCreateEvent(LogEventsAndTags tag,
1363 Code* code, 1373 Code* code,
1364 Name* name) { 1374 Name* name) {
1365 PROFILER_LOG(CodeCreateEvent(tag, code, name)); 1375 PROFILER_LOG(CodeCreateEvent(tag, code, name));
1366 1376
1367 if (!is_logging_code_events()) return; 1377 if (!is_logging_code_events()) return;
1368 CALL_LISTENERS(CodeCreateEvent(tag, code, name)); 1378 CALL_LISTENERS(CodeCreateEvent(tag, code, name));
1369 1379
1370 if (!FLAG_log_code || !log_->IsEnabled()) return; 1380 if (!FLAG_log_code || !log_->IsEnabled()) return;
1371 Log::MessageBuilder msg(log_); 1381 Log::MessageBuilder msg(log_);
1372 AppendCodeCreateHeader(&msg, tag, code); 1382 AppendCodeCreateHeader(&msg, tag, code);
1383 msg.StartSubstring();
1373 if (name->IsString()) { 1384 if (name->IsString()) {
1374 msg.Append('"'); 1385 msg.Append('"');
1375 msg.AppendDetailed(String::cast(name), false); 1386 msg.AppendDetailed(String::cast(name), false);
1376 msg.Append('"'); 1387 msg.Append('"');
1377 } else { 1388 } else {
1378 msg.AppendSymbolName(Symbol::cast(name)); 1389 msg.AppendSymbolName(Symbol::cast(name));
1379 } 1390 }
1391 msg.EndSubstring();
1380 msg.Append('\n'); 1392 msg.Append('\n');
1381 msg.WriteToLogFile(); 1393 msg.WriteToLogFile();
1394 std::string code_name;
1395 msg.GetSubstring(&code_name);
1396 codeEventHandler()->Create((const void*)code->address(),
1397 (const int)code->ExecutableSize(),
1398 code_name);
1382 } 1399 }
1383 1400
1384 1401
1385 void Logger::CodeCreateEvent(LogEventsAndTags tag, 1402 void Logger::CodeCreateEvent(LogEventsAndTags tag,
1386 Code* code, 1403 Code* code,
1387 SharedFunctionInfo* shared, 1404 SharedFunctionInfo* shared,
1388 CompilationInfo* info, 1405 CompilationInfo* info,
1389 Name* name) { 1406 Name* name) {
1390 PROFILER_LOG(CodeCreateEvent(tag, code, shared, info, name)); 1407 PROFILER_LOG(CodeCreateEvent(tag, code, shared, info, name));
1391 1408
1392 if (!is_logging_code_events()) return; 1409 if (!is_logging_code_events()) return;
1393 CALL_LISTENERS(CodeCreateEvent(tag, code, shared, info, name)); 1410 CALL_LISTENERS(CodeCreateEvent(tag, code, shared, info, name));
1394 1411
1395 if (!FLAG_log_code || !log_->IsEnabled()) return; 1412 if (!FLAG_log_code || !log_->IsEnabled()) return;
1396 if (code == isolate_->builtins()->builtin(Builtins::kCompileUnoptimized)) 1413 if (code == isolate_->builtins()->builtin(Builtins::kCompileUnoptimized))
1397 return; 1414 return;
1398 1415
1399 Log::MessageBuilder msg(log_); 1416 Log::MessageBuilder msg(log_);
1400 AppendCodeCreateHeader(&msg, tag, code); 1417 AppendCodeCreateHeader(&msg, tag, code);
1418 msg.StartSubstring();
1401 if (name->IsString()) { 1419 if (name->IsString()) {
1402 SmartArrayPointer<char> str = 1420 SmartArrayPointer<char> str =
1403 String::cast(name)->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); 1421 String::cast(name)->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
1404 msg.Append("\"%s\"", str.get()); 1422 msg.Append("\"%s\"", str.get());
1405 } else { 1423 } else {
1406 msg.AppendSymbolName(Symbol::cast(name)); 1424 msg.AppendSymbolName(Symbol::cast(name));
1407 } 1425 }
1426 msg.EndSubstring();
1408 msg.Append(','); 1427 msg.Append(',');
1409 msg.AppendAddress(shared->address()); 1428 msg.AppendAddress(shared->address());
1410 msg.Append(",%s", ComputeMarker(code)); 1429 msg.Append(",%s", ComputeMarker(code));
1411 msg.Append('\n'); 1430 msg.Append('\n');
1412 msg.WriteToLogFile(); 1431 msg.WriteToLogFile();
1432 std::string code_name;
1433 msg.GetSubstring(&code_name);
1434 codeEventHandler()->Create((const void*)code->address(),
1435 (const int)code->ExecutableSize(),
1436 code_name);
1413 } 1437 }
1414 1438
1415 1439
1416 // Although, it is possible to extract source and line from 1440 // Although, it is possible to extract source and line from
1417 // the SharedFunctionInfo object, we left it to caller 1441 // the SharedFunctionInfo object, we left it to caller
1418 // to leave logging functions free from heap allocations. 1442 // to leave logging functions free from heap allocations.
1419 void Logger::CodeCreateEvent(LogEventsAndTags tag, 1443 void Logger::CodeCreateEvent(LogEventsAndTags tag,
1420 Code* code, 1444 Code* code,
1421 SharedFunctionInfo* shared, 1445 SharedFunctionInfo* shared,
1422 CompilationInfo* info, 1446 CompilationInfo* info,
1423 Name* source, int line, int column) { 1447 Name* source, int line, int column) {
1424 PROFILER_LOG(CodeCreateEvent(tag, code, shared, info, source, line, column)); 1448 PROFILER_LOG(CodeCreateEvent(tag, code, shared, info, source, line, column));
1425 1449
1426 if (!is_logging_code_events()) return; 1450 if (!is_logging_code_events()) return;
1427 CALL_LISTENERS(CodeCreateEvent(tag, code, shared, info, source, line, 1451 CALL_LISTENERS(CodeCreateEvent(tag, code, shared, info, source, line,
1428 column)); 1452 column));
1429 1453
1430 if (!FLAG_log_code || !log_->IsEnabled()) return; 1454 if (!FLAG_log_code || !log_->IsEnabled()) return;
1431 Log::MessageBuilder msg(log_); 1455 Log::MessageBuilder msg(log_);
1432 AppendCodeCreateHeader(&msg, tag, code); 1456 AppendCodeCreateHeader(&msg, tag, code);
1457 msg.StartSubstring();
1433 SmartArrayPointer<char> name = 1458 SmartArrayPointer<char> name =
1434 shared->DebugName()->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); 1459 shared->DebugName()->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
1435 msg.Append("\"%s ", name.get()); 1460 msg.Append("\"%s ", name.get());
1436 if (source->IsString()) { 1461 if (source->IsString()) {
1437 SmartArrayPointer<char> sourcestr = 1462 SmartArrayPointer<char> sourcestr =
1438 String::cast(source)->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); 1463 String::cast(source)->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
1439 msg.Append("%s", sourcestr.get()); 1464 msg.Append("%s", sourcestr.get());
1440 } else { 1465 } else {
1441 msg.AppendSymbolName(Symbol::cast(source)); 1466 msg.AppendSymbolName(Symbol::cast(source));
1442 } 1467 }
1443 msg.Append(":%d:%d\",", line, column); 1468 msg.Append(":%d:%d\"", line, column);
1469 msg.EndSubstring();
1470 msg.Append(",");
1444 msg.AppendAddress(shared->address()); 1471 msg.AppendAddress(shared->address());
1445 msg.Append(",%s", ComputeMarker(code)); 1472 msg.Append(",%s", ComputeMarker(code));
1446 msg.Append('\n'); 1473 msg.Append('\n');
1447 msg.WriteToLogFile(); 1474 msg.WriteToLogFile();
1475 std::string code_name;
1476 msg.GetSubstring(&code_name);
1477 codeEventHandler()->Create((const void*)code->address(),
1478 (const int)code->ExecutableSize(),
1479 code_name);
1448 } 1480 }
1449 1481
1450 1482
1451 void Logger::CodeCreateEvent(LogEventsAndTags tag, 1483 void Logger::CodeCreateEvent(LogEventsAndTags tag,
1452 Code* code, 1484 Code* code,
1453 int args_count) { 1485 int args_count) {
1454 PROFILER_LOG(CodeCreateEvent(tag, code, args_count)); 1486 PROFILER_LOG(CodeCreateEvent(tag, code, args_count));
1455 1487
1456 if (!is_logging_code_events()) return; 1488 if (!is_logging_code_events()) return;
1457 CALL_LISTENERS(CodeCreateEvent(tag, code, args_count)); 1489 CALL_LISTENERS(CodeCreateEvent(tag, code, args_count));
1458 1490
1459 if (!FLAG_log_code || !log_->IsEnabled()) return; 1491 if (!FLAG_log_code || !log_->IsEnabled()) return;
1460 Log::MessageBuilder msg(log_); 1492 Log::MessageBuilder msg(log_);
1461 AppendCodeCreateHeader(&msg, tag, code); 1493 AppendCodeCreateHeader(&msg, tag, code);
1494 msg.StartSubstring();
1462 msg.Append("\"args_count: %d\"", args_count); 1495 msg.Append("\"args_count: %d\"", args_count);
1496 msg.EndSubstring();
1463 msg.Append('\n'); 1497 msg.Append('\n');
1464 msg.WriteToLogFile(); 1498 msg.WriteToLogFile();
1499 std::string code_name;
1500 msg.GetSubstring(&code_name);
1501 codeEventHandler()->Create((const void*)code->address(),
1502 (const int)code->ExecutableSize(),
1503 code_name);
1465 } 1504 }
1466 1505
1467 1506
1468 void Logger::CodeDisableOptEvent(Code* code, 1507 void Logger::CodeDisableOptEvent(Code* code,
1469 SharedFunctionInfo* shared) { 1508 SharedFunctionInfo* shared) {
1470 PROFILER_LOG(CodeDisableOptEvent(code, shared)); 1509 PROFILER_LOG(CodeDisableOptEvent(code, shared));
1471 1510
1472 if (!is_logging_code_events()) return; 1511 if (!is_logging_code_events()) return;
1473 CALL_LISTENERS(CodeDisableOptEvent(code, shared)); 1512 CALL_LISTENERS(CodeDisableOptEvent(code, shared));
1474 1513
(...skipping 20 matching lines...) Expand all
1495 1534
1496 void Logger::RegExpCodeCreateEvent(Code* code, String* source) { 1535 void Logger::RegExpCodeCreateEvent(Code* code, String* source) {
1497 PROFILER_LOG(RegExpCodeCreateEvent(code, source)); 1536 PROFILER_LOG(RegExpCodeCreateEvent(code, source));
1498 1537
1499 if (!is_logging_code_events()) return; 1538 if (!is_logging_code_events()) return;
1500 CALL_LISTENERS(RegExpCodeCreateEvent(code, source)); 1539 CALL_LISTENERS(RegExpCodeCreateEvent(code, source));
1501 1540
1502 if (!FLAG_log_code || !log_->IsEnabled()) return; 1541 if (!FLAG_log_code || !log_->IsEnabled()) return;
1503 Log::MessageBuilder msg(log_); 1542 Log::MessageBuilder msg(log_);
1504 AppendCodeCreateHeader(&msg, REG_EXP_TAG, code); 1543 AppendCodeCreateHeader(&msg, REG_EXP_TAG, code);
1544 msg.StartSubstring();
1505 msg.Append('"'); 1545 msg.Append('"');
1506 msg.AppendDetailed(source, false); 1546 msg.AppendDetailed(source, false);
1507 msg.Append('"'); 1547 msg.Append('"');
1548 msg.EndSubstring();
1508 msg.Append('\n'); 1549 msg.Append('\n');
1509 msg.WriteToLogFile(); 1550 msg.WriteToLogFile();
1551 std::string code_name;
1552 msg.GetSubstring(&code_name);
1553 codeEventHandler()->Create((const void*)code->address(),
1554 (const int)code->ExecutableSize(),
1555 code_name);
1510 } 1556 }
1511 1557
1512 1558
1513 void Logger::CodeMoveEvent(Address from, Address to) { 1559 void Logger::CodeMoveEvent(Address from, Address to) {
1514 PROFILER_LOG(CodeMoveEvent(from, to)); 1560 PROFILER_LOG(CodeMoveEvent(from, to));
1515 1561 codeEventHandler()->Move((const void*)from,
1562 (const void*)to);
1516 if (!is_logging_code_events()) return; 1563 if (!is_logging_code_events()) return;
1517 CALL_LISTENERS(CodeMoveEvent(from, to)); 1564 CALL_LISTENERS(CodeMoveEvent(from, to));
1518 MoveEventInternal(CODE_MOVE_EVENT, from, to); 1565 MoveEventInternal(CODE_MOVE_EVENT, from, to);
1519 } 1566 }
1520 1567
1521 1568
1522 void Logger::CodeDeleteEvent(Address from) { 1569 void Logger::CodeDeleteEvent(Address from) {
1523 PROFILER_LOG(CodeDeleteEvent(from)); 1570 PROFILER_LOG(CodeDeleteEvent(from));
1571 codeEventHandler()->Delete((const void*)from);
Jarin 2014/08/26 08:23:57 I think this is never called.
1524 1572
1525 if (!is_logging_code_events()) return; 1573 if (!is_logging_code_events()) return;
1526 CALL_LISTENERS(CodeDeleteEvent(from)); 1574 CALL_LISTENERS(CodeDeleteEvent(from));
1527 1575
1528 if (!FLAG_log_code || !log_->IsEnabled()) return; 1576 if (!FLAG_log_code || !log_->IsEnabled()) return;
1529 Log::MessageBuilder msg(log_); 1577 Log::MessageBuilder msg(log_);
1530 msg.Append("%s,", kLogEventsNames[CODE_DELETE_EVENT]); 1578 msg.Append("%s,", kLogEventsNames[CODE_DELETE_EVENT]);
1531 msg.AppendAddress(from); 1579 msg.AppendAddress(from);
1532 msg.Append('\n'); 1580 msg.Append('\n');
1533 msg.WriteToLogFile(); 1581 msg.WriteToLogFile();
(...skipping 545 matching lines...) Expand 10 before | Expand all | Expand 10 after
2079 addCodeEventListener(jit_logger_); 2127 addCodeEventListener(jit_logger_);
2080 if (options & kJitCodeEventEnumExisting) { 2128 if (options & kJitCodeEventEnumExisting) {
2081 HandleScope scope(isolate_); 2129 HandleScope scope(isolate_);
2082 LogCodeObjects(); 2130 LogCodeObjects();
2083 LogCompiledFunctions(); 2131 LogCompiledFunctions();
2084 } 2132 }
2085 } 2133 }
2086 } 2134 }
2087 2135
2088 2136
2137 void Logger::SetCodeEventHandler(v8::CodeEventHandler* handler) {
2138 code_event_handler_ = handler;
2139 }
2140
2141
2089 Sampler* Logger::sampler() { 2142 Sampler* Logger::sampler() {
2090 return ticker_; 2143 return ticker_;
2091 } 2144 }
2092 2145
2093 2146
2147 CodeEventHandler* Logger::codeEventHandler() {
2148 if (code_event_handler_ == NULL)
2149 code_event_handler_ = new StubCodeEventHandler();
2150 return code_event_handler_;
2151 }
2152
2153
2094 FILE* Logger::TearDown() { 2154 FILE* Logger::TearDown() {
2095 if (!is_initialized_) return NULL; 2155 if (!is_initialized_) return NULL;
2096 is_initialized_ = false; 2156 is_initialized_ = false;
2097 2157
2098 // Stop the profiler before closing the file. 2158 // Stop the profiler before closing the file.
2099 if (profiler_ != NULL) { 2159 if (profiler_ != NULL) {
2100 profiler_->Disengage(); 2160 profiler_->Disengage();
2101 delete profiler_; 2161 delete profiler_;
2102 profiler_ = NULL; 2162 profiler_ = NULL;
2103 } 2163 }
(...skipping 22 matching lines...) Expand all
2126 if (jit_logger_) { 2186 if (jit_logger_) {
2127 removeCodeEventListener(jit_logger_); 2187 removeCodeEventListener(jit_logger_);
2128 delete jit_logger_; 2188 delete jit_logger_;
2129 jit_logger_ = NULL; 2189 jit_logger_ = NULL;
2130 } 2190 }
2131 2191
2132 return log_->Close(); 2192 return log_->Close();
2133 } 2193 }
2134 2194
2135 } } // namespace v8::internal 2195 } } // namespace v8::internal
OLDNEW
« include/v8-sampler.h ('K') | « src/log.h ('k') | src/log-utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698