1// Copyright 2010 the V8 project authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef V8_PROFILER_CPU_PROFILER_INL_H_ 6#define V8_PROFILER_CPU_PROFILER_INL_H_ 7 8#include "src/profiler/cpu-profiler.h" 9 10#include <new> 11#include "src/profiler/circular-queue-inl.h" 12#include "src/profiler/profile-generator-inl.h" 13 14namespace v8 { 15namespace internal { 16 17void CodeCreateEventRecord::UpdateCodeMap(CodeMap* code_map) { 18 code_map->AddCode(instruction_start, entry, instruction_size); 19} 20 21 22void CodeMoveEventRecord::UpdateCodeMap(CodeMap* code_map) { 23 code_map->MoveCode(from_instruction_start, to_instruction_start); 24} 25 26 27void CodeDisableOptEventRecord::UpdateCodeMap(CodeMap* code_map) { 28 CodeEntry* entry = code_map->FindEntry(instruction_start); 29 if (entry != nullptr) { 30 entry->set_bailout_reason(bailout_reason); 31 } 32} 33 34 35void CodeDeoptEventRecord::UpdateCodeMap(CodeMap* code_map) { 36 CodeEntry* entry = code_map->FindEntry(instruction_start); 37 if (entry != nullptr) { 38 std::vector<CpuProfileDeoptFrame> frames_vector( 39 deopt_frames, deopt_frames + deopt_frame_count); 40 entry->set_deopt_info(deopt_reason, deopt_id, std::move(frames_vector)); 41 } 42 delete[] deopt_frames; 43} 44 45 46void ReportBuiltinEventRecord::UpdateCodeMap(CodeMap* code_map) { 47 CodeEntry* entry = code_map->FindEntry(instruction_start); 48 if (entry) { 49 entry->SetBuiltinId(builtin); 50 return; 51 } 52#if V8_ENABLE_WEBASSEMBLY 53 if (builtin == Builtin::kGenericJSToWasmWrapper) { 54 // Make sure to add the generic js-to-wasm wrapper builtin, because that 55 // one is supposed to show up in profiles. 56 entry = code_map->code_entries().Create(CodeEventListener::BUILTIN_TAG, 57 Builtins::name(builtin)); 58 code_map->AddCode(instruction_start, entry, instruction_size); 59 } 60#endif // V8_ENABLE_WEBASSEMBLY 61} 62 63TickSample* SamplingEventsProcessor::StartTickSample() { 64 void* address = ticks_buffer_.StartEnqueue(); 65 if (address == nullptr) return nullptr; 66 TickSampleEventRecord* evt = 67 new (address) TickSampleEventRecord(last_code_event_id_); 68 return &evt->sample; 69} 70 71void CodeDeleteEventRecord::UpdateCodeMap(CodeMap* code_map) { 72 bool removed = code_map->RemoveCode(entry); 73 CHECK(removed); 74} 75 76void SamplingEventsProcessor::FinishTickSample() { 77 ticks_buffer_.FinishEnqueue(); 78} 79 80} // namespace internal 81} // namespace v8 82 83#endif // V8_PROFILER_CPU_PROFILER_INL_H_ 84