Commit 359d4a28 authored by yurys@chromium.org's avatar yurys@chromium.org

Isolatify CPU profiler public API

Relanding r14006 and r14009 that were reverted in r14031

TBR=danno
BUG=None

Review URL: https://codereview.chromium.org/13460002

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@14108 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 04cb8689
...@@ -135,7 +135,7 @@ class V8EXPORT CpuProfile { ...@@ -135,7 +135,7 @@ class V8EXPORT CpuProfile {
/** /**
* Returns number of samples recorded. The samples are not recorded unless * Returns number of samples recorded. The samples are not recorded unless
* |record_samples| parameter of CpuProfiler::StartProfiling is true. * |record_samples| parameter of CpuProfiler::StartCpuProfiling is true.
*/ */
int GetSamplesCount() const; int GetSamplesCount() const;
...@@ -158,7 +158,8 @@ class V8EXPORT CpuProfile { ...@@ -158,7 +158,8 @@ class V8EXPORT CpuProfile {
/** /**
* Interface for controlling CPU profiling. * Interface for controlling CPU profiling. Instance of the
* profiler can be retrieved using v8::Isolate::GetCpuProfiler.
*/ */
class V8EXPORT CpuProfiler { class V8EXPORT CpuProfiler {
public: public:
...@@ -171,22 +172,34 @@ class V8EXPORT CpuProfiler { ...@@ -171,22 +172,34 @@ class V8EXPORT CpuProfiler {
* obtaining profiling results. * obtaining profiling results.
*/ */
/** Deprecated. Use GetProfileCount instead. */
static int GetProfilesCount();
/** /**
* Returns the number of profiles collected (doesn't include * Returns the number of profiles collected (doesn't include
* profiles that are being collected at the moment of call.) * profiles that are being collected at the moment of call.)
*/ */
static int GetProfilesCount(); int GetProfileCount();
/** Returns a profile by index. */ /** Deprecated. Use GetCpuProfile instead. */
static const CpuProfile* GetProfile( static const CpuProfile* GetProfile(
int index, int index,
Handle<Value> security_token = Handle<Value>()); Handle<Value> security_token = Handle<Value>());
/** Returns a profile by index. */
const CpuProfile* GetCpuProfile(
int index,
Handle<Value> security_token = Handle<Value>());
/** Returns a profile by uid. */ /** Deprecated. Use FindProfile instead. */
static const CpuProfile* FindProfile( static const CpuProfile* FindProfile(
unsigned uid, unsigned uid,
Handle<Value> security_token = Handle<Value>()); Handle<Value> security_token = Handle<Value>());
/** Returns a profile by uid. */
const CpuProfile* FindCpuProfile(
unsigned uid,
Handle<Value> security_token = Handle<Value>());
/** Deprecated. Use StartCpuProfiling instead. */
static void StartProfiling(Handle<String> title, bool record_samples = false);
/** /**
* Starts collecting CPU profile. Title may be an empty string. It * Starts collecting CPU profile. Title may be an empty string. It
* is allowed to have several profiles being collected at * is allowed to have several profiles being collected at
...@@ -198,22 +211,34 @@ class V8EXPORT CpuProfiler { ...@@ -198,22 +211,34 @@ class V8EXPORT CpuProfiler {
* |record_samples| parameter controls whether individual samples should * |record_samples| parameter controls whether individual samples should
* be recorded in addition to the aggregated tree. * be recorded in addition to the aggregated tree.
*/ */
static void StartProfiling(Handle<String> title, bool record_samples = false); void StartCpuProfiling(Handle<String> title, bool record_samples = false);
/** Deprecated. Use StopCpuProfiling instead. */
static const CpuProfile* StopProfiling(
Handle<String> title,
Handle<Value> security_token = Handle<Value>());
/** /**
* Stops collecting CPU profile with a given title and returns it. * Stops collecting CPU profile with a given title and returns it.
* If the title given is empty, finishes the last profile started. * If the title given is empty, finishes the last profile started.
*/ */
static const CpuProfile* StopProfiling( const CpuProfile* StopCpuProfiling(
Handle<String> title, Handle<String> title,
Handle<Value> security_token = Handle<Value>()); Handle<Value> security_token = Handle<Value>());
/** Deprecated. Use DeleteAllCpuProfiles instead. */
static void DeleteAllProfiles();
/** /**
* Deletes all existing profiles, also cancelling all profiling * Deletes all existing profiles, also cancelling all profiling
* activity. All previously returned pointers to profiles and their * activity. All previously returned pointers to profiles and their
* contents become invalid after this call. * contents become invalid after this call.
*/ */
static void DeleteAllProfiles(); void DeleteAllCpuProfiles();
private:
CpuProfiler();
~CpuProfiler();
CpuProfiler(const CpuProfiler&);
CpuProfiler& operator=(const CpuProfiler&);
}; };
......
...@@ -103,6 +103,7 @@ class Array; ...@@ -103,6 +103,7 @@ class Array;
class Boolean; class Boolean;
class BooleanObject; class BooleanObject;
class Context; class Context;
class CpuProfiler;
class Data; class Data;
class Date; class Date;
class DeclaredAccessorDescriptor; class DeclaredAccessorDescriptor;
...@@ -3029,6 +3030,12 @@ class V8EXPORT Isolate { ...@@ -3029,6 +3030,12 @@ class V8EXPORT Isolate {
*/ */
HeapProfiler* GetHeapProfiler(); HeapProfiler* GetHeapProfiler();
/**
* Returns CPU profiler for this isolate. Will return NULL until the isolate
* is initialized.
*/
CpuProfiler* GetCpuProfiler();
private: private:
Isolate(); Isolate();
Isolate(const Isolate&); Isolate(const Isolate&);
......
...@@ -5806,6 +5806,13 @@ HeapProfiler* Isolate::GetHeapProfiler() { ...@@ -5806,6 +5806,13 @@ HeapProfiler* Isolate::GetHeapProfiler() {
} }
CpuProfiler* Isolate::GetCpuProfiler() {
i::CpuProfiler* cpu_profiler =
reinterpret_cast<i::Isolate*>(this)->cpu_profiler();
return reinterpret_cast<CpuProfiler*>(cpu_profiler);
}
void V8::SetGlobalGCPrologueCallback(GCCallback callback) { void V8::SetGlobalGCPrologueCallback(GCCallback callback) {
i::Isolate* isolate = i::Isolate::Current(); i::Isolate* isolate = i::Isolate::Current();
if (IsDeadCheck(isolate, "v8::V8::SetGlobalGCPrologueCallback()")) return; if (IsDeadCheck(isolate, "v8::V8::SetGlobalGCPrologueCallback()")) return;
...@@ -6539,6 +6546,11 @@ int CpuProfiler::GetProfilesCount() { ...@@ -6539,6 +6546,11 @@ int CpuProfiler::GetProfilesCount() {
} }
int CpuProfiler::GetProfileCount() {
return reinterpret_cast<i::CpuProfiler*>(this)->GetProfilesCount();
}
const CpuProfile* CpuProfiler::GetProfile(int index, const CpuProfile* CpuProfiler::GetProfile(int index,
Handle<Value> security_token) { Handle<Value> security_token) {
i::Isolate* isolate = i::Isolate::Current(); i::Isolate* isolate = i::Isolate::Current();
...@@ -6552,6 +6564,15 @@ const CpuProfile* CpuProfiler::GetProfile(int index, ...@@ -6552,6 +6564,15 @@ const CpuProfile* CpuProfiler::GetProfile(int index,
} }
const CpuProfile* CpuProfiler::GetCpuProfile(int index,
Handle<Value> security_token) {
return reinterpret_cast<const CpuProfile*>(
reinterpret_cast<i::CpuProfiler*>(this)->GetProfile(
security_token.IsEmpty() ? NULL : *Utils::OpenHandle(*security_token),
index));
}
const CpuProfile* CpuProfiler::FindProfile(unsigned uid, const CpuProfile* CpuProfiler::FindProfile(unsigned uid,
Handle<Value> security_token) { Handle<Value> security_token) {
i::Isolate* isolate = i::Isolate::Current(); i::Isolate* isolate = i::Isolate::Current();
...@@ -6565,6 +6586,15 @@ const CpuProfile* CpuProfiler::FindProfile(unsigned uid, ...@@ -6565,6 +6586,15 @@ const CpuProfile* CpuProfiler::FindProfile(unsigned uid,
} }
const CpuProfile* CpuProfiler::FindCpuProfile(unsigned uid,
Handle<Value> security_token) {
return reinterpret_cast<const CpuProfile*>(
reinterpret_cast<i::CpuProfiler*>(this)->FindProfile(
security_token.IsEmpty() ? NULL : *Utils::OpenHandle(*security_token),
uid));
}
void CpuProfiler::StartProfiling(Handle<String> title, bool record_samples) { void CpuProfiler::StartProfiling(Handle<String> title, bool record_samples) {
i::Isolate* isolate = i::Isolate::Current(); i::Isolate* isolate = i::Isolate::Current();
IsDeadCheck(isolate, "v8::CpuProfiler::StartProfiling"); IsDeadCheck(isolate, "v8::CpuProfiler::StartProfiling");
...@@ -6574,6 +6604,12 @@ void CpuProfiler::StartProfiling(Handle<String> title, bool record_samples) { ...@@ -6574,6 +6604,12 @@ void CpuProfiler::StartProfiling(Handle<String> title, bool record_samples) {
} }
void CpuProfiler::StartCpuProfiling(Handle<String> title, bool record_samples) {
reinterpret_cast<i::CpuProfiler*>(this)->StartProfiling(
*Utils::OpenHandle(*title), record_samples);
}
const CpuProfile* CpuProfiler::StopProfiling(Handle<String> title, const CpuProfile* CpuProfiler::StopProfiling(Handle<String> title,
Handle<Value> security_token) { Handle<Value> security_token) {
i::Isolate* isolate = i::Isolate::Current(); i::Isolate* isolate = i::Isolate::Current();
...@@ -6587,6 +6623,15 @@ const CpuProfile* CpuProfiler::StopProfiling(Handle<String> title, ...@@ -6587,6 +6623,15 @@ const CpuProfile* CpuProfiler::StopProfiling(Handle<String> title,
} }
const CpuProfile* CpuProfiler::StopCpuProfiling(Handle<String> title,
Handle<Value> security_token) {
return reinterpret_cast<const CpuProfile*>(
reinterpret_cast<i::CpuProfiler*>(this)->StopProfiling(
security_token.IsEmpty() ? NULL : *Utils::OpenHandle(*security_token),
*Utils::OpenHandle(*title)));
}
void CpuProfiler::DeleteAllProfiles() { void CpuProfiler::DeleteAllProfiles() {
i::Isolate* isolate = i::Isolate::Current(); i::Isolate* isolate = i::Isolate::Current();
IsDeadCheck(isolate, "v8::CpuProfiler::DeleteAllProfiles"); IsDeadCheck(isolate, "v8::CpuProfiler::DeleteAllProfiles");
...@@ -6596,6 +6641,11 @@ void CpuProfiler::DeleteAllProfiles() { ...@@ -6596,6 +6641,11 @@ void CpuProfiler::DeleteAllProfiles() {
} }
void CpuProfiler::DeleteAllCpuProfiles() {
reinterpret_cast<i::CpuProfiler*>(this)->DeleteAllProfiles();
}
static i::HeapGraphEdge* ToInternal(const HeapGraphEdge* edge) { static i::HeapGraphEdge* ToInternal(const HeapGraphEdge* edge) {
return const_cast<i::HeapGraphEdge*>( return const_cast<i::HeapGraphEdge*>(
reinterpret_cast<const i::HeapGraphEdge*>(edge)); reinterpret_cast<const i::HeapGraphEdge*>(edge));
......
...@@ -77,6 +77,7 @@ class Semaphore; ...@@ -77,6 +77,7 @@ class Semaphore;
class Ticker; class Ticker;
class Isolate; class Isolate;
class PositionsRecorder; class PositionsRecorder;
class CpuProfiler;
#undef LOG #undef LOG
#define LOG(isolate, Call) \ #define LOG(isolate, Call) \
......
...@@ -300,100 +300,102 @@ TEST(DeleteAllCpuProfiles) { ...@@ -300,100 +300,102 @@ TEST(DeleteAllCpuProfiles) {
TEST(DeleteCpuProfile) { TEST(DeleteCpuProfile) {
LocalContext env; LocalContext env;
v8::HandleScope scope(env->GetIsolate()); v8::HandleScope scope(env->GetIsolate());
v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
CHECK_EQ(0, v8::CpuProfiler::GetProfilesCount()); CHECK_EQ(0, cpu_profiler->GetProfileCount());
v8::Local<v8::String> name1 = v8::String::New("1"); v8::Local<v8::String> name1 = v8::String::New("1");
v8::CpuProfiler::StartProfiling(name1); cpu_profiler->StartCpuProfiling(name1);
const v8::CpuProfile* p1 = v8::CpuProfiler::StopProfiling(name1); const v8::CpuProfile* p1 = cpu_profiler->StopCpuProfiling(name1);
CHECK_NE(NULL, p1); CHECK_NE(NULL, p1);
CHECK_EQ(1, v8::CpuProfiler::GetProfilesCount()); CHECK_EQ(1, cpu_profiler->GetProfileCount());
unsigned uid1 = p1->GetUid(); unsigned uid1 = p1->GetUid();
CHECK_EQ(p1, v8::CpuProfiler::FindProfile(uid1)); CHECK_EQ(p1, cpu_profiler->FindCpuProfile(uid1));
const_cast<v8::CpuProfile*>(p1)->Delete(); const_cast<v8::CpuProfile*>(p1)->Delete();
CHECK_EQ(0, v8::CpuProfiler::GetProfilesCount()); CHECK_EQ(0, cpu_profiler->GetProfileCount());
CHECK_EQ(NULL, v8::CpuProfiler::FindProfile(uid1)); CHECK_EQ(NULL, cpu_profiler->FindCpuProfile(uid1));
v8::Local<v8::String> name2 = v8::String::New("2"); v8::Local<v8::String> name2 = v8::String::New("2");
v8::CpuProfiler::StartProfiling(name2); cpu_profiler->StartCpuProfiling(name2);
const v8::CpuProfile* p2 = v8::CpuProfiler::StopProfiling(name2); const v8::CpuProfile* p2 = cpu_profiler->StopCpuProfiling(name2);
CHECK_NE(NULL, p2); CHECK_NE(NULL, p2);
CHECK_EQ(1, v8::CpuProfiler::GetProfilesCount()); CHECK_EQ(1, cpu_profiler->GetProfileCount());
unsigned uid2 = p2->GetUid(); unsigned uid2 = p2->GetUid();
CHECK_NE(static_cast<int>(uid1), static_cast<int>(uid2)); CHECK_NE(static_cast<int>(uid1), static_cast<int>(uid2));
CHECK_EQ(p2, v8::CpuProfiler::FindProfile(uid2)); CHECK_EQ(p2, cpu_profiler->FindCpuProfile(uid2));
CHECK_EQ(NULL, v8::CpuProfiler::FindProfile(uid1)); CHECK_EQ(NULL, cpu_profiler->FindCpuProfile(uid1));
v8::Local<v8::String> name3 = v8::String::New("3"); v8::Local<v8::String> name3 = v8::String::New("3");
v8::CpuProfiler::StartProfiling(name3); cpu_profiler->StartCpuProfiling(name3);
const v8::CpuProfile* p3 = v8::CpuProfiler::StopProfiling(name3); const v8::CpuProfile* p3 = cpu_profiler->StopCpuProfiling(name3);
CHECK_NE(NULL, p3); CHECK_NE(NULL, p3);
CHECK_EQ(2, v8::CpuProfiler::GetProfilesCount()); CHECK_EQ(2, cpu_profiler->GetProfileCount());
unsigned uid3 = p3->GetUid(); unsigned uid3 = p3->GetUid();
CHECK_NE(static_cast<int>(uid1), static_cast<int>(uid3)); CHECK_NE(static_cast<int>(uid1), static_cast<int>(uid3));
CHECK_EQ(p3, v8::CpuProfiler::FindProfile(uid3)); CHECK_EQ(p3, cpu_profiler->FindCpuProfile(uid3));
CHECK_EQ(NULL, v8::CpuProfiler::FindProfile(uid1)); CHECK_EQ(NULL, cpu_profiler->FindCpuProfile(uid1));
const_cast<v8::CpuProfile*>(p2)->Delete(); const_cast<v8::CpuProfile*>(p2)->Delete();
CHECK_EQ(1, v8::CpuProfiler::GetProfilesCount()); CHECK_EQ(1, cpu_profiler->GetProfileCount());
CHECK_EQ(NULL, v8::CpuProfiler::FindProfile(uid2)); CHECK_EQ(NULL, cpu_profiler->FindCpuProfile(uid2));
CHECK_EQ(p3, v8::CpuProfiler::FindProfile(uid3)); CHECK_EQ(p3, cpu_profiler->FindCpuProfile(uid3));
const_cast<v8::CpuProfile*>(p3)->Delete(); const_cast<v8::CpuProfile*>(p3)->Delete();
CHECK_EQ(0, v8::CpuProfiler::GetProfilesCount()); CHECK_EQ(0, cpu_profiler->GetProfileCount());
CHECK_EQ(NULL, v8::CpuProfiler::FindProfile(uid3)); CHECK_EQ(NULL, cpu_profiler->FindCpuProfile(uid3));
CHECK_EQ(NULL, v8::CpuProfiler::FindProfile(uid2)); CHECK_EQ(NULL, cpu_profiler->FindCpuProfile(uid2));
CHECK_EQ(NULL, v8::CpuProfiler::FindProfile(uid1)); CHECK_EQ(NULL, cpu_profiler->FindCpuProfile(uid1));
} }
TEST(DeleteCpuProfileDifferentTokens) { TEST(DeleteCpuProfileDifferentTokens) {
LocalContext env; LocalContext env;
v8::HandleScope scope(env->GetIsolate()); v8::HandleScope scope(env->GetIsolate());
v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
CHECK_EQ(0, v8::CpuProfiler::GetProfilesCount()); CHECK_EQ(0, cpu_profiler->GetProfileCount());
v8::Local<v8::String> name1 = v8::String::New("1"); v8::Local<v8::String> name1 = v8::String::New("1");
v8::CpuProfiler::StartProfiling(name1); cpu_profiler->StartCpuProfiling(name1);
const v8::CpuProfile* p1 = v8::CpuProfiler::StopProfiling(name1); const v8::CpuProfile* p1 = cpu_profiler->StopCpuProfiling(name1);
CHECK_NE(NULL, p1); CHECK_NE(NULL, p1);
CHECK_EQ(1, v8::CpuProfiler::GetProfilesCount()); CHECK_EQ(1, cpu_profiler->GetProfileCount());
unsigned uid1 = p1->GetUid(); unsigned uid1 = p1->GetUid();
CHECK_EQ(p1, v8::CpuProfiler::FindProfile(uid1)); CHECK_EQ(p1, cpu_profiler->FindCpuProfile(uid1));
v8::Local<v8::String> token1 = v8::String::New("token1"); v8::Local<v8::String> token1 = v8::String::New("token1");
const v8::CpuProfile* p1_t1 = v8::CpuProfiler::FindProfile(uid1, token1); const v8::CpuProfile* p1_t1 = cpu_profiler->FindCpuProfile(uid1, token1);
CHECK_NE(NULL, p1_t1); CHECK_NE(NULL, p1_t1);
CHECK_NE(p1, p1_t1); CHECK_NE(p1, p1_t1);
CHECK_EQ(1, v8::CpuProfiler::GetProfilesCount()); CHECK_EQ(1, cpu_profiler->GetProfileCount());
const_cast<v8::CpuProfile*>(p1)->Delete(); const_cast<v8::CpuProfile*>(p1)->Delete();
CHECK_EQ(0, v8::CpuProfiler::GetProfilesCount()); CHECK_EQ(0, cpu_profiler->GetProfileCount());
CHECK_EQ(NULL, v8::CpuProfiler::FindProfile(uid1)); CHECK_EQ(NULL, cpu_profiler->FindCpuProfile(uid1));
CHECK_EQ(NULL, v8::CpuProfiler::FindProfile(uid1, token1)); CHECK_EQ(NULL, cpu_profiler->FindCpuProfile(uid1, token1));
const_cast<v8::CpuProfile*>(p1_t1)->Delete(); const_cast<v8::CpuProfile*>(p1_t1)->Delete();
CHECK_EQ(0, v8::CpuProfiler::GetProfilesCount()); CHECK_EQ(0, cpu_profiler->GetProfileCount());
v8::Local<v8::String> name2 = v8::String::New("2"); v8::Local<v8::String> name2 = v8::String::New("2");
v8::CpuProfiler::StartProfiling(name2); cpu_profiler->StartCpuProfiling(name2);
v8::Local<v8::String> token2 = v8::String::New("token2"); v8::Local<v8::String> token2 = v8::String::New("token2");
const v8::CpuProfile* p2_t2 = v8::CpuProfiler::StopProfiling(name2, token2); const v8::CpuProfile* p2_t2 = cpu_profiler->StopCpuProfiling(name2, token2);
CHECK_NE(NULL, p2_t2); CHECK_NE(NULL, p2_t2);
CHECK_EQ(1, v8::CpuProfiler::GetProfilesCount()); CHECK_EQ(1, cpu_profiler->GetProfileCount());
unsigned uid2 = p2_t2->GetUid(); unsigned uid2 = p2_t2->GetUid();
CHECK_NE(static_cast<int>(uid1), static_cast<int>(uid2)); CHECK_NE(static_cast<int>(uid1), static_cast<int>(uid2));
const v8::CpuProfile* p2 = v8::CpuProfiler::FindProfile(uid2); const v8::CpuProfile* p2 = cpu_profiler->FindCpuProfile(uid2);
CHECK_NE(p2_t2, p2); CHECK_NE(p2_t2, p2);
v8::Local<v8::String> name3 = v8::String::New("3"); v8::Local<v8::String> name3 = v8::String::New("3");
v8::CpuProfiler::StartProfiling(name3); cpu_profiler->StartCpuProfiling(name3);
const v8::CpuProfile* p3 = v8::CpuProfiler::StopProfiling(name3); const v8::CpuProfile* p3 = cpu_profiler->StopCpuProfiling(name3);
CHECK_NE(NULL, p3); CHECK_NE(NULL, p3);
CHECK_EQ(2, v8::CpuProfiler::GetProfilesCount()); CHECK_EQ(2, cpu_profiler->GetProfileCount());
unsigned uid3 = p3->GetUid(); unsigned uid3 = p3->GetUid();
CHECK_NE(static_cast<int>(uid1), static_cast<int>(uid3)); CHECK_NE(static_cast<int>(uid1), static_cast<int>(uid3));
CHECK_EQ(p3, v8::CpuProfiler::FindProfile(uid3)); CHECK_EQ(p3, cpu_profiler->FindCpuProfile(uid3));
const_cast<v8::CpuProfile*>(p2_t2)->Delete(); const_cast<v8::CpuProfile*>(p2_t2)->Delete();
CHECK_EQ(1, v8::CpuProfiler::GetProfilesCount()); CHECK_EQ(1, cpu_profiler->GetProfileCount());
CHECK_EQ(NULL, v8::CpuProfiler::FindProfile(uid2)); CHECK_EQ(NULL, cpu_profiler->FindCpuProfile(uid2));
CHECK_EQ(p3, v8::CpuProfiler::FindProfile(uid3)); CHECK_EQ(p3, cpu_profiler->FindCpuProfile(uid3));
const_cast<v8::CpuProfile*>(p2)->Delete(); const_cast<v8::CpuProfile*>(p2)->Delete();
CHECK_EQ(1, v8::CpuProfiler::GetProfilesCount()); CHECK_EQ(1, cpu_profiler->GetProfileCount());
CHECK_EQ(NULL, v8::CpuProfiler::FindProfile(uid2)); CHECK_EQ(NULL, cpu_profiler->FindCpuProfile(uid2));
CHECK_EQ(p3, v8::CpuProfiler::FindProfile(uid3)); CHECK_EQ(p3, cpu_profiler->FindCpuProfile(uid3));
const_cast<v8::CpuProfile*>(p3)->Delete(); const_cast<v8::CpuProfile*>(p3)->Delete();
CHECK_EQ(0, v8::CpuProfiler::GetProfilesCount()); CHECK_EQ(0, cpu_profiler->GetProfileCount());
CHECK_EQ(NULL, v8::CpuProfiler::FindProfile(uid3)); CHECK_EQ(NULL, cpu_profiler->FindCpuProfile(uid3));
} }
...@@ -830,20 +830,22 @@ v8::Handle<v8::FunctionTemplate> ProfilerExtension::GetNativeFunction( ...@@ -830,20 +830,22 @@ v8::Handle<v8::FunctionTemplate> ProfilerExtension::GetNativeFunction(
v8::Handle<v8::Value> ProfilerExtension::StartProfiling( v8::Handle<v8::Value> ProfilerExtension::StartProfiling(
const v8::Arguments& args) { const v8::Arguments& args) {
v8::CpuProfiler* cpu_profiler = args.GetIsolate()->GetCpuProfiler();
if (args.Length() > 0) if (args.Length() > 0)
v8::CpuProfiler::StartProfiling(args[0].As<v8::String>()); cpu_profiler->StartCpuProfiling(args[0].As<v8::String>());
else else
v8::CpuProfiler::StartProfiling(v8::String::New("")); cpu_profiler->StartCpuProfiling(v8::String::New(""));
return v8::Undefined(); return v8::Undefined();
} }
v8::Handle<v8::Value> ProfilerExtension::StopProfiling( v8::Handle<v8::Value> ProfilerExtension::StopProfiling(
const v8::Arguments& args) { const v8::Arguments& args) {
v8::CpuProfiler* cpu_profiler = args.GetIsolate()->GetCpuProfiler();
if (args.Length() > 0) if (args.Length() > 0)
v8::CpuProfiler::StopProfiling(args[0].As<v8::String>()); cpu_profiler->StopCpuProfiling(args[0].As<v8::String>());
else else
v8::CpuProfiler::StopProfiling(v8::String::New("")); cpu_profiler->StopCpuProfiling(v8::String::New(""));
return v8::Undefined(); return v8::Undefined();
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment