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

Side by Side Diff: src/compiler/wasm-compiler.cc

Issue 2929853003: Fix use of history timers in background threads. (Closed)
Patch Set: Merge with master. Created 3 years, 6 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
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 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/compiler/wasm-compiler.h" 5 #include "src/compiler/wasm-compiler.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "src/assembler-inl.h" 9 #include "src/assembler-inl.h"
10 #include "src/base/platform/elapsed-timer.h" 10 #include "src/base/platform/elapsed-timer.h"
(...skipping 3890 matching lines...) Expand 10 before | Expand all | Expand 10 after
3901 DCHECK(name_len > 0 && name_len < name_vector.length()); 3901 DCHECK(name_len > 0 && name_len < name_vector.length());
3902 3902
3903 char* index_name = zone->NewArray<char>(name_len); 3903 char* index_name = zone->NewArray<char>(name_len);
3904 memcpy(index_name, name_vector.start(), name_len); 3904 memcpy(index_name, name_vector.start(), name_len);
3905 return Vector<const char>(index_name, name_len); 3905 return Vector<const char>(index_name, name_len);
3906 } 3906 }
3907 } // namespace 3907 } // namespace
3908 3908
3909 WasmCompilationUnit::WasmCompilationUnit(Isolate* isolate, 3909 WasmCompilationUnit::WasmCompilationUnit(Isolate* isolate,
3910 wasm::ModuleBytesEnv* module_env, 3910 wasm::ModuleBytesEnv* module_env,
3911 const wasm::WasmFunction* function, 3911 const wasm::WasmFunction* function)
3912 bool is_sync)
3913 : WasmCompilationUnit( 3912 : WasmCompilationUnit(
3914 isolate, &module_env->module_env, 3913 isolate, &module_env->module_env,
3915 wasm::FunctionBody{ 3914 wasm::FunctionBody{
3916 function->sig, module_env->wire_bytes.start(), 3915 function->sig, module_env->wire_bytes.start(),
3917 module_env->wire_bytes.start() + function->code_start_offset, 3916 module_env->wire_bytes.start() + function->code_start_offset,
3918 module_env->wire_bytes.start() + function->code_end_offset}, 3917 module_env->wire_bytes.start() + function->code_end_offset},
3919 module_env->wire_bytes.GetNameOrNull(function), function->func_index, 3918 module_env->wire_bytes.GetNameOrNull(function),
3920 is_sync) {} 3919 function->func_index) {}
3921 3920
3922 WasmCompilationUnit::WasmCompilationUnit(Isolate* isolate, 3921 WasmCompilationUnit::WasmCompilationUnit(Isolate* isolate,
3923 wasm::ModuleEnv* module_env, 3922 wasm::ModuleEnv* module_env,
3924 wasm::FunctionBody body, 3923 wasm::FunctionBody body,
3925 wasm::WasmName name, int index, 3924 wasm::WasmName name, int index)
3926 bool is_sync)
3927 : isolate_(isolate), 3925 : isolate_(isolate),
3928 module_env_(module_env), 3926 module_env_(module_env),
3929 func_body_(body), 3927 func_body_(body),
3930 func_name_(name), 3928 func_name_(name),
3931 is_sync_(is_sync),
3932 graph_zone_(new Zone(isolate->allocator(), ZONE_NAME)), 3929 graph_zone_(new Zone(isolate->allocator(), ZONE_NAME)),
3933 jsgraph_(new (graph_zone()) JSGraph( 3930 jsgraph_(new (graph_zone()) JSGraph(
3934 isolate, new (graph_zone()) Graph(graph_zone()), 3931 isolate, new (graph_zone()) Graph(graph_zone()),
3935 new (graph_zone()) CommonOperatorBuilder(graph_zone()), nullptr, 3932 new (graph_zone()) CommonOperatorBuilder(graph_zone()), nullptr,
3936 nullptr, 3933 nullptr,
3937 new (graph_zone()) MachineOperatorBuilder( 3934 new (graph_zone()) MachineOperatorBuilder(
3938 graph_zone(), MachineType::PointerRepresentation(), 3935 graph_zone(), MachineType::PointerRepresentation(),
3939 InstructionSelector::SupportedMachineOperatorFlags(), 3936 InstructionSelector::SupportedMachineOperatorFlags(),
3940 InstructionSelector::AlignmentRequirements()))), 3937 InstructionSelector::AlignmentRequirements()))),
3941 compilation_zone_(isolate->allocator(), ZONE_NAME), 3938 compilation_zone_(isolate->allocator(), ZONE_NAME),
3942 info_(GetDebugName(&compilation_zone_, name, index), isolate, 3939 info_(GetDebugName(&compilation_zone_, name, index), isolate,
3943 &compilation_zone_, Code::ComputeFlags(Code::WASM_FUNCTION)), 3940 &compilation_zone_, Code::ComputeFlags(Code::WASM_FUNCTION)),
3944 func_index_(index), 3941 func_index_(index),
3945 protected_instructions_(&compilation_zone_) {} 3942 protected_instructions_(&compilation_zone_) {}
3946 3943
3947 void WasmCompilationUnit::InitializeHandles() { 3944 void WasmCompilationUnit::InitializeHandles() {
3948 // Create and cache this node in the main thread, which contains a handle to 3945 // Create and cache this node in the main thread, which contains a handle to
3949 // the code object of the c-entry stub. 3946 // the code object of the c-entry stub.
3950 jsgraph_->CEntryStubConstant(1); 3947 jsgraph_->CEntryStubConstant(1);
3951 DCHECK(!handles_initialized_); 3948 DCHECK(!handles_initialized_);
3952 #if DEBUG 3949 #if DEBUG
3953 handles_initialized_ = true; 3950 handles_initialized_ = true;
3954 #endif // DEBUG 3951 #endif // DEBUG
3955 } 3952 }
3956 3953
3957 void WasmCompilationUnit::ExecuteCompilation() { 3954 void WasmCompilationUnit::ExecuteCompilation() {
3958 DCHECK(handles_initialized_); 3955 DCHECK(handles_initialized_);
3959 if (is_sync_) { 3956 HistogramTimerScope wasm_compile_function_time_scope(
3960 // TODO(karlschimpf): Make this work when asynchronous. 3957 isolate_->counters()->wasm_compile_function_time());
jochen (gone - plz use gerrit) 2017/06/12 09:18:34 no isolate_ deref on background threads
kschimpf 2017/06/12 16:47:04 It turns out that this step is not run in the back
3961 // https://bugs.chromium.org/p/v8/issues/detail?id=6361
3962 HistogramTimerScope wasm_compile_function_time_scope(
3963 isolate_->counters()->wasm_compile_function_time());
3964 ExecuteCompilationInternal();
3965 return;
3966 }
3967 ExecuteCompilationInternal();
3968 }
3969
3970 void WasmCompilationUnit::ExecuteCompilationInternal() {
3971 if (FLAG_trace_wasm_compiler) { 3958 if (FLAG_trace_wasm_compiler) {
3972 if (func_name_.start() != nullptr) { 3959 if (func_name_.start() != nullptr) {
3973 PrintF("Compiling wasm function %d:'%.*s'\n\n", func_index(), 3960 PrintF("Compiling wasm function %d:'%.*s'\n\n", func_index(),
3974 func_name_.length(), func_name_.start()); 3961 func_name_.length(), func_name_.start());
3975 } else { 3962 } else {
3976 PrintF("Compiling wasm function %d:<unnamed>\n\n", func_index()); 3963 PrintF("Compiling wasm function %d:<unnamed>\n\n", func_index());
3977 } 3964 }
3978 } 3965 }
3979 3966
3980 double decode_ms = 0; 3967 double decode_ms = 0;
(...skipping 18 matching lines...) Expand all
3999 &compilation_zone_, func_body_.sig); 3986 &compilation_zone_, func_body_.sig);
4000 if (jsgraph_->machine()->Is32()) { 3987 if (jsgraph_->machine()->Is32()) {
4001 descriptor = 3988 descriptor =
4002 module_env_->GetI32WasmCallDescriptor(&compilation_zone_, descriptor); 3989 module_env_->GetI32WasmCallDescriptor(&compilation_zone_, descriptor);
4003 } 3990 }
4004 job_.reset(Pipeline::NewWasmCompilationJob( 3991 job_.reset(Pipeline::NewWasmCompilationJob(
4005 &info_, jsgraph_, descriptor, source_positions, &protected_instructions_, 3992 &info_, jsgraph_, descriptor, source_positions, &protected_instructions_,
4006 !module_env_->module->is_wasm())); 3993 !module_env_->module->is_wasm()));
4007 ok_ = job_->ExecuteJob() == CompilationJob::SUCCEEDED; 3994 ok_ = job_->ExecuteJob() == CompilationJob::SUCCEEDED;
4008 // TODO(bradnelson): Improve histogram handling of size_t. 3995 // TODO(bradnelson): Improve histogram handling of size_t.
4009 if (is_sync_) 3996 isolate_->counters()->wasm_compile_function_peak_memory_bytes()->AddSample(
4010 // TODO(karlschimpf): Make this work when asynchronous. 3997 static_cast<int>(jsgraph_->graph()->zone()->allocation_size()));
4011 // https://bugs.chromium.org/p/v8/issues/detail?id=6361
4012 isolate_->counters()->wasm_compile_function_peak_memory_bytes()->AddSample(
4013 static_cast<int>(jsgraph_->graph()->zone()->allocation_size()));
4014 3998
4015 if (FLAG_trace_wasm_decode_time) { 3999 if (FLAG_trace_wasm_decode_time) {
4016 double pipeline_ms = pipeline_timer.Elapsed().InMillisecondsF(); 4000 double pipeline_ms = pipeline_timer.Elapsed().InMillisecondsF();
4017 PrintF( 4001 PrintF(
4018 "wasm-compilation phase 1 ok: %u bytes, %0.3f ms decode, %zu nodes, " 4002 "wasm-compilation phase 1 ok: %u bytes, %0.3f ms decode, %zu nodes, "
4019 "%0.3f ms pipeline\n", 4003 "%0.3f ms pipeline\n",
4020 static_cast<unsigned>(func_body_.end - func_body_.start), decode_ms, 4004 static_cast<unsigned>(func_body_.end - func_body_.start), decode_ms,
4021 node_count, pipeline_ms); 4005 node_count, pipeline_ms);
4022 } 4006 }
4023 } 4007 }
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
4073 wasm::ModuleBytesEnv* module_env, const wasm::WasmFunction* function) { 4057 wasm::ModuleBytesEnv* module_env, const wasm::WasmFunction* function) {
4074 WasmCompilationUnit unit(isolate, module_env, function); 4058 WasmCompilationUnit unit(isolate, module_env, function);
4075 unit.InitializeHandles(); 4059 unit.InitializeHandles();
4076 unit.ExecuteCompilation(); 4060 unit.ExecuteCompilation();
4077 return unit.FinishCompilation(thrower); 4061 return unit.FinishCompilation(thrower);
4078 } 4062 }
4079 4063
4080 } // namespace compiler 4064 } // namespace compiler
4081 } // namespace internal 4065 } // namespace internal
4082 } // namespace v8 4066 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/wasm-compiler.h ('k') | src/counters.h » ('j') | src/counters.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698