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

Side by Side Diff: src/api.cc

Issue 2813773002: [inspector] store v8:StackTrace as FixedArray (Closed)
Patch Set: addressed comments Created 3 years, 8 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/api.h ('k') | src/asmjs/asm-js.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 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 2733 matching lines...) Expand 10 before | Expand all | Expand 10 after
2744 return GetScriptOrigin().ResourceName(); 2744 return GetScriptOrigin().ResourceName();
2745 } 2745 }
2746 2746
2747 2747
2748 v8::Local<v8::StackTrace> Message::GetStackTrace() const { 2748 v8::Local<v8::StackTrace> Message::GetStackTrace() const {
2749 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); 2749 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
2750 ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate); 2750 ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
2751 EscapableHandleScope scope(reinterpret_cast<Isolate*>(isolate)); 2751 EscapableHandleScope scope(reinterpret_cast<Isolate*>(isolate));
2752 auto message = i::Handle<i::JSMessageObject>::cast(Utils::OpenHandle(this)); 2752 auto message = i::Handle<i::JSMessageObject>::cast(Utils::OpenHandle(this));
2753 i::Handle<i::Object> stackFramesObj(message->stack_frames(), isolate); 2753 i::Handle<i::Object> stackFramesObj(message->stack_frames(), isolate);
2754 if (!stackFramesObj->IsJSArray()) return v8::Local<v8::StackTrace>(); 2754 if (!stackFramesObj->IsFixedArray()) return v8::Local<v8::StackTrace>();
2755 auto stackTrace = i::Handle<i::JSArray>::cast(stackFramesObj); 2755 auto stackTrace = i::Handle<i::FixedArray>::cast(stackFramesObj);
2756 return scope.Escape(Utils::StackTraceToLocal(stackTrace)); 2756 return scope.Escape(Utils::StackTraceToLocal(stackTrace));
2757 } 2757 }
2758 2758
2759 2759
2760 Maybe<int> Message::GetLineNumber(Local<Context> context) const { 2760 Maybe<int> Message::GetLineNumber(Local<Context> context) const {
2761 auto self = Utils::OpenHandle(this); 2761 auto self = Utils::OpenHandle(this);
2762 i::Isolate* isolate = self->GetIsolate(); 2762 i::Isolate* isolate = self->GetIsolate();
2763 ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate); 2763 ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
2764 EscapableHandleScope handle_scope(reinterpret_cast<Isolate*>(isolate)); 2764 EscapableHandleScope handle_scope(reinterpret_cast<Isolate*>(isolate));
2765 auto msg = i::Handle<i::JSMessageObject>::cast(self); 2765 auto msg = i::Handle<i::JSMessageObject>::cast(self);
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
2870 i_isolate->PrintCurrentStackTrace(out); 2870 i_isolate->PrintCurrentStackTrace(out);
2871 } 2871 }
2872 2872
2873 2873
2874 // --- S t a c k T r a c e --- 2874 // --- S t a c k T r a c e ---
2875 2875
2876 Local<StackFrame> StackTrace::GetFrame(uint32_t index) const { 2876 Local<StackFrame> StackTrace::GetFrame(uint32_t index) const {
2877 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); 2877 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
2878 ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate); 2878 ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
2879 EscapableHandleScope scope(reinterpret_cast<Isolate*>(isolate)); 2879 EscapableHandleScope scope(reinterpret_cast<Isolate*>(isolate));
2880 auto self = Utils::OpenHandle(this); 2880 auto obj = handle(Utils::OpenHandle(this)->get(index), isolate);
2881 auto obj = i::JSReceiver::GetElement(isolate, self, index).ToHandleChecked();
2882 auto info = i::Handle<i::StackFrameInfo>::cast(obj); 2881 auto info = i::Handle<i::StackFrameInfo>::cast(obj);
2883 return scope.Escape(Utils::StackFrameToLocal(info)); 2882 return scope.Escape(Utils::StackFrameToLocal(info));
2884 } 2883 }
2885 2884
2886 2885
2887 int StackTrace::GetFrameCount() const { 2886 int StackTrace::GetFrameCount() const {
2888 return i::Smi::cast(Utils::OpenHandle(this)->length())->value(); 2887 return Utils::OpenHandle(this)->length();
2889 } 2888 }
2890 2889
2891 namespace { 2890 namespace {
2892 i::Handle<i::JSObject> NewFrameObject(i::Isolate* isolate, 2891 i::Handle<i::JSObject> NewFrameObject(i::Isolate* isolate,
2893 i::Handle<i::StackFrameInfo> frame) { 2892 i::Handle<i::StackFrameInfo> frame) {
2894 i::Handle<i::JSObject> frame_obj = 2893 i::Handle<i::JSObject> frame_obj =
2895 isolate->factory()->NewJSObject(isolate->object_function()); 2894 isolate->factory()->NewJSObject(isolate->object_function());
2896 i::JSObject::AddProperty( 2895 i::JSObject::AddProperty(
2897 frame_obj, handle(isolate->heap()->line_string()), 2896 frame_obj, handle(isolate->heap()->line_string()),
2898 handle(i::Smi::FromInt(frame->line_number() + 1), isolate), i::NONE); 2897 handle(i::Smi::FromInt(frame->line_number() + 1), isolate), i::NONE);
(...skipping 27 matching lines...) Expand all
2926 frame_obj, 2925 frame_obj,
2927 isolate->factory()->InternalizeOneByteString( 2926 isolate->factory()->InternalizeOneByteString(
2928 STATIC_CHAR_VECTOR("isConstructor")), 2927 STATIC_CHAR_VECTOR("isConstructor")),
2929 isolate->factory()->ToBoolean(frame->is_constructor()), i::NONE); 2928 isolate->factory()->ToBoolean(frame->is_constructor()), i::NONE);
2930 return frame_obj; 2929 return frame_obj;
2931 } 2930 }
2932 } // namespace 2931 } // namespace
2933 2932
2934 Local<Array> StackTrace::AsArray() { 2933 Local<Array> StackTrace::AsArray() {
2935 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); 2934 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
2936 i::Handle<i::JSArray> self = Utils::OpenHandle(this); 2935 i::Handle<i::FixedArray> self = Utils::OpenHandle(this);
2937 int frame_count = GetFrameCount(); 2936 int frame_count = self->length();
2938 i::Handle<i::FixedArray> frames = 2937 i::Handle<i::FixedArray> frames =
2939 isolate->factory()->NewFixedArray(frame_count); 2938 isolate->factory()->NewFixedArray(frame_count);
2940 for (int i = 0; i < frame_count; ++i) { 2939 for (int i = 0; i < frame_count; ++i) {
2941 auto obj = i::JSReceiver::GetElement(isolate, self, i).ToHandleChecked(); 2940 auto obj = handle(self->get(i), isolate);
2942 auto frame = i::Handle<i::StackFrameInfo>::cast(obj); 2941 auto frame = i::Handle<i::StackFrameInfo>::cast(obj);
2943 i::Handle<i::JSObject> frame_obj = NewFrameObject(isolate, frame); 2942 i::Handle<i::JSObject> frame_obj = NewFrameObject(isolate, frame);
2944 frames->set(i, *frame_obj); 2943 frames->set(i, *frame_obj);
2945 } 2944 }
2946 return Utils::ToLocal(isolate->factory()->NewJSArrayWithElements( 2945 return Utils::ToLocal(isolate->factory()->NewJSArrayWithElements(
2947 frames, i::FAST_ELEMENTS, frame_count)); 2946 frames, i::FAST_ELEMENTS, frame_count));
2948 } 2947 }
2949 2948
2950 2949
2951 Local<StackTrace> StackTrace::CurrentStackTrace( 2950 Local<StackTrace> StackTrace::CurrentStackTrace(
2952 Isolate* isolate, 2951 Isolate* isolate,
2953 int frame_limit, 2952 int frame_limit,
2954 StackTraceOptions options) { 2953 StackTraceOptions options) {
2955 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); 2954 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
2956 ENTER_V8_NO_SCRIPT_NO_EXCEPTION(i_isolate); 2955 ENTER_V8_NO_SCRIPT_NO_EXCEPTION(i_isolate);
2957 i::Handle<i::JSArray> stackTrace = 2956 i::Handle<i::FixedArray> stackTrace =
2958 i_isolate->CaptureCurrentStackTrace(frame_limit, options); 2957 i_isolate->CaptureCurrentStackTrace(frame_limit, options);
2959 return Utils::StackTraceToLocal(stackTrace); 2958 return Utils::StackTraceToLocal(stackTrace);
2960 } 2959 }
2961 2960
2962 2961
2963 // --- S t a c k F r a m e --- 2962 // --- S t a c k F r a m e ---
2964 2963
2965 int StackFrame::GetLineNumber() const { 2964 int StackFrame::GetLineNumber() const {
2966 int v = Utils::OpenHandle(this)->line_number(); 2965 int v = Utils::OpenHandle(this)->line_number();
2967 return v ? v : Message::kNoLineNumberInfo; 2966 return v ? v : Message::kNoLineNumberInfo;
(...skipping 7464 matching lines...) Expand 10 before | Expand all | Expand 10 after
10432 Address callback_address = 10431 Address callback_address =
10433 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); 10432 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback));
10434 VMState<EXTERNAL> state(isolate); 10433 VMState<EXTERNAL> state(isolate);
10435 ExternalCallbackScope call_scope(isolate, callback_address); 10434 ExternalCallbackScope call_scope(isolate, callback_address);
10436 callback(info); 10435 callback(info);
10437 } 10436 }
10438 10437
10439 10438
10440 } // namespace internal 10439 } // namespace internal
10441 } // namespace v8 10440 } // namespace v8
OLDNEW
« no previous file with comments | « src/api.h ('k') | src/asmjs/asm-js.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698