| OLD | NEW |
| 1 // Copyright 2006-2009 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2009 the V8 project authors. All rights reserved. |
| 2 // | 2 // |
| 3 // Tests of profiler-related functions from log.h | 3 // Tests of profiler-related functions from log.h |
| 4 | 4 |
| 5 #ifdef ENABLE_LOGGING_AND_PROFILING | 5 #ifdef ENABLE_LOGGING_AND_PROFILING |
| 6 | 6 |
| 7 #include <stdlib.h> | 7 #include <stdlib.h> |
| 8 | 8 |
| 9 #include "v8.h" | 9 #include "v8.h" |
| 10 | 10 |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 87 | 87 |
| 88 | 88 |
| 89 TEST(PureCStackTrace) { | 89 TEST(PureCStackTrace) { |
| 90 TickSample sample; | 90 TickSample sample; |
| 91 StackTracer tracer(reinterpret_cast<unsigned int>(&sample)); | 91 StackTracer tracer(reinterpret_cast<unsigned int>(&sample)); |
| 92 InitTraceEnv(&tracer, &sample); | 92 InitTraceEnv(&tracer, &sample); |
| 93 CFunc(0); | 93 CFunc(0); |
| 94 #ifdef DEBUG | 94 #ifdef DEBUG |
| 95 // C stack trace works only in debug mode, in release mode EBP is | 95 // C stack trace works only in debug mode, in release mode EBP is |
| 96 // usually treated as a general-purpose register | 96 // usually treated as a general-purpose register |
| 97 CHECK_GT(sample.frames_count, 0); |
| 97 CheckRetAddrIsInCFunction(reinterpret_cast<unsigned int>(sample.stack[0]), | 98 CheckRetAddrIsInCFunction(reinterpret_cast<unsigned int>(sample.stack[0]), |
| 98 reinterpret_cast<unsigned int>(&CFunc)); | 99 reinterpret_cast<unsigned int>(&CFunc)); |
| 99 CHECK_EQ(0, sample.stack[1]); | |
| 100 #endif | 100 #endif |
| 101 } | 101 } |
| 102 | 102 |
| 103 | 103 |
| 104 // --- T r a c e E x t e n s i o n --- | 104 // --- T r a c e E x t e n s i o n --- |
| 105 | 105 |
| 106 class TraceExtension : public v8::Extension { | 106 class TraceExtension : public v8::Extension { |
| 107 public: | 107 public: |
| 108 TraceExtension() : v8::Extension("v8/trace", kSource) { } | 108 TraceExtension() : v8::Extension("v8/trace", kSource) { } |
| 109 virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction( | 109 virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction( |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 210 call_trace_code->instruction_size(), | 210 call_trace_code->instruction_size(), |
| 211 original, patch, sizeof(patch))); | 211 original, patch, sizeof(patch))); |
| 212 | 212 |
| 213 SetGlobalProperty("JSFuncDoTrace", v8::ToApi<Value>(call_trace)); | 213 SetGlobalProperty("JSFuncDoTrace", v8::ToApi<Value>(call_trace)); |
| 214 | 214 |
| 215 CompileRun( | 215 CompileRun( |
| 216 "function JSTrace() {" | 216 "function JSTrace() {" |
| 217 " JSFuncDoTrace();" | 217 " JSFuncDoTrace();" |
| 218 "};\n" | 218 "};\n" |
| 219 "JSTrace();"); | 219 "JSTrace();"); |
| 220 CHECK_NE(0, *(sample.stack)); | 220 CHECK_GT(sample.frames_count, 1); |
| 221 CheckRetAddrIsInFunction( | 221 CheckRetAddrIsInFunction( |
| 222 reinterpret_cast<unsigned int>(sample.stack[0]), | 222 reinterpret_cast<unsigned int>(sample.stack[0]), |
| 223 reinterpret_cast<unsigned int>(call_trace_code->instruction_start()), | 223 reinterpret_cast<unsigned int>(call_trace_code->instruction_start()), |
| 224 call_trace_code->instruction_size()); | 224 call_trace_code->instruction_size()); |
| 225 Handle<JSFunction> js_trace(JSFunction::cast(*(v8::Utils::OpenHandle( | 225 Handle<JSFunction> js_trace(JSFunction::cast(*(v8::Utils::OpenHandle( |
| 226 *GetGlobalProperty("JSTrace"))))); | 226 *GetGlobalProperty("JSTrace"))))); |
| 227 v8::internal::Code* js_trace_code = js_trace->code(); | 227 v8::internal::Code* js_trace_code = js_trace->code(); |
| 228 CheckRetAddrIsInFunction( | 228 CheckRetAddrIsInFunction( |
| 229 reinterpret_cast<unsigned int>(sample.stack[1]), | 229 reinterpret_cast<unsigned int>(sample.stack[1]), |
| 230 reinterpret_cast<unsigned int>(js_trace_code->instruction_start()), | 230 reinterpret_cast<unsigned int>(js_trace_code->instruction_start()), |
| 231 js_trace_code->instruction_size()); | 231 js_trace_code->instruction_size()); |
| 232 } | 232 } |
| 233 | 233 |
| 234 #endif // ENABLE_LOGGING_AND_PROFILING | 234 #endif // ENABLE_LOGGING_AND_PROFILING |
| OLD | NEW |