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

Side by Side Diff: src/deoptimizer.cc

Issue 1707563002: Split the TRACE_EVENTs from the LOG/HistogramTimers/TimerEvents functionality. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 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
« no previous file with comments | « src/counters.h ('k') | src/full-codegen/full-codegen.cc » ('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 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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/deoptimizer.h" 5 #include "src/deoptimizer.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/ast/prettyprinter.h" 8 #include "src/ast/prettyprinter.h"
9 #include "src/codegen.h" 9 #include "src/codegen.h"
10 #include "src/disasm.h" 10 #include "src/disasm.h"
11 #include "src/frames-inl.h" 11 #include "src/frames-inl.h"
12 #include "src/full-codegen/full-codegen.h" 12 #include "src/full-codegen/full-codegen.h"
13 #include "src/global-handles.h" 13 #include "src/global-handles.h"
14 #include "src/interpreter/interpreter.h" 14 #include "src/interpreter/interpreter.h"
15 #include "src/macro-assembler.h" 15 #include "src/macro-assembler.h"
16 #include "src/profiler/cpu-profiler.h" 16 #include "src/profiler/cpu-profiler.h"
17 #include "src/tracing/trace-event.h"
17 #include "src/v8.h" 18 #include "src/v8.h"
18 19
19 20
20 namespace v8 { 21 namespace v8 {
21 namespace internal { 22 namespace internal {
22 23
23 static MemoryChunk* AllocateCodeChunk(MemoryAllocator* allocator) { 24 static MemoryChunk* AllocateCodeChunk(MemoryAllocator* allocator) {
24 return allocator->AllocateChunk(Deoptimizer::GetMaxDeoptTableSize(), 25 return allocator->AllocateChunk(Deoptimizer::GetMaxDeoptTableSize(),
25 base::OS::CommitPageSize(), 26 base::OS::CommitPageSize(),
26 #if defined(__native_client__) 27 #if defined(__native_client__)
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 // We might be in the middle of incremental marking with compaction. 366 // We might be in the middle of incremental marking with compaction.
366 // Tell collector to treat this code object in a special way and 367 // Tell collector to treat this code object in a special way and
367 // ignore all slots that might have been recorded on it. 368 // ignore all slots that might have been recorded on it.
368 isolate->heap()->mark_compact_collector()->InvalidateCode(codes[i]); 369 isolate->heap()->mark_compact_collector()->InvalidateCode(codes[i]);
369 } 370 }
370 } 371 }
371 372
372 373
373 void Deoptimizer::DeoptimizeAll(Isolate* isolate) { 374 void Deoptimizer::DeoptimizeAll(Isolate* isolate) {
374 TimerEventScope<TimerEventDeoptimizeCode> timer(isolate); 375 TimerEventScope<TimerEventDeoptimizeCode> timer(isolate);
376 TRACE_EVENT0("v8", "V8.DeoptimizeCode");
375 if (FLAG_trace_deopt) { 377 if (FLAG_trace_deopt) {
376 CodeTracer::Scope scope(isolate->GetCodeTracer()); 378 CodeTracer::Scope scope(isolate->GetCodeTracer());
377 PrintF(scope.file(), "[deoptimize all code in all contexts]\n"); 379 PrintF(scope.file(), "[deoptimize all code in all contexts]\n");
378 } 380 }
379 DisallowHeapAllocation no_allocation; 381 DisallowHeapAllocation no_allocation;
380 // For all contexts, mark all code, then deoptimize. 382 // For all contexts, mark all code, then deoptimize.
381 Object* context = isolate->heap()->native_contexts_list(); 383 Object* context = isolate->heap()->native_contexts_list();
382 while (!context->IsUndefined()) { 384 while (!context->IsUndefined()) {
383 Context* native_context = Context::cast(context); 385 Context* native_context = Context::cast(context);
384 MarkAllCodeForContext(native_context); 386 MarkAllCodeForContext(native_context);
385 DeoptimizeMarkedCodeForContext(native_context); 387 DeoptimizeMarkedCodeForContext(native_context);
386 context = native_context->get(Context::NEXT_CONTEXT_LINK); 388 context = native_context->get(Context::NEXT_CONTEXT_LINK);
387 } 389 }
388 } 390 }
389 391
390 392
391 void Deoptimizer::DeoptimizeMarkedCode(Isolate* isolate) { 393 void Deoptimizer::DeoptimizeMarkedCode(Isolate* isolate) {
392 TimerEventScope<TimerEventDeoptimizeCode> timer(isolate); 394 TimerEventScope<TimerEventDeoptimizeCode> timer(isolate);
395 TRACE_EVENT0("v8", "V8.DeoptimizeCode");
393 if (FLAG_trace_deopt) { 396 if (FLAG_trace_deopt) {
394 CodeTracer::Scope scope(isolate->GetCodeTracer()); 397 CodeTracer::Scope scope(isolate->GetCodeTracer());
395 PrintF(scope.file(), "[deoptimize marked code in all contexts]\n"); 398 PrintF(scope.file(), "[deoptimize marked code in all contexts]\n");
396 } 399 }
397 DisallowHeapAllocation no_allocation; 400 DisallowHeapAllocation no_allocation;
398 // For all contexts, deoptimize code already marked. 401 // For all contexts, deoptimize code already marked.
399 Object* context = isolate->heap()->native_contexts_list(); 402 Object* context = isolate->heap()->native_contexts_list();
400 while (!context->IsUndefined()) { 403 while (!context->IsUndefined()) {
401 Context* native_context = Context::cast(context); 404 Context* native_context = Context::cast(context);
402 DeoptimizeMarkedCodeForContext(native_context); 405 DeoptimizeMarkedCodeForContext(native_context);
403 context = native_context->get(Context::NEXT_CONTEXT_LINK); 406 context = native_context->get(Context::NEXT_CONTEXT_LINK);
404 } 407 }
405 } 408 }
406 409
407 410
408 void Deoptimizer::MarkAllCodeForContext(Context* context) { 411 void Deoptimizer::MarkAllCodeForContext(Context* context) {
409 Object* element = context->OptimizedCodeListHead(); 412 Object* element = context->OptimizedCodeListHead();
410 while (!element->IsUndefined()) { 413 while (!element->IsUndefined()) {
411 Code* code = Code::cast(element); 414 Code* code = Code::cast(element);
412 CHECK_EQ(code->kind(), Code::OPTIMIZED_FUNCTION); 415 CHECK_EQ(code->kind(), Code::OPTIMIZED_FUNCTION);
413 code->set_marked_for_deoptimization(true); 416 code->set_marked_for_deoptimization(true);
414 element = code->next_code_link(); 417 element = code->next_code_link();
415 } 418 }
416 } 419 }
417 420
418 421
419 void Deoptimizer::DeoptimizeFunction(JSFunction* function) { 422 void Deoptimizer::DeoptimizeFunction(JSFunction* function) {
420 TimerEventScope<TimerEventDeoptimizeCode> timer(function->GetIsolate()); 423 TimerEventScope<TimerEventDeoptimizeCode> timer(function->GetIsolate());
424 TRACE_EVENT0("v8", "V8.DeoptimizeCode");
421 Code* code = function->code(); 425 Code* code = function->code();
422 if (code->kind() == Code::OPTIMIZED_FUNCTION) { 426 if (code->kind() == Code::OPTIMIZED_FUNCTION) {
423 // Mark the code for deoptimization and unlink any functions that also 427 // Mark the code for deoptimization and unlink any functions that also
424 // refer to that code. The code cannot be shared across native contexts, 428 // refer to that code. The code cannot be shared across native contexts,
425 // so we only need to search one. 429 // so we only need to search one.
426 code->set_marked_for_deoptimization(true); 430 code->set_marked_for_deoptimization(true);
427 DeoptimizeMarkedCodeForContext(function->context()->native_context()); 431 DeoptimizeMarkedCodeForContext(function->context()->native_context());
428 } 432 }
429 } 433 }
430 434
(...skipping 3310 matching lines...) Expand 10 before | Expand all | Expand 10 after
3741 CHECK(value_info->IsMaterializedObject()); 3745 CHECK(value_info->IsMaterializedObject());
3742 3746
3743 value_info->value_ = 3747 value_info->value_ =
3744 Handle<Object>(previously_materialized_objects->get(i), isolate_); 3748 Handle<Object>(previously_materialized_objects->get(i), isolate_);
3745 } 3749 }
3746 } 3750 }
3747 } 3751 }
3748 3752
3749 } // namespace internal 3753 } // namespace internal
3750 } // namespace v8 3754 } // namespace v8
OLDNEW
« no previous file with comments | « src/counters.h ('k') | src/full-codegen/full-codegen.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698