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

Side by Side Diff: src/api.cc

Issue 1974003002: Add V8.Execute histogram to measure time spent executing JS code. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 7 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 | « no previous file | src/counters.h » ('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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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/api.h" 5 #include "src/api.h"
6 6
7 #include <string.h> // For memcpy, strlen. 7 #include <string.h> // For memcpy, strlen.
8 #ifdef V8_USE_ADDRESS_SANITIZER 8 #ifdef V8_USE_ADDRESS_SANITIZER
9 #include <sanitizer/asan_interface.h> 9 #include <sanitizer/asan_interface.h>
10 #endif // V8_USE_ADDRESS_SANITIZER 10 #endif // V8_USE_ADDRESS_SANITIZER
(...skipping 1765 matching lines...) Expand 10 before | Expand all | Expand 10 after
1776 i::Object* url = i::Script::cast(obj->script())->source_mapping_url(); 1776 i::Object* url = i::Script::cast(obj->script())->source_mapping_url();
1777 return Utils::ToLocal(i::Handle<i::Object>(url, isolate)); 1777 return Utils::ToLocal(i::Handle<i::Object>(url, isolate));
1778 } else { 1778 } else {
1779 return Local<String>(); 1779 return Local<String>();
1780 } 1780 }
1781 } 1781 }
1782 1782
1783 1783
1784 MaybeLocal<Value> Script::Run(Local<Context> context) { 1784 MaybeLocal<Value> Script::Run(Local<Context> context) {
1785 PREPARE_FOR_EXECUTION_WITH_CALLBACK(context, "v8::Script::Run()", Value) 1785 PREPARE_FOR_EXECUTION_WITH_CALLBACK(context, "v8::Script::Run()", Value)
1786 i::HistogramTimerScope execute_timer(isolate->counters()->execute());
1786 i::AggregatingHistogramTimerScope timer(isolate->counters()->compile_lazy()); 1787 i::AggregatingHistogramTimerScope timer(isolate->counters()->compile_lazy());
1787 i::TimerEventScope<i::TimerEventExecute> timer_scope(isolate); 1788 i::TimerEventScope<i::TimerEventExecute> timer_scope(isolate);
1788 TRACE_EVENT0("v8", "V8.Execute"); 1789 TRACE_EVENT0("v8", "V8.Execute");
1789 auto fun = i::Handle<i::JSFunction>::cast(Utils::OpenHandle(this)); 1790 auto fun = i::Handle<i::JSFunction>::cast(Utils::OpenHandle(this));
1790 i::Handle<i::Object> receiver = isolate->global_proxy(); 1791 i::Handle<i::Object> receiver = isolate->global_proxy();
1791 Local<Value> result; 1792 Local<Value> result;
1792 has_pending_exception = 1793 has_pending_exception =
1793 !ToLocal<Value>(i::Execution::Call(isolate, fun, receiver, 0, NULL), 1794 !ToLocal<Value>(i::Execution::Call(isolate, fun, receiver, 0, NULL),
1794 &result); 1795 &result);
1795 RETURN_ON_FAILED_EXECUTION(Value); 1796 RETURN_ON_FAILED_EXECUTION(Value);
(...skipping 2570 matching lines...) Expand 10 before | Expand all | Expand 10 after
4366 bool v8::Object::IsConstructor() { 4367 bool v8::Object::IsConstructor() {
4367 auto self = Utils::OpenHandle(this); 4368 auto self = Utils::OpenHandle(this);
4368 return self->IsConstructor(); 4369 return self->IsConstructor();
4369 } 4370 }
4370 4371
4371 MaybeLocal<Value> Object::CallAsFunction(Local<Context> context, 4372 MaybeLocal<Value> Object::CallAsFunction(Local<Context> context,
4372 Local<Value> recv, int argc, 4373 Local<Value> recv, int argc,
4373 Local<Value> argv[]) { 4374 Local<Value> argv[]) {
4374 PREPARE_FOR_EXECUTION_WITH_CALLBACK(context, "v8::Object::CallAsFunction()", 4375 PREPARE_FOR_EXECUTION_WITH_CALLBACK(context, "v8::Object::CallAsFunction()",
4375 Value); 4376 Value);
4377 i::HistogramTimerScope execute_timer(isolate->counters()->execute());
4376 i::TimerEventScope<i::TimerEventExecute> timer_scope(isolate); 4378 i::TimerEventScope<i::TimerEventExecute> timer_scope(isolate);
4377 TRACE_EVENT0("v8", "V8.Execute"); 4379 TRACE_EVENT0("v8", "V8.Execute");
4378 auto self = Utils::OpenHandle(this); 4380 auto self = Utils::OpenHandle(this);
4379 auto recv_obj = Utils::OpenHandle(*recv); 4381 auto recv_obj = Utils::OpenHandle(*recv);
4380 STATIC_ASSERT(sizeof(v8::Local<v8::Value>) == sizeof(i::Object**)); 4382 STATIC_ASSERT(sizeof(v8::Local<v8::Value>) == sizeof(i::Object**));
4381 i::Handle<i::Object>* args = reinterpret_cast<i::Handle<i::Object>*>(argv); 4383 i::Handle<i::Object>* args = reinterpret_cast<i::Handle<i::Object>*>(argv);
4382 Local<Value> result; 4384 Local<Value> result;
4383 has_pending_exception = !ToLocal<Value>( 4385 has_pending_exception = !ToLocal<Value>(
4384 i::Execution::Call(isolate, self, recv_obj, argc, args), &result); 4386 i::Execution::Call(isolate, self, recv_obj, argc, args), &result);
4385 RETURN_ON_FAILED_EXECUTION(Value); 4387 RETURN_ON_FAILED_EXECUTION(Value);
4386 RETURN_ESCAPED(result); 4388 RETURN_ESCAPED(result);
4387 } 4389 }
4388 4390
4389 4391
4390 Local<v8::Value> Object::CallAsFunction(v8::Local<v8::Value> recv, int argc, 4392 Local<v8::Value> Object::CallAsFunction(v8::Local<v8::Value> recv, int argc,
4391 v8::Local<v8::Value> argv[]) { 4393 v8::Local<v8::Value> argv[]) {
4392 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); 4394 auto context = ContextFromHeapObject(Utils::OpenHandle(this));
4393 Local<Value>* argv_cast = reinterpret_cast<Local<Value>*>(argv); 4395 Local<Value>* argv_cast = reinterpret_cast<Local<Value>*>(argv);
4394 RETURN_TO_LOCAL_UNCHECKED(CallAsFunction(context, recv, argc, argv_cast), 4396 RETURN_TO_LOCAL_UNCHECKED(CallAsFunction(context, recv, argc, argv_cast),
4395 Value); 4397 Value);
4396 } 4398 }
4397 4399
4398 4400
4399 MaybeLocal<Value> Object::CallAsConstructor(Local<Context> context, int argc, 4401 MaybeLocal<Value> Object::CallAsConstructor(Local<Context> context, int argc,
4400 Local<Value> argv[]) { 4402 Local<Value> argv[]) {
4401 PREPARE_FOR_EXECUTION_WITH_CALLBACK(context, 4403 PREPARE_FOR_EXECUTION_WITH_CALLBACK(context,
4402 "v8::Object::CallAsConstructor()", Value); 4404 "v8::Object::CallAsConstructor()", Value);
4405 i::HistogramTimerScope execute_timer(isolate->counters()->execute());
4403 i::TimerEventScope<i::TimerEventExecute> timer_scope(isolate); 4406 i::TimerEventScope<i::TimerEventExecute> timer_scope(isolate);
4404 TRACE_EVENT0("v8", "V8.Execute"); 4407 TRACE_EVENT0("v8", "V8.Execute");
4405 auto self = Utils::OpenHandle(this); 4408 auto self = Utils::OpenHandle(this);
4406 STATIC_ASSERT(sizeof(v8::Local<v8::Value>) == sizeof(i::Object**)); 4409 STATIC_ASSERT(sizeof(v8::Local<v8::Value>) == sizeof(i::Object**));
4407 i::Handle<i::Object>* args = reinterpret_cast<i::Handle<i::Object>*>(argv); 4410 i::Handle<i::Object>* args = reinterpret_cast<i::Handle<i::Object>*>(argv);
4408 Local<Value> result; 4411 Local<Value> result;
4409 has_pending_exception = !ToLocal<Value>( 4412 has_pending_exception = !ToLocal<Value>(
4410 i::Execution::New(isolate, self, self, argc, args), &result); 4413 i::Execution::New(isolate, self, self, argc, args), &result);
4411 RETURN_ON_FAILED_EXECUTION(Value); 4414 RETURN_ON_FAILED_EXECUTION(Value);
4412 RETURN_ESCAPED(result); 4415 RETURN_ESCAPED(result);
(...skipping 30 matching lines...) Expand all
4443 Local<v8::Object> Function::NewInstance() const { 4446 Local<v8::Object> Function::NewInstance() const {
4444 return NewInstance(Isolate::GetCurrent()->GetCurrentContext(), 0, NULL) 4447 return NewInstance(Isolate::GetCurrent()->GetCurrentContext(), 0, NULL)
4445 .FromMaybe(Local<Object>()); 4448 .FromMaybe(Local<Object>());
4446 } 4449 }
4447 4450
4448 4451
4449 MaybeLocal<Object> Function::NewInstance(Local<Context> context, int argc, 4452 MaybeLocal<Object> Function::NewInstance(Local<Context> context, int argc,
4450 v8::Local<v8::Value> argv[]) const { 4453 v8::Local<v8::Value> argv[]) const {
4451 PREPARE_FOR_EXECUTION_WITH_CALLBACK(context, "v8::Function::NewInstance()", 4454 PREPARE_FOR_EXECUTION_WITH_CALLBACK(context, "v8::Function::NewInstance()",
4452 Object); 4455 Object);
4456 i::HistogramTimerScope execute_timer(isolate->counters()->execute());
4453 i::TimerEventScope<i::TimerEventExecute> timer_scope(isolate); 4457 i::TimerEventScope<i::TimerEventExecute> timer_scope(isolate);
4454 TRACE_EVENT0("v8", "V8.Execute"); 4458 TRACE_EVENT0("v8", "V8.Execute");
4455 auto self = Utils::OpenHandle(this); 4459 auto self = Utils::OpenHandle(this);
4456 STATIC_ASSERT(sizeof(v8::Local<v8::Value>) == sizeof(i::Object**)); 4460 STATIC_ASSERT(sizeof(v8::Local<v8::Value>) == sizeof(i::Object**));
4457 i::Handle<i::Object>* args = reinterpret_cast<i::Handle<i::Object>*>(argv); 4461 i::Handle<i::Object>* args = reinterpret_cast<i::Handle<i::Object>*>(argv);
4458 Local<Object> result; 4462 Local<Object> result;
4459 has_pending_exception = !ToLocal<Object>( 4463 has_pending_exception = !ToLocal<Object>(
4460 i::Execution::New(isolate, self, self, argc, args), &result); 4464 i::Execution::New(isolate, self, self, argc, args), &result);
4461 RETURN_ON_FAILED_EXECUTION(Object); 4465 RETURN_ON_FAILED_EXECUTION(Object);
4462 RETURN_ESCAPED(result); 4466 RETURN_ESCAPED(result);
4463 } 4467 }
4464 4468
4465 4469
4466 Local<v8::Object> Function::NewInstance(int argc, 4470 Local<v8::Object> Function::NewInstance(int argc,
4467 v8::Local<v8::Value> argv[]) const { 4471 v8::Local<v8::Value> argv[]) const {
4468 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); 4472 auto context = ContextFromHeapObject(Utils::OpenHandle(this));
4469 RETURN_TO_LOCAL_UNCHECKED(NewInstance(context, argc, argv), Object); 4473 RETURN_TO_LOCAL_UNCHECKED(NewInstance(context, argc, argv), Object);
4470 } 4474 }
4471 4475
4472 4476
4473 MaybeLocal<v8::Value> Function::Call(Local<Context> context, 4477 MaybeLocal<v8::Value> Function::Call(Local<Context> context,
4474 v8::Local<v8::Value> recv, int argc, 4478 v8::Local<v8::Value> recv, int argc,
4475 v8::Local<v8::Value> argv[]) { 4479 v8::Local<v8::Value> argv[]) {
4476 PREPARE_FOR_EXECUTION_WITH_CALLBACK(context, "v8::Function::Call()", Value); 4480 PREPARE_FOR_EXECUTION_WITH_CALLBACK(context, "v8::Function::Call()", Value);
4481 i::HistogramTimerScope execute_timer(isolate->counters()->execute());
4477 i::TimerEventScope<i::TimerEventExecute> timer_scope(isolate); 4482 i::TimerEventScope<i::TimerEventExecute> timer_scope(isolate);
4478 TRACE_EVENT0("v8", "V8.Execute"); 4483 TRACE_EVENT0("v8", "V8.Execute");
4479 auto self = Utils::OpenHandle(this); 4484 auto self = Utils::OpenHandle(this);
4480 i::Handle<i::Object> recv_obj = Utils::OpenHandle(*recv); 4485 i::Handle<i::Object> recv_obj = Utils::OpenHandle(*recv);
4481 STATIC_ASSERT(sizeof(v8::Local<v8::Value>) == sizeof(i::Object**)); 4486 STATIC_ASSERT(sizeof(v8::Local<v8::Value>) == sizeof(i::Object**));
4482 i::Handle<i::Object>* args = reinterpret_cast<i::Handle<i::Object>*>(argv); 4487 i::Handle<i::Object>* args = reinterpret_cast<i::Handle<i::Object>*>(argv);
4483 Local<Value> result; 4488 Local<Value> result;
4484 has_pending_exception = !ToLocal<Value>( 4489 has_pending_exception = !ToLocal<Value>(
4485 i::Execution::Call(isolate, self, recv_obj, argc, args), &result); 4490 i::Execution::Call(isolate, self, recv_obj, argc, args), &result);
4486 RETURN_ON_FAILED_EXECUTION(Value); 4491 RETURN_ON_FAILED_EXECUTION(Value);
(...skipping 4324 matching lines...) Expand 10 before | Expand all | Expand 10 after
8811 Address callback_address = 8816 Address callback_address =
8812 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); 8817 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback));
8813 VMState<EXTERNAL> state(isolate); 8818 VMState<EXTERNAL> state(isolate);
8814 ExternalCallbackScope call_scope(isolate, callback_address); 8819 ExternalCallbackScope call_scope(isolate, callback_address);
8815 callback(info); 8820 callback(info);
8816 } 8821 }
8817 8822
8818 8823
8819 } // namespace internal 8824 } // namespace internal
8820 } // namespace v8 8825 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/counters.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698