| Index: test/cctest/test-cpu-profiler.cc
|
| diff --git a/test/cctest/test-cpu-profiler.cc b/test/cctest/test-cpu-profiler.cc
|
| index a99389f5abdcd4eea33665bbe87fa92c27069afb..c61a02482fd748d9d7ca539869c5cd8e8ee98248 100644
|
| --- a/test/cctest/test-cpu-profiler.cc
|
| +++ b/test/cctest/test-cpu-profiler.cc
|
| @@ -472,6 +472,33 @@ TEST(GetProfilerWhenIsolateIsNotInitialized) {
|
| }
|
|
|
|
|
| +static const v8::CpuProfile* RunProfiler(
|
| + LocalContext& env, v8::Handle<v8::Function> function,
|
| + v8::Handle<v8::Value> argv[], int argc,
|
| + unsigned min_js_samples) {
|
| + v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
|
| + v8::Local<v8::String> profile_name = v8::String::New("my_profile");
|
| +
|
| + cpu_profiler->StartCpuProfiling(profile_name);
|
| +
|
| + i::Sampler* sampler =
|
| + reinterpret_cast<i::Isolate*>(env->GetIsolate())->logger()->sampler();
|
| + sampler->StartCountingSamples();
|
| + do {
|
| + function->Call(env->Global(), argc, argv);
|
| + } while (sampler->js_and_external_sample_count() < min_js_samples);
|
| +
|
| + const v8::CpuProfile* profile = cpu_profiler->StopCpuProfiling(profile_name);
|
| +
|
| + CHECK_NE(NULL, profile);
|
| + // Dump collected profile to have a better diagnostic in case of failure.
|
| + reinterpret_cast<i::CpuProfile*>(
|
| + const_cast<v8::CpuProfile*>(profile))->Print();
|
| +
|
| + return profile;
|
| +}
|
| +
|
| +
|
| static bool ContainsString(v8::Handle<v8::String> string,
|
| const Vector<v8::Handle<v8::String> >& vector) {
|
| for (int i = 0; i < vector.length(); i++) {
|
| @@ -585,24 +612,11 @@ TEST(CollectCpuProfile) {
|
| v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(
|
| env->Global()->Get(v8::String::New("start")));
|
|
|
| - v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
|
| - v8::Local<v8::String> profile_name = v8::String::New("my_profile");
|
| -
|
| - cpu_profiler->StartCpuProfiling(profile_name);
|
| int32_t profiling_interval_ms = 200;
|
| -#if defined(_WIN32) || defined(_WIN64)
|
| - // 200ms is not enough on Windows. See
|
| - // https://code.google.com/p/v8/issues/detail?id=2628
|
| - profiling_interval_ms = 500;
|
| -#endif
|
| v8::Handle<v8::Value> args[] = { v8::Integer::New(profiling_interval_ms) };
|
| + const v8::CpuProfile* profile =
|
| + RunProfiler(env, function, args, ARRAY_SIZE(args), 200);
|
| function->Call(env->Global(), ARRAY_SIZE(args), args);
|
| - const v8::CpuProfile* profile = cpu_profiler->StopCpuProfiling(profile_name);
|
| -
|
| - CHECK_NE(NULL, profile);
|
| - // Dump collected profile to have a better diagnostic in case of failure.
|
| - reinterpret_cast<i::CpuProfile*>(
|
| - const_cast<v8::CpuProfile*>(profile))->Print();
|
|
|
| const v8::CpuProfileNode* root = profile->GetTopDownRoot();
|
|
|
| @@ -625,6 +639,7 @@ TEST(CollectCpuProfile) {
|
| const char* delayBranch[] = { "delay", "loop" };
|
| CheckSimpleBranch(fooNode, delayBranch, ARRAY_SIZE(delayBranch));
|
|
|
| + v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
|
| cpu_profiler->DeleteAllCpuProfiles();
|
| }
|
|
|
| @@ -658,23 +673,14 @@ TEST(SampleWhenFrameIsNotSetup) {
|
| v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(
|
| env->Global()->Get(v8::String::New("start")));
|
|
|
| - v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
|
| - v8::Local<v8::String> profile_name = v8::String::New("my_profile");
|
| -
|
| - cpu_profiler->StartCpuProfiling(profile_name);
|
| int32_t repeat_count = 100;
|
| #if defined(USE_SIMULATOR)
|
| // Simulators are much slower.
|
| repeat_count = 1;
|
| #endif
|
| v8::Handle<v8::Value> args[] = { v8::Integer::New(repeat_count) };
|
| - function->Call(env->Global(), ARRAY_SIZE(args), args);
|
| - const v8::CpuProfile* profile = cpu_profiler->StopCpuProfiling(profile_name);
|
| -
|
| - CHECK_NE(NULL, profile);
|
| - // Dump collected profile to have a better diagnostic in case of failure.
|
| - reinterpret_cast<i::CpuProfile*>(
|
| - const_cast<v8::CpuProfile*>(profile))->Print();
|
| + const v8::CpuProfile* profile =
|
| + RunProfiler(env, function, args, ARRAY_SIZE(args), 100);
|
|
|
| const v8::CpuProfileNode* root = profile->GetTopDownRoot();
|
|
|
| @@ -696,6 +702,7 @@ TEST(SampleWhenFrameIsNotSetup) {
|
| }
|
| }
|
|
|
| + v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
|
| cpu_profiler->DeleteAllCpuProfiles();
|
| }
|
|
|
| @@ -788,25 +795,17 @@ TEST(NativeAccessorUninitializedIC) {
|
| v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(
|
| env->Global()->Get(v8::String::New("start")));
|
|
|
| - v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
|
| - v8::Local<v8::String> profile_name = v8::String::New("my_profile");
|
| -
|
| - cpu_profiler->StartCpuProfiling(profile_name);
|
| int32_t repeat_count = 1;
|
| v8::Handle<v8::Value> args[] = { v8::Integer::New(repeat_count) };
|
| - function->Call(env->Global(), ARRAY_SIZE(args), args);
|
| - const v8::CpuProfile* profile = cpu_profiler->StopCpuProfiling(profile_name);
|
| -
|
| - CHECK_NE(NULL, profile);
|
| - // Dump collected profile to have a better diagnostic in case of failure.
|
| - reinterpret_cast<i::CpuProfile*>(
|
| - const_cast<v8::CpuProfile*>(profile))->Print();
|
| + const v8::CpuProfile* profile =
|
| + RunProfiler(env, function, args, ARRAY_SIZE(args), 180);
|
|
|
| const v8::CpuProfileNode* root = profile->GetTopDownRoot();
|
| const v8::CpuProfileNode* startNode = GetChild(root, "start");
|
| GetChild(startNode, "get foo");
|
| GetChild(startNode, "set foo");
|
|
|
| + v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
|
| cpu_profiler->DeleteAllCpuProfiles();
|
| }
|
|
|
| @@ -846,25 +845,17 @@ TEST(NativeAccessorMonomorphicIC) {
|
| accessors.set_warming_up(false);
|
| }
|
|
|
| - v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
|
| - v8::Local<v8::String> profile_name = v8::String::New("my_profile");
|
| -
|
| - cpu_profiler->StartCpuProfiling(profile_name);
|
| int32_t repeat_count = 100;
|
| v8::Handle<v8::Value> args[] = { v8::Integer::New(repeat_count) };
|
| - function->Call(env->Global(), ARRAY_SIZE(args), args);
|
| - const v8::CpuProfile* profile = cpu_profiler->StopCpuProfiling(profile_name);
|
| -
|
| - CHECK_NE(NULL, profile);
|
| - // Dump collected profile to have a better diagnostic in case of failure.
|
| - reinterpret_cast<i::CpuProfile*>(
|
| - const_cast<v8::CpuProfile*>(profile))->Print();
|
| + const v8::CpuProfile* profile =
|
| + RunProfiler(env, function, args, ARRAY_SIZE(args), 200);
|
|
|
| const v8::CpuProfileNode* root = profile->GetTopDownRoot();
|
| const v8::CpuProfileNode* startNode = GetChild(root, "start");
|
| GetChild(startNode, "get foo");
|
| GetChild(startNode, "set foo");
|
|
|
| + v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
|
| cpu_profiler->DeleteAllCpuProfiles();
|
| }
|
|
|
| @@ -899,24 +890,16 @@ TEST(NativeMethodUninitializedIC) {
|
| v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(
|
| env->Global()->Get(v8::String::New("start")));
|
|
|
| - v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
|
| - v8::Local<v8::String> profile_name = v8::String::New("my_profile");
|
| -
|
| - cpu_profiler->StartCpuProfiling(profile_name);
|
| int32_t repeat_count = 1;
|
| v8::Handle<v8::Value> args[] = { v8::Integer::New(repeat_count) };
|
| - function->Call(env->Global(), ARRAY_SIZE(args), args);
|
| - const v8::CpuProfile* profile = cpu_profiler->StopCpuProfiling(profile_name);
|
| -
|
| - CHECK_NE(NULL, profile);
|
| - // Dump collected profile to have a better diagnostic in case of failure.
|
| - reinterpret_cast<i::CpuProfile*>(
|
| - const_cast<v8::CpuProfile*>(profile))->Print();
|
| + const v8::CpuProfile* profile =
|
| + RunProfiler(env, function, args, ARRAY_SIZE(args), 100);
|
|
|
| const v8::CpuProfileNode* root = profile->GetTopDownRoot();
|
| const v8::CpuProfileNode* startNode = GetChild(root, "start");
|
| GetChild(startNode, "fooMethod");
|
|
|
| + v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
|
| cpu_profiler->DeleteAllCpuProfiles();
|
| }
|
|
|
| @@ -953,25 +936,17 @@ TEST(NativeMethodMonomorphicIC) {
|
| callbacks.set_warming_up(false);
|
| }
|
|
|
| - v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
|
| - v8::Local<v8::String> profile_name = v8::String::New("my_profile");
|
| -
|
| - cpu_profiler->StartCpuProfiling(profile_name);
|
| int32_t repeat_count = 100;
|
| v8::Handle<v8::Value> args[] = { v8::Integer::New(repeat_count) };
|
| - function->Call(env->Global(), ARRAY_SIZE(args), args);
|
| - const v8::CpuProfile* profile = cpu_profiler->StopCpuProfiling(profile_name);
|
| -
|
| - CHECK_NE(NULL, profile);
|
| - // Dump collected profile to have a better diagnostic in case of failure.
|
| - reinterpret_cast<i::CpuProfile*>(
|
| - const_cast<v8::CpuProfile*>(profile))->Print();
|
| + const v8::CpuProfile* profile =
|
| + RunProfiler(env, function, args, ARRAY_SIZE(args), 100);
|
|
|
| const v8::CpuProfileNode* root = profile->GetTopDownRoot();
|
| GetChild(root, "start");
|
| const v8::CpuProfileNode* startNode = GetChild(root, "start");
|
| GetChild(startNode, "fooMethod");
|
|
|
| + v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
|
| cpu_profiler->DeleteAllCpuProfiles();
|
| }
|
|
|
| @@ -998,19 +973,10 @@ TEST(BoundFunctionCall) {
|
| v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(
|
| env->Global()->Get(v8::String::New("start")));
|
|
|
| - v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
|
| - v8::Local<v8::String> profile_name = v8::String::New("my_profile");
|
| -
|
| - cpu_profiler->StartCpuProfiling(profile_name);
|
| int32_t duration_ms = 100;
|
| v8::Handle<v8::Value> args[] = { v8::Integer::New(duration_ms) };
|
| - function->Call(env->Global(), ARRAY_SIZE(args), args);
|
| - const v8::CpuProfile* profile = cpu_profiler->StopCpuProfiling(profile_name);
|
| -
|
| - CHECK_NE(NULL, profile);
|
| - // Dump collected profile to have a better diagnostic in case of failure.
|
| - reinterpret_cast<i::CpuProfile*>(
|
| - const_cast<v8::CpuProfile*>(profile))->Print();
|
| + const v8::CpuProfile* profile =
|
| + RunProfiler(env, function, args, ARRAY_SIZE(args), 100);
|
|
|
| const v8::CpuProfileNode* root = profile->GetTopDownRoot();
|
| ScopedVector<v8::Handle<v8::String> > names(3);
|
| @@ -1023,6 +989,7 @@ TEST(BoundFunctionCall) {
|
| const v8::CpuProfileNode* startNode = GetChild(root, "start");
|
| GetChild(startNode, "foo");
|
|
|
| + v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
|
| cpu_profiler->DeleteAllCpuProfiles();
|
| }
|
|
|
| @@ -1059,24 +1026,11 @@ TEST(FunctionCallSample) {
|
| v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(
|
| env->Global()->Get(v8::String::New("start")));
|
|
|
| - v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
|
| - v8::Local<v8::String> profile_name = v8::String::New("my_profile");
|
| -
|
| - cpu_profiler->StartCpuProfiling(profile_name);
|
| int32_t duration_ms = 100;
|
| -#if defined(_WIN32) || defined(_WIN64)
|
| - // 100ms is not enough on Windows. See
|
| - // https://code.google.com/p/v8/issues/detail?id=2628
|
| - duration_ms = 400;
|
| -#endif
|
| v8::Handle<v8::Value> args[] = { v8::Integer::New(duration_ms) };
|
| - function->Call(env->Global(), ARRAY_SIZE(args), args);
|
| - const v8::CpuProfile* profile = cpu_profiler->StopCpuProfiling(profile_name);
|
|
|
| - CHECK_NE(NULL, profile);
|
| - // Dump collected profile to have a better diagnostic in case of failure.
|
| - reinterpret_cast<i::CpuProfile*>(
|
| - const_cast<v8::CpuProfile*>(profile))->Print();
|
| + const v8::CpuProfile* profile =
|
| + RunProfiler(env, function, args, ARRAY_SIZE(args), 100);
|
|
|
| const v8::CpuProfileNode* root = profile->GetTopDownRoot();
|
| {
|
| @@ -1110,6 +1064,7 @@ TEST(FunctionCallSample) {
|
| CheckChildrenNames(unresolvedNode, names);
|
| }
|
|
|
| + v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
|
| cpu_profiler->DeleteAllCpuProfiles();
|
| }
|
|
|
| @@ -1147,24 +1102,10 @@ TEST(FunctionApplySample) {
|
| v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(
|
| env->Global()->Get(v8::String::New("start")));
|
|
|
| - v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
|
| - v8::Local<v8::String> profile_name = v8::String::New("my_profile");
|
| -
|
| - cpu_profiler->StartCpuProfiling(profile_name);
|
| int32_t duration_ms = 100;
|
| -#if defined(_WIN32) || defined(_WIN64)
|
| - // 100ms is not enough on Windows. See
|
| - // https://code.google.com/p/v8/issues/detail?id=2628
|
| - duration_ms = 400;
|
| -#endif
|
| v8::Handle<v8::Value> args[] = { v8::Integer::New(duration_ms) };
|
| - function->Call(env->Global(), ARRAY_SIZE(args), args);
|
| - const v8::CpuProfile* profile = cpu_profiler->StopCpuProfiling(profile_name);
|
| -
|
| - CHECK_NE(NULL, profile);
|
| - // Dump collected profile to have a better diagnostic in case of failure.
|
| - reinterpret_cast<i::CpuProfile*>(
|
| - const_cast<v8::CpuProfile*>(profile))->Print();
|
| + const v8::CpuProfile* profile =
|
| + RunProfiler(env, function, args, ARRAY_SIZE(args), 100);
|
|
|
| const v8::CpuProfileNode* root = profile->GetTopDownRoot();
|
| {
|
| @@ -1202,5 +1143,6 @@ TEST(FunctionApplySample) {
|
| }
|
| }
|
|
|
| + v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
|
| cpu_profiler->DeleteAllCpuProfiles();
|
| }
|
|
|