From d32c918fb4d00b91200087d90e3420c6bb69cd9f Mon Sep 17 00:00:00 2001 From: "mikhail.naganov@gmail.com" Date: Tue, 1 Jun 2010 13:35:44 +0000 Subject: [PATCH] started adding test git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4767 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- test/cctest/test-profile-generator.cc | 77 +++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/test/cctest/test-profile-generator.cc b/test/cctest/test-profile-generator.cc index b438d25..7549b74 100644 --- a/test/cctest/test-profile-generator.cc +++ b/test/cctest/test-profile-generator.cc @@ -7,12 +7,14 @@ #include "v8.h" #include "profile-generator-inl.h" #include "cctest.h" +#include "../include/v8-profiler.h" namespace i = v8::internal; using i::CodeEntry; using i::CodeMap; using i::CpuProfile; +using i::CpuProfiler; using i::CpuProfilesCollection; using i::ProfileNode; using i::ProfileTree; @@ -668,4 +670,79 @@ TEST(SampleRateCalculator) { CHECK_EQ(kSamplingIntervalMs * 0.66666, calc3.ticks_per_ms()); } + +// --- P r o f i l e r E x t e n s i o n --- + +class ProfilerExtension : public v8::Extension { + public: + ProfilerExtension() : v8::Extension("v8/profiler", kSource) { } + virtual v8::Handle GetNativeFunction( + v8::Handle name); + static v8::Handle StartProfiling(const v8::Arguments& args); + static v8::Handle StopProfiling(const v8::Arguments& args); + private: + static const char* kSource; +}; + + +const char* ProfilerExtension::kSource = + "native function startProfiling();" + "native function stopProfiling();"; + +v8::Handle ProfilerExtension::GetNativeFunction( + v8::Handle name) { + if (name->Equals(v8::String::New("startProfiling"))) { + return v8::FunctionTemplate::New(ProfilerExtension::StartProfiling); + } else if (name->Equals(v8::String::New("stopProfiling"))) { + return v8::FunctionTemplate::New(ProfilerExtension::StopProfiling); + } else { + CHECK(false); + return v8::Handle(); + } +} + + +v8::Handle ProfilerExtension::StartProfiling(const v8::Arguments& args) { + if (args.Length() > 0) + v8::CpuProfiler::StartProfiling(args[0].As()); + else + v8::CpuProfiler::StartProfiling(v8::String::New("")); + return v8::Undefined(); +} + + +v8::Handle ProfilerExtension::StopProfiling(const v8::Arguments& args) { + if (args.Length() > 0) + v8::CpuProfiler::StopProfiling(args[0].As()); + else + v8::CpuProfiler::StopProfiling(v8::String::New("")); + return v8::Undefined(); +} + + +static ProfilerExtension kProfilerExtension; +v8::DeclareExtension kProfilerExtensionDeclaration(&kProfilerExtension); +static v8::Persistent env; + +TEST(RecordStackTraceAtStartProfiling) { + if (env.IsEmpty()) { + v8::HandleScope scope; + const char* extensions[] = { "v8/profiler" }; + v8::ExtensionConfiguration config(1, extensions); + env = v8::Context::New(&config); + } + v8::HandleScope scope; + env->Enter(); + + CHECK_EQ(0, CpuProfiler::GetProfilesCount()); + CompileRun( + "function c() { startProfiling(); }\n" + "function b() { c(); }\n" + "function a() { b(); }\n" + "a();\n" + "stopProfiling();" + ); + CHECK_EQ(1, CpuProfiler::GetProfilesCount()); +} + #endif // ENABLE_LOGGING_AND_PROFILING -- 2.7.4