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

Side by Side Diff: src/log.cc

Issue 12223027: This patch is the propagation version of https://codereview.chromium.org/10824032 patch (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 7 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 | 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 // 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 450 matching lines...) Expand 10 before | Expand all | Expand 10 after
461 461
462 462
463 Logger::~Logger() { 463 Logger::~Logger() {
464 delete address_to_name_map_; 464 delete address_to_name_map_;
465 delete name_buffer_; 465 delete name_buffer_;
466 delete log_; 466 delete log_;
467 } 467 }
468 468
469 469
470 void Logger::IssueCodeAddedEvent(Code* code, 470 void Logger::IssueCodeAddedEvent(Code* code,
471 Script* script,
471 const char* name, 472 const char* name,
472 size_t name_len) { 473 size_t name_len) {
473 JitCodeEvent event; 474 JitCodeEvent event;
475 memset(&event, 0, sizeof(event));
474 event.type = JitCodeEvent::CODE_ADDED; 476 event.type = JitCodeEvent::CODE_ADDED;
475 event.code_start = code->instruction_start(); 477 event.code_start = code->instruction_start();
476 event.code_len = code->instruction_size(); 478 event.code_len = code->instruction_size();
479 event.script = v8::Handle<v8::Script>(reinterpret_cast<v8::Script*>(script));
danno 2013/02/06 14:21:34 Why don't you use "<Script>(ToApi<Script>(script))
477 event.name.str = name; 480 event.name.str = name;
478 event.name.len = name_len; 481 event.name.len = name_len;
479 482
480 code_event_handler_(&event); 483 code_event_handler_(&event);
481 } 484 }
482 485
483 486
484 void Logger::IssueCodeMovedEvent(Address from, Address to) { 487 void Logger::IssueCodeMovedEvent(Address from, Address to) {
485 Code* from_code = Code::cast(HeapObject::FromAddress(from)); 488 Code* from_code = Code::cast(HeapObject::FromAddress(from));
486 489
(...skipping 18 matching lines...) Expand all
505 Code* from_code = Code::cast(HeapObject::FromAddress(from)); 508 Code* from_code = Code::cast(HeapObject::FromAddress(from));
506 509
507 JitCodeEvent event; 510 JitCodeEvent event;
508 event.type = JitCodeEvent::CODE_REMOVED; 511 event.type = JitCodeEvent::CODE_REMOVED;
509 event.code_start = from_code->instruction_start(); 512 event.code_start = from_code->instruction_start();
510 event.code_len = from_code->instruction_size(); 513 event.code_len = from_code->instruction_size();
511 514
512 code_event_handler_(&event); 515 code_event_handler_(&event);
513 } 516 }
514 517
518 void Logger::IssueAddCodeLinePosInfoEvent(
519 void* jit_handler_data,
520 int pc_offset,
521 int position,
522 JitCodeEvent::PositionType position_type) {
523 JitCodeEvent event;
524 event.type = JitCodeEvent::CODE_ADD_LINE_POS_INFO;
525 event.user_data = jit_handler_data;
526 event.line_info.offset = pc_offset;
527 event.line_info.pos = position;
528 event.line_info.position_type = position_type;
529
530 code_event_handler_(&event);
531 }
532
533 void* Logger::IssueStartCodePosInfoEvent() {
534 JitCodeEvent event;
danno 2013/02/06 14:21:34 How about making sure the event is a well-defined
535 event.type = JitCodeEvent::CODE_START_LINE_INFO_RECORDING;
536
537 code_event_handler_(&event);
538 return event.user_data;
539 }
540
541 void Logger::IssueEndCodePosInfoEvent(Code* code, void* jit_handler_data) {
542 JitCodeEvent event;
543 event.type = JitCodeEvent::CODE_END_LINE_INFO_RECORDING;
544 event.code_start = code->instruction_start();
545 event.user_data = jit_handler_data;
546
547 code_event_handler_(&event);
danno 2013/02/06 14:21:34 same here
548 }
515 549
516 #define DECLARE_EVENT(ignore1, name) name, 550 #define DECLARE_EVENT(ignore1, name) name,
517 static const char* const kLogEventsNames[Logger::NUMBER_OF_LOG_EVENTS] = { 551 static const char* const kLogEventsNames[Logger::NUMBER_OF_LOG_EVENTS] = {
518 LOG_EVENTS_AND_TAGS_LIST(DECLARE_EVENT) 552 LOG_EVENTS_AND_TAGS_LIST(DECLARE_EVENT)
519 }; 553 };
520 #undef DECLARE_EVENT 554 #undef DECLARE_EVENT
521 555
522 556
523 void Logger::ProfilerBeginEvent() { 557 void Logger::ProfilerBeginEvent() {
524 if (!log_->IsEnabled()) return; 558 if (!log_->IsEnabled()) return;
(...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after
874 Code* code, 908 Code* code,
875 const char* comment) { 909 const char* comment) {
876 if (!is_logging_code_events()) return; 910 if (!is_logging_code_events()) return;
877 if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) { 911 if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) {
878 name_buffer_->Reset(); 912 name_buffer_->Reset();
879 name_buffer_->AppendBytes(kLogEventsNames[tag]); 913 name_buffer_->AppendBytes(kLogEventsNames[tag]);
880 name_buffer_->AppendByte(':'); 914 name_buffer_->AppendByte(':');
881 name_buffer_->AppendBytes(comment); 915 name_buffer_->AppendBytes(comment);
882 } 916 }
883 if (code_event_handler_ != NULL) { 917 if (code_event_handler_ != NULL) {
884 IssueCodeAddedEvent(code, name_buffer_->get(), name_buffer_->size()); 918 IssueCodeAddedEvent(code, NULL, name_buffer_->get(), name_buffer_->size());
885 } 919 }
886 if (!log_->IsEnabled()) return; 920 if (!log_->IsEnabled()) return;
887 if (FLAG_ll_prof) { 921 if (FLAG_ll_prof) {
888 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size()); 922 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size());
889 } 923 }
890 if (Serializer::enabled()) { 924 if (Serializer::enabled()) {
891 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size()); 925 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size());
892 } 926 }
893 if (!FLAG_log_code) return; 927 if (!FLAG_log_code) return;
894 LogMessageBuilder msg(this); 928 LogMessageBuilder msg(this);
(...skipping 19 matching lines...) Expand all
914 Code* code, 948 Code* code,
915 String* name) { 949 String* name) {
916 if (!is_logging_code_events()) return; 950 if (!is_logging_code_events()) return;
917 if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) { 951 if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) {
918 name_buffer_->Reset(); 952 name_buffer_->Reset();
919 name_buffer_->AppendBytes(kLogEventsNames[tag]); 953 name_buffer_->AppendBytes(kLogEventsNames[tag]);
920 name_buffer_->AppendByte(':'); 954 name_buffer_->AppendByte(':');
921 name_buffer_->AppendString(name); 955 name_buffer_->AppendString(name);
922 } 956 }
923 if (code_event_handler_ != NULL) { 957 if (code_event_handler_ != NULL) {
924 IssueCodeAddedEvent(code, name_buffer_->get(), name_buffer_->size()); 958 IssueCodeAddedEvent(code, NULL, name_buffer_->get(), name_buffer_->size());
925 } 959 }
926 if (!log_->IsEnabled()) return; 960 if (!log_->IsEnabled()) return;
927 if (FLAG_ll_prof) { 961 if (FLAG_ll_prof) {
928 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size()); 962 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size());
929 } 963 }
930 if (Serializer::enabled()) { 964 if (Serializer::enabled()) {
931 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size()); 965 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size());
932 } 966 }
933 if (!FLAG_log_code) return; 967 if (!FLAG_log_code) return;
934 LogMessageBuilder msg(this); 968 LogMessageBuilder msg(this);
(...skipping 26 matching lines...) Expand all
961 String* name) { 995 String* name) {
962 if (!is_logging_code_events()) return; 996 if (!is_logging_code_events()) return;
963 if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) { 997 if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) {
964 name_buffer_->Reset(); 998 name_buffer_->Reset();
965 name_buffer_->AppendBytes(kLogEventsNames[tag]); 999 name_buffer_->AppendBytes(kLogEventsNames[tag]);
966 name_buffer_->AppendByte(':'); 1000 name_buffer_->AppendByte(':');
967 name_buffer_->AppendBytes(ComputeMarker(code)); 1001 name_buffer_->AppendBytes(ComputeMarker(code));
968 name_buffer_->AppendString(name); 1002 name_buffer_->AppendString(name);
969 } 1003 }
970 if (code_event_handler_ != NULL) { 1004 if (code_event_handler_ != NULL) {
971 IssueCodeAddedEvent(code, name_buffer_->get(), name_buffer_->size()); 1005 Script* script =
1006 shared->script()->IsScript() ? Script::cast(shared->script()) : NULL;
1007 IssueCodeAddedEvent(code,
1008 script,
1009 name_buffer_->get(),
1010 name_buffer_->size());
972 } 1011 }
973 if (!log_->IsEnabled()) return; 1012 if (!log_->IsEnabled()) return;
974 if (FLAG_ll_prof) { 1013 if (FLAG_ll_prof) {
975 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size()); 1014 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size());
976 } 1015 }
977 if (Serializer::enabled()) { 1016 if (Serializer::enabled()) {
978 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size()); 1017 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size());
979 } 1018 }
980 if (!FLAG_log_code) return; 1019 if (!FLAG_log_code) return;
981 if (code == Isolate::Current()->builtins()->builtin( 1020 if (code == Isolate::Current()->builtins()->builtin(
(...skipping 29 matching lines...) Expand all
1011 name_buffer_->AppendBytes(kLogEventsNames[tag]); 1050 name_buffer_->AppendBytes(kLogEventsNames[tag]);
1012 name_buffer_->AppendByte(':'); 1051 name_buffer_->AppendByte(':');
1013 name_buffer_->AppendBytes(ComputeMarker(code)); 1052 name_buffer_->AppendBytes(ComputeMarker(code));
1014 name_buffer_->AppendString(shared->DebugName()); 1053 name_buffer_->AppendString(shared->DebugName());
1015 name_buffer_->AppendByte(' '); 1054 name_buffer_->AppendByte(' ');
1016 name_buffer_->AppendString(source); 1055 name_buffer_->AppendString(source);
1017 name_buffer_->AppendByte(':'); 1056 name_buffer_->AppendByte(':');
1018 name_buffer_->AppendInt(line); 1057 name_buffer_->AppendInt(line);
1019 } 1058 }
1020 if (code_event_handler_ != NULL) { 1059 if (code_event_handler_ != NULL) {
1021 IssueCodeAddedEvent(code, name_buffer_->get(), name_buffer_->size()); 1060 Script* script =
1061 shared->script()->IsScript() ? Script::cast(shared->script()) : NULL;
1062 IssueCodeAddedEvent(code,
1063 script,
1064 name_buffer_->get(),
1065 name_buffer_->size());
1022 } 1066 }
1023 if (!log_->IsEnabled()) return; 1067 if (!log_->IsEnabled()) return;
1024 if (FLAG_ll_prof) { 1068 if (FLAG_ll_prof) {
1025 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size()); 1069 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size());
1026 } 1070 }
1027 if (Serializer::enabled()) { 1071 if (Serializer::enabled()) {
1028 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size()); 1072 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size());
1029 } 1073 }
1030 if (!FLAG_log_code) return; 1074 if (!FLAG_log_code) return;
1031 LogMessageBuilder msg(this); 1075 LogMessageBuilder msg(this);
(...skipping 20 matching lines...) Expand all
1052 1096
1053 void Logger::CodeCreateEvent(LogEventsAndTags tag, Code* code, int args_count) { 1097 void Logger::CodeCreateEvent(LogEventsAndTags tag, Code* code, int args_count) {
1054 if (!is_logging_code_events()) return; 1098 if (!is_logging_code_events()) return;
1055 if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) { 1099 if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) {
1056 name_buffer_->Reset(); 1100 name_buffer_->Reset();
1057 name_buffer_->AppendBytes(kLogEventsNames[tag]); 1101 name_buffer_->AppendBytes(kLogEventsNames[tag]);
1058 name_buffer_->AppendByte(':'); 1102 name_buffer_->AppendByte(':');
1059 name_buffer_->AppendInt(args_count); 1103 name_buffer_->AppendInt(args_count);
1060 } 1104 }
1061 if (code_event_handler_ != NULL) { 1105 if (code_event_handler_ != NULL) {
1062 IssueCodeAddedEvent(code, name_buffer_->get(), name_buffer_->size()); 1106 IssueCodeAddedEvent(code, NULL, name_buffer_->get(), name_buffer_->size());
1063 } 1107 }
1064 if (!log_->IsEnabled()) return; 1108 if (!log_->IsEnabled()) return;
1065 if (FLAG_ll_prof) { 1109 if (FLAG_ll_prof) {
1066 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size()); 1110 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size());
1067 } 1111 }
1068 if (Serializer::enabled()) { 1112 if (Serializer::enabled()) {
1069 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size()); 1113 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size());
1070 } 1114 }
1071 if (!FLAG_log_code) return; 1115 if (!FLAG_log_code) return;
1072 LogMessageBuilder msg(this); 1116 LogMessageBuilder msg(this);
(...skipping 17 matching lines...) Expand all
1090 1134
1091 void Logger::RegExpCodeCreateEvent(Code* code, String* source) { 1135 void Logger::RegExpCodeCreateEvent(Code* code, String* source) {
1092 if (!is_logging_code_events()) return; 1136 if (!is_logging_code_events()) return;
1093 if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) { 1137 if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) {
1094 name_buffer_->Reset(); 1138 name_buffer_->Reset();
1095 name_buffer_->AppendBytes(kLogEventsNames[REG_EXP_TAG]); 1139 name_buffer_->AppendBytes(kLogEventsNames[REG_EXP_TAG]);
1096 name_buffer_->AppendByte(':'); 1140 name_buffer_->AppendByte(':');
1097 name_buffer_->AppendString(source); 1141 name_buffer_->AppendString(source);
1098 } 1142 }
1099 if (code_event_handler_ != NULL) { 1143 if (code_event_handler_ != NULL) {
1100 IssueCodeAddedEvent(code, name_buffer_->get(), name_buffer_->size()); 1144 IssueCodeAddedEvent(code, NULL, name_buffer_->get(), name_buffer_->size());
1101 } 1145 }
1102 if (!log_->IsEnabled()) return; 1146 if (!log_->IsEnabled()) return;
1103 if (FLAG_ll_prof) { 1147 if (FLAG_ll_prof) {
1104 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size()); 1148 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size());
1105 } 1149 }
1106 if (Serializer::enabled()) { 1150 if (Serializer::enabled()) {
1107 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size()); 1151 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size());
1108 } 1152 }
1109 if (!FLAG_log_code) return; 1153 if (!FLAG_log_code) return;
1110 LogMessageBuilder msg(this); 1154 LogMessageBuilder msg(this);
(...skipping 23 matching lines...) Expand all
1134 void Logger::CodeDeleteEvent(Address from) { 1178 void Logger::CodeDeleteEvent(Address from) {
1135 if (code_event_handler_ != NULL) IssueCodeRemovedEvent(from); 1179 if (code_event_handler_ != NULL) IssueCodeRemovedEvent(from);
1136 if (!log_->IsEnabled()) return; 1180 if (!log_->IsEnabled()) return;
1137 if (FLAG_ll_prof) LowLevelCodeDeleteEvent(from); 1181 if (FLAG_ll_prof) LowLevelCodeDeleteEvent(from);
1138 if (Serializer::enabled() && address_to_name_map_ != NULL) { 1182 if (Serializer::enabled() && address_to_name_map_ != NULL) {
1139 address_to_name_map_->Remove(from); 1183 address_to_name_map_->Remove(from);
1140 } 1184 }
1141 DeleteEventInternal(CODE_DELETE_EVENT, from); 1185 DeleteEventInternal(CODE_DELETE_EVENT, from);
1142 } 1186 }
1143 1187
1188 void Logger::CodeLinePosInfoAddPositionEvent(void* jit_handler_data,
1189 int pc_offset,
1190 int position) {
1191 if (code_event_handler_ != NULL) {
1192 IssueAddCodeLinePosInfoEvent(jit_handler_data,
1193 pc_offset,
1194 position,
1195 JitCodeEvent::POSITION);
1196 }
1197 }
1198
1199 void Logger::CodeLinePosInfoAddStatementPositionEvent(void* jit_handler_data,
1200 int pc_offset,
1201 int position) {
1202 if (code_event_handler_ != NULL) {
1203 IssueAddCodeLinePosInfoEvent(jit_handler_data,
1204 pc_offset,
1205 position,
1206 JitCodeEvent::STATEMENT_POSITION);
1207 }
1208 }
1209
1210 void Logger::CodeStartLinePosInfoRecordEvent(PositionsRecorder* pos_recorder) {
1211 if (code_event_handler_ != NULL) {
1212 pos_recorder->AttachJITHandlerData(IssueStartCodePosInfoEvent());
1213 }
1214 }
1215
1216 void Logger::CodeEndLinePosInfoRecordEvent(Code* code,
1217 void* jit_handler_data) {
1218 if (code_event_handler_ != NULL) {
1219 IssueEndCodePosInfoEvent(code, jit_handler_data);
1220 }
1221 }
1144 1222
1145 void Logger::SnapshotPositionEvent(Address addr, int pos) { 1223 void Logger::SnapshotPositionEvent(Address addr, int pos) {
1146 if (!log_->IsEnabled()) return; 1224 if (!log_->IsEnabled()) return;
1147 if (FLAG_ll_prof) LowLevelSnapshotPositionEvent(addr, pos); 1225 if (FLAG_ll_prof) LowLevelSnapshotPositionEvent(addr, pos);
1148 if (Serializer::enabled() && address_to_name_map_ != NULL) { 1226 if (Serializer::enabled() && address_to_name_map_ != NULL) {
1149 const char* code_name = address_to_name_map_->Lookup(addr); 1227 const char* code_name = address_to_name_map_->Lookup(addr);
1150 if (code_name == NULL) return; // Not a code object. 1228 if (code_name == NULL) return; // Not a code object.
1151 LogMessageBuilder msg(this); 1229 LogMessageBuilder msg(this);
1152 msg.Append("%s,%d,\"", kLogEventsNames[SNAPSHOT_CODE_NAME_EVENT], pos); 1230 msg.Append("%s,%d,\"", kLogEventsNames[SNAPSHOT_CODE_NAME_EVENT], pos);
1153 for (const char* p = code_name; *p != '\0'; ++p) { 1231 for (const char* p = code_name; *p != '\0'; ++p) {
(...skipping 555 matching lines...) Expand 10 before | Expand all | Expand 10 after
1709 1787
1710 if (FLAG_log_internal_timer_events || FLAG_prof) epoch_ = OS::Ticks(); 1788 if (FLAG_log_internal_timer_events || FLAG_prof) epoch_ = OS::Ticks();
1711 1789
1712 return true; 1790 return true;
1713 } 1791 }
1714 1792
1715 1793
1716 void Logger::SetCodeEventHandler(uint32_t options, 1794 void Logger::SetCodeEventHandler(uint32_t options,
1717 JitCodeEventHandler event_handler) { 1795 JitCodeEventHandler event_handler) {
1718 code_event_handler_ = event_handler; 1796 code_event_handler_ = event_handler;
1719
1720 if (code_event_handler_ != NULL && (options & kJitCodeEventEnumExisting)) { 1797 if (code_event_handler_ != NULL && (options & kJitCodeEventEnumExisting)) {
1721 HandleScope scope; 1798 HandleScope scope;
1722 LogCodeObjects(); 1799 LogCodeObjects();
1723 LogCompiledFunctions(); 1800 LogCompiledFunctions();
1724 } 1801 }
1725 } 1802 }
1726 1803
1727 1804
1728 Sampler* Logger::sampler() { 1805 Sampler* Logger::sampler() {
1729 return ticker_; 1806 return ticker_;
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
1813 void SamplerRegistry::RemoveActiveSampler(Sampler* sampler) { 1890 void SamplerRegistry::RemoveActiveSampler(Sampler* sampler) {
1814 ASSERT(sampler->IsActive()); 1891 ASSERT(sampler->IsActive());
1815 ScopedLock lock(active_samplers_mutex); 1892 ScopedLock lock(active_samplers_mutex);
1816 ASSERT(active_samplers_ != NULL); 1893 ASSERT(active_samplers_ != NULL);
1817 bool removed = active_samplers_->RemoveElement(sampler); 1894 bool removed = active_samplers_->RemoveElement(sampler);
1818 ASSERT(removed); 1895 ASSERT(removed);
1819 USE(removed); 1896 USE(removed);
1820 } 1897 }
1821 1898
1822 } } // namespace v8::internal 1899 } } // namespace v8::internal
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698