Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 12334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 12345 CHECK(jitcode_line_info != NULL); | 12345 CHECK(jitcode_line_info != NULL); |
| 12346 | 12346 |
| 12347 class DummyJitCodeLineInfo { | 12347 class DummyJitCodeLineInfo { |
| 12348 }; | 12348 }; |
| 12349 | 12349 |
| 12350 switch (event->type) { | 12350 switch (event->type) { |
| 12351 case v8::JitCodeEvent::CODE_ADDED: { | 12351 case v8::JitCodeEvent::CODE_ADDED: { |
| 12352 CHECK(event->code_start != NULL); | 12352 CHECK(event->code_start != NULL); |
| 12353 CHECK_NE(0, static_cast<int>(event->code_len)); | 12353 CHECK_NE(0, static_cast<int>(event->code_len)); |
| 12354 CHECK(event->name.str != NULL); | 12354 CHECK(event->name.str != NULL); |
| 12355 i::HashMap::Entry* entry = | 12355 i::HashMap::Entry* entry = code_map->LookupOrInsert( |
| 12356 code_map->Lookup(event->code_start, | 12356 event->code_start, i::ComputePointerHash(event->code_start)); |
| 12357 i::ComputePointerHash(event->code_start), | |
| 12358 true); | |
| 12359 entry->value = reinterpret_cast<void*>(event->code_len); | 12357 entry->value = reinterpret_cast<void*>(event->code_len); |
| 12360 | 12358 |
| 12361 if (FunctionNameIs("bar", event)) { | 12359 if (FunctionNameIs("bar", event)) { |
| 12362 ++saw_bar; | 12360 ++saw_bar; |
| 12363 } | 12361 } |
| 12364 } | 12362 } |
| 12365 break; | 12363 break; |
| 12366 | 12364 |
| 12367 case v8::JitCodeEvent::CODE_MOVED: { | 12365 case v8::JitCodeEvent::CODE_MOVED: { |
| 12368 uint32_t hash = i::ComputePointerHash(event->code_start); | 12366 uint32_t hash = i::ComputePointerHash(event->code_start); |
| 12369 // We would like to never see code move that we haven't seen before, | 12367 // We would like to never see code move that we haven't seen before, |
| 12370 // but the code creation event does not happen until the line endings | 12368 // but the code creation event does not happen until the line endings |
| 12371 // have been calculated (this is so that we can report the line in the | 12369 // have been calculated (this is so that we can report the line in the |
| 12372 // script at which the function source is found, see | 12370 // script at which the function source is found, see |
| 12373 // Compiler::RecordFunctionCompilation) and the line endings | 12371 // Compiler::RecordFunctionCompilation) and the line endings |
| 12374 // calculations can cause a GC, which can move the newly created code | 12372 // calculations can cause a GC, which can move the newly created code |
| 12375 // before its existence can be logged. | 12373 // before its existence can be logged. |
| 12376 i::HashMap::Entry* entry = | 12374 i::HashMap::Entry* entry = code_map->Lookup(event->code_start, hash); |
| 12377 code_map->Lookup(event->code_start, hash, false); | |
| 12378 if (entry != NULL) { | 12375 if (entry != NULL) { |
| 12379 ++move_events; | 12376 ++move_events; |
| 12380 | 12377 |
| 12381 CHECK_EQ(reinterpret_cast<void*>(event->code_len), entry->value); | 12378 CHECK_EQ(reinterpret_cast<void*>(event->code_len), entry->value); |
| 12382 code_map->Remove(event->code_start, hash); | 12379 code_map->Remove(event->code_start, hash); |
| 12383 | 12380 |
| 12384 entry = code_map->Lookup(event->new_code_start, | 12381 entry = code_map->LookupOrInsert( |
| 12385 i::ComputePointerHash(event->new_code_start), | 12382 event->new_code_start, |
| 12386 true); | 12383 i::ComputePointerHash(event->new_code_start)); |
| 12387 CHECK(entry != NULL); | |
|
marja
2015/04/10 07:59:58
Why did you remove this CHECK?
adamk
2015/04/13 18:34:41
Basically because it's testing internal invariants
| |
| 12388 entry->value = reinterpret_cast<void*>(event->code_len); | 12384 entry->value = reinterpret_cast<void*>(event->code_len); |
| 12389 } | 12385 } |
| 12390 } | 12386 } |
| 12391 break; | 12387 break; |
| 12392 | 12388 |
| 12393 case v8::JitCodeEvent::CODE_REMOVED: | 12389 case v8::JitCodeEvent::CODE_REMOVED: |
| 12394 // Object/code removal events are currently not dispatched from the GC. | 12390 // Object/code removal events are currently not dispatched from the GC. |
| 12395 CHECK(false); | 12391 CHECK(false); |
| 12396 break; | 12392 break; |
| 12397 | 12393 |
| 12398 // For CODE_START_LINE_INFO_RECORDING event, we will create one | 12394 // For CODE_START_LINE_INFO_RECORDING event, we will create one |
| 12399 // DummyJitCodeLineInfo data structure pointed by event->user_dat. We | 12395 // DummyJitCodeLineInfo data structure pointed by event->user_dat. We |
| 12400 // record it in jitcode_line_info. | 12396 // record it in jitcode_line_info. |
| 12401 case v8::JitCodeEvent::CODE_START_LINE_INFO_RECORDING: { | 12397 case v8::JitCodeEvent::CODE_START_LINE_INFO_RECORDING: { |
| 12402 DummyJitCodeLineInfo* line_info = new DummyJitCodeLineInfo(); | 12398 DummyJitCodeLineInfo* line_info = new DummyJitCodeLineInfo(); |
| 12403 v8::JitCodeEvent* temp_event = const_cast<v8::JitCodeEvent*>(event); | 12399 v8::JitCodeEvent* temp_event = const_cast<v8::JitCodeEvent*>(event); |
| 12404 temp_event->user_data = line_info; | 12400 temp_event->user_data = line_info; |
| 12405 i::HashMap::Entry* entry = | 12401 i::HashMap::Entry* entry = jitcode_line_info->LookupOrInsert( |
| 12406 jitcode_line_info->Lookup(line_info, | 12402 line_info, i::ComputePointerHash(line_info)); |
| 12407 i::ComputePointerHash(line_info), | |
| 12408 true); | |
| 12409 entry->value = reinterpret_cast<void*>(line_info); | 12403 entry->value = reinterpret_cast<void*>(line_info); |
| 12410 } | 12404 } |
| 12411 break; | 12405 break; |
| 12412 // For these two events, we will check whether the event->user_data | 12406 // For these two events, we will check whether the event->user_data |
| 12413 // data structure is created before during CODE_START_LINE_INFO_RECORDING | 12407 // data structure is created before during CODE_START_LINE_INFO_RECORDING |
| 12414 // event. And delete it in CODE_END_LINE_INFO_RECORDING event handling. | 12408 // event. And delete it in CODE_END_LINE_INFO_RECORDING event handling. |
| 12415 case v8::JitCodeEvent::CODE_END_LINE_INFO_RECORDING: { | 12409 case v8::JitCodeEvent::CODE_END_LINE_INFO_RECORDING: { |
| 12416 CHECK(event->user_data != NULL); | 12410 CHECK(event->user_data != NULL); |
| 12417 uint32_t hash = i::ComputePointerHash(event->user_data); | 12411 uint32_t hash = i::ComputePointerHash(event->user_data); |
| 12418 i::HashMap::Entry* entry = | 12412 i::HashMap::Entry* entry = |
| 12419 jitcode_line_info->Lookup(event->user_data, hash, false); | 12413 jitcode_line_info->Lookup(event->user_data, hash); |
| 12420 CHECK(entry != NULL); | 12414 CHECK(entry != NULL); |
| 12421 delete reinterpret_cast<DummyJitCodeLineInfo*>(event->user_data); | 12415 delete reinterpret_cast<DummyJitCodeLineInfo*>(event->user_data); |
| 12422 } | 12416 } |
| 12423 break; | 12417 break; |
| 12424 | 12418 |
| 12425 case v8::JitCodeEvent::CODE_ADD_LINE_POS_INFO: { | 12419 case v8::JitCodeEvent::CODE_ADD_LINE_POS_INFO: { |
| 12426 CHECK(event->user_data != NULL); | 12420 CHECK(event->user_data != NULL); |
| 12427 uint32_t hash = i::ComputePointerHash(event->user_data); | 12421 uint32_t hash = i::ComputePointerHash(event->user_data); |
| 12428 i::HashMap::Entry* entry = | 12422 i::HashMap::Entry* entry = |
| 12429 jitcode_line_info->Lookup(event->user_data, hash, false); | 12423 jitcode_line_info->Lookup(event->user_data, hash); |
| 12430 CHECK(entry != NULL); | 12424 CHECK(entry != NULL); |
| 12431 } | 12425 } |
| 12432 break; | 12426 break; |
| 12433 | 12427 |
| 12434 default: | 12428 default: |
| 12435 // Impossible event. | 12429 // Impossible event. |
| 12436 CHECK(false); | 12430 CHECK(false); |
| 12437 break; | 12431 break; |
| 12438 } | 12432 } |
| 12439 } | 12433 } |
| (...skipping 9453 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 21893 } | 21887 } |
| 21894 { | 21888 { |
| 21895 v8::TryCatch try_catch; | 21889 v8::TryCatch try_catch; |
| 21896 uint16_t* data = reinterpret_cast<uint16_t*>(buffer); | 21890 uint16_t* data = reinterpret_cast<uint16_t*>(buffer); |
| 21897 CHECK(v8::String::NewFromTwoByte(isolate, data, v8::String::kNormalString, | 21891 CHECK(v8::String::NewFromTwoByte(isolate, data, v8::String::kNormalString, |
| 21898 length).IsEmpty()); | 21892 length).IsEmpty()); |
| 21899 CHECK(!try_catch.HasCaught()); | 21893 CHECK(!try_catch.HasCaught()); |
| 21900 } | 21894 } |
| 21901 free(buffer); | 21895 free(buffer); |
| 21902 } | 21896 } |
| OLD | NEW |