OLD | NEW |
1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 } | 64 } |
65 | 65 |
66 static const char* reason(const i::Deoptimizer::DeoptReason reason) { | 66 static const char* reason(const i::Deoptimizer::DeoptReason reason) { |
67 return i::Deoptimizer::GetDeoptReason(reason); | 67 return i::Deoptimizer::GetDeoptReason(reason); |
68 } | 68 } |
69 | 69 |
70 TEST(StartStop) { | 70 TEST(StartStop) { |
71 CpuProfilesCollection profiles(CcTest::i_isolate()); | 71 CpuProfilesCollection profiles(CcTest::i_isolate()); |
72 ProfileGenerator generator(&profiles); | 72 ProfileGenerator generator(&profiles); |
73 std::unique_ptr<ProfilerEventsProcessor> processor( | 73 std::unique_ptr<ProfilerEventsProcessor> processor( |
74 new ProfilerEventsProcessor(&generator, nullptr, | 74 new ProfilerEventsProcessor(CcTest::i_isolate(), &generator, |
75 v8::base::TimeDelta::FromMicroseconds(100))); | 75 v8::base::TimeDelta::FromMicroseconds(100))); |
76 processor->Start(); | 76 processor->Start(); |
77 processor->StopSynchronously(); | 77 processor->StopSynchronously(); |
78 } | 78 } |
79 | 79 |
80 static void EnqueueTickSampleEvent(ProfilerEventsProcessor* proc, | 80 static void EnqueueTickSampleEvent(ProfilerEventsProcessor* proc, |
81 i::Address frame1, | 81 i::Address frame1, |
82 i::Address frame2 = NULL, | 82 i::Address frame2 = NULL, |
83 i::Address frame3 = NULL) { | 83 i::Address frame3 = NULL) { |
84 i::TickSample* sample = proc->StartTickSample(); | 84 i::TickSample* sample = proc->StartTickSample(); |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
148 i::AbstractCode* aaa_code = CreateCode(&env); | 148 i::AbstractCode* aaa_code = CreateCode(&env); |
149 i::AbstractCode* comment_code = CreateCode(&env); | 149 i::AbstractCode* comment_code = CreateCode(&env); |
150 i::AbstractCode* args5_code = CreateCode(&env); | 150 i::AbstractCode* args5_code = CreateCode(&env); |
151 i::AbstractCode* comment2_code = CreateCode(&env); | 151 i::AbstractCode* comment2_code = CreateCode(&env); |
152 i::AbstractCode* moved_code = CreateCode(&env); | 152 i::AbstractCode* moved_code = CreateCode(&env); |
153 i::AbstractCode* args3_code = CreateCode(&env); | 153 i::AbstractCode* args3_code = CreateCode(&env); |
154 i::AbstractCode* args4_code = CreateCode(&env); | 154 i::AbstractCode* args4_code = CreateCode(&env); |
155 | 155 |
156 CpuProfilesCollection* profiles = new CpuProfilesCollection(isolate); | 156 CpuProfilesCollection* profiles = new CpuProfilesCollection(isolate); |
157 ProfileGenerator* generator = new ProfileGenerator(profiles); | 157 ProfileGenerator* generator = new ProfileGenerator(profiles); |
158 ProfilerEventsProcessor* processor = new ProfilerEventsProcessor( | 158 ProfilerEventsProcessor* processor = |
159 generator, nullptr, v8::base::TimeDelta::FromMicroseconds(100)); | 159 new ProfilerEventsProcessor(CcTest::i_isolate(), generator, |
| 160 v8::base::TimeDelta::FromMicroseconds(100)); |
160 CpuProfiler profiler(isolate, profiles, generator, processor); | 161 CpuProfiler profiler(isolate, profiles, generator, processor); |
161 profiles->StartProfiling("", false); | 162 profiles->StartProfiling("", false); |
162 processor->Start(); | 163 processor->Start(); |
163 ProfilerListener profiler_listener(isolate); | 164 ProfilerListener profiler_listener(isolate); |
164 isolate->code_event_dispatcher()->AddListener(&profiler_listener); | 165 isolate->code_event_dispatcher()->AddListener(&profiler_listener); |
165 profiler_listener.AddObserver(&profiler); | 166 profiler_listener.AddObserver(&profiler); |
166 | 167 |
167 // Enqueue code creation events. | 168 // Enqueue code creation events. |
168 const char* aaa_str = "aaa"; | 169 const char* aaa_str = "aaa"; |
169 i::Handle<i::String> aaa_name = factory->NewStringFromAsciiChecked(aaa_str); | 170 i::Handle<i::String> aaa_name = factory->NewStringFromAsciiChecked(aaa_str); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
216 LocalContext env; | 217 LocalContext env; |
217 i::Isolate* isolate = CcTest::i_isolate(); | 218 i::Isolate* isolate = CcTest::i_isolate(); |
218 i::HandleScope scope(isolate); | 219 i::HandleScope scope(isolate); |
219 | 220 |
220 i::AbstractCode* frame1_code = CreateCode(&env); | 221 i::AbstractCode* frame1_code = CreateCode(&env); |
221 i::AbstractCode* frame2_code = CreateCode(&env); | 222 i::AbstractCode* frame2_code = CreateCode(&env); |
222 i::AbstractCode* frame3_code = CreateCode(&env); | 223 i::AbstractCode* frame3_code = CreateCode(&env); |
223 | 224 |
224 CpuProfilesCollection* profiles = new CpuProfilesCollection(isolate); | 225 CpuProfilesCollection* profiles = new CpuProfilesCollection(isolate); |
225 ProfileGenerator* generator = new ProfileGenerator(profiles); | 226 ProfileGenerator* generator = new ProfileGenerator(profiles); |
226 ProfilerEventsProcessor* processor = new ProfilerEventsProcessor( | 227 ProfilerEventsProcessor* processor = |
227 generator, nullptr, v8::base::TimeDelta::FromMicroseconds(100)); | 228 new ProfilerEventsProcessor(CcTest::i_isolate(), generator, |
| 229 v8::base::TimeDelta::FromMicroseconds(100)); |
228 CpuProfiler profiler(isolate, profiles, generator, processor); | 230 CpuProfiler profiler(isolate, profiles, generator, processor); |
229 profiles->StartProfiling("", false); | 231 profiles->StartProfiling("", false); |
230 processor->Start(); | 232 processor->Start(); |
231 ProfilerListener profiler_listener(isolate); | 233 ProfilerListener profiler_listener(isolate); |
232 isolate->code_event_dispatcher()->AddListener(&profiler_listener); | 234 isolate->code_event_dispatcher()->AddListener(&profiler_listener); |
233 profiler_listener.AddObserver(&profiler); | 235 profiler_listener.AddObserver(&profiler); |
234 | 236 |
235 profiler_listener.CodeCreateEvent(i::Logger::BUILTIN_TAG, frame1_code, "bbb"); | 237 profiler_listener.CodeCreateEvent(i::Logger::BUILTIN_TAG, frame1_code, "bbb"); |
236 profiler_listener.CodeCreateEvent(i::Logger::STUB_TAG, frame2_code, 5); | 238 profiler_listener.CodeCreateEvent(i::Logger::STUB_TAG, frame2_code, 5); |
237 profiler_listener.CodeCreateEvent(i::Logger::BUILTIN_TAG, frame3_code, "ddd"); | 239 profiler_listener.CodeCreateEvent(i::Logger::BUILTIN_TAG, frame3_code, "ddd"); |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
288 TEST(Issue1398) { | 290 TEST(Issue1398) { |
289 TestSetup test_setup; | 291 TestSetup test_setup; |
290 LocalContext env; | 292 LocalContext env; |
291 i::Isolate* isolate = CcTest::i_isolate(); | 293 i::Isolate* isolate = CcTest::i_isolate(); |
292 i::HandleScope scope(isolate); | 294 i::HandleScope scope(isolate); |
293 | 295 |
294 i::AbstractCode* code = CreateCode(&env); | 296 i::AbstractCode* code = CreateCode(&env); |
295 | 297 |
296 CpuProfilesCollection* profiles = new CpuProfilesCollection(isolate); | 298 CpuProfilesCollection* profiles = new CpuProfilesCollection(isolate); |
297 ProfileGenerator* generator = new ProfileGenerator(profiles); | 299 ProfileGenerator* generator = new ProfileGenerator(profiles); |
298 ProfilerEventsProcessor* processor = new ProfilerEventsProcessor( | 300 ProfilerEventsProcessor* processor = |
299 generator, nullptr, v8::base::TimeDelta::FromMicroseconds(100)); | 301 new ProfilerEventsProcessor(CcTest::i_isolate(), generator, |
| 302 v8::base::TimeDelta::FromMicroseconds(100)); |
300 CpuProfiler profiler(isolate, profiles, generator, processor); | 303 CpuProfiler profiler(isolate, profiles, generator, processor); |
301 profiles->StartProfiling("", false); | 304 profiles->StartProfiling("", false); |
302 processor->Start(); | 305 processor->Start(); |
303 ProfilerListener profiler_listener(isolate); | 306 ProfilerListener profiler_listener(isolate); |
304 isolate->code_event_dispatcher()->AddListener(&profiler_listener); | 307 isolate->code_event_dispatcher()->AddListener(&profiler_listener); |
305 profiler_listener.AddObserver(&profiler); | 308 profiler_listener.AddObserver(&profiler); |
306 | 309 |
307 profiler_listener.CodeCreateEvent(i::Logger::BUILTIN_TAG, code, "bbb"); | 310 profiler_listener.CodeCreateEvent(i::Logger::BUILTIN_TAG, code, "bbb"); |
308 | 311 |
309 i::TickSample* sample = processor->StartTickSample(); | 312 i::TickSample* sample = processor->StartTickSample(); |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
430 v8::Local<v8::Value> argv[], int argc, | 433 v8::Local<v8::Value> argv[], int argc, |
431 unsigned min_js_samples = 0, | 434 unsigned min_js_samples = 0, |
432 unsigned min_external_samples = 0, | 435 unsigned min_external_samples = 0, |
433 bool collect_samples = false) { | 436 bool collect_samples = false) { |
434 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler(); | 437 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler(); |
435 v8::Local<v8::String> profile_name = v8_str("my_profile"); | 438 v8::Local<v8::String> profile_name = v8_str("my_profile"); |
436 | 439 |
437 cpu_profiler->SetSamplingInterval(100); | 440 cpu_profiler->SetSamplingInterval(100); |
438 cpu_profiler->StartProfiling(profile_name, collect_samples); | 441 cpu_profiler->StartProfiling(profile_name, collect_samples); |
439 | 442 |
440 v8::sampler::Sampler* sampler = | 443 v8::internal::CpuProfiler* i_cpu_profiler = |
441 reinterpret_cast<i::Isolate*>(env->GetIsolate())->logger()->sampler(); | 444 reinterpret_cast<v8::internal::CpuProfiler*>(cpu_profiler); |
| 445 v8::sampler::Sampler* sampler = i_cpu_profiler->processor()->sampler(); |
442 sampler->StartCountingSamples(); | 446 sampler->StartCountingSamples(); |
443 do { | 447 do { |
444 function->Call(env, env->Global(), argc, argv).ToLocalChecked(); | 448 function->Call(env, env->Global(), argc, argv).ToLocalChecked(); |
445 } while (sampler->js_sample_count() < min_js_samples || | 449 } while (sampler->js_sample_count() < min_js_samples || |
446 sampler->external_sample_count() < min_external_samples); | 450 sampler->external_sample_count() < min_external_samples); |
447 | 451 |
448 v8::CpuProfile* profile = cpu_profiler->StopProfiling(profile_name); | 452 v8::CpuProfile* profile = cpu_profiler->StopProfiling(profile_name); |
449 | 453 |
450 CHECK(profile); | 454 CHECK(profile); |
451 // Dump collected profile to have a better diagnostic in case of failure. | 455 // Dump collected profile to have a better diagnostic in case of failure. |
(...skipping 579 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1031 v8::Utils::OpenHandle(*GetFunction(env.local(), func_name))); | 1035 v8::Utils::OpenHandle(*GetFunction(env.local(), func_name))); |
1032 CHECK(func->shared()); | 1036 CHECK(func->shared()); |
1033 CHECK(func->shared()->abstract_code()); | 1037 CHECK(func->shared()->abstract_code()); |
1034 i::AbstractCode* code = func->abstract_code(); | 1038 i::AbstractCode* code = func->abstract_code(); |
1035 CHECK(code); | 1039 CHECK(code); |
1036 i::Address code_address = code->instruction_start(); | 1040 i::Address code_address = code->instruction_start(); |
1037 CHECK(code_address); | 1041 CHECK(code_address); |
1038 | 1042 |
1039 CpuProfilesCollection* profiles = new CpuProfilesCollection(isolate); | 1043 CpuProfilesCollection* profiles = new CpuProfilesCollection(isolate); |
1040 ProfileGenerator* generator = new ProfileGenerator(profiles); | 1044 ProfileGenerator* generator = new ProfileGenerator(profiles); |
1041 ProfilerEventsProcessor* processor = new ProfilerEventsProcessor( | 1045 ProfilerEventsProcessor* processor = |
1042 generator, nullptr, v8::base::TimeDelta::FromMicroseconds(100)); | 1046 new ProfilerEventsProcessor(CcTest::i_isolate(), generator, |
| 1047 v8::base::TimeDelta::FromMicroseconds(100)); |
1043 CpuProfiler profiler(isolate, profiles, generator, processor); | 1048 CpuProfiler profiler(isolate, profiles, generator, processor); |
1044 profiles->StartProfiling("", false); | 1049 profiles->StartProfiling("", false); |
1045 processor->Start(); | 1050 processor->Start(); |
1046 ProfilerListener profiler_listener(isolate); | 1051 ProfilerListener profiler_listener(isolate); |
1047 isolate->code_event_dispatcher()->AddListener(&profiler_listener); | 1052 isolate->code_event_dispatcher()->AddListener(&profiler_listener); |
1048 profiler_listener.AddObserver(&profiler); | 1053 profiler_listener.AddObserver(&profiler); |
1049 | 1054 |
1050 // Enqueue code creation events. | 1055 // Enqueue code creation events. |
1051 i::Handle<i::String> str = factory->NewStringFromAsciiChecked(func_name); | 1056 i::Handle<i::String> str = factory->NewStringFromAsciiChecked(func_name); |
1052 int line = 1; | 1057 int line = 1; |
(...skipping 990 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2043 iprofile->Print(); | 2048 iprofile->Print(); |
2044 v8::CpuProfile* profile = reinterpret_cast<v8::CpuProfile*>(iprofile); | 2049 v8::CpuProfile* profile = reinterpret_cast<v8::CpuProfile*>(iprofile); |
2045 | 2050 |
2046 const char* branch[] = {"", "test"}; | 2051 const char* branch[] = {"", "test"}; |
2047 const ProfileNode* itest_node = | 2052 const ProfileNode* itest_node = |
2048 GetSimpleBranch(env, profile, branch, arraysize(branch)); | 2053 GetSimpleBranch(env, profile, branch, arraysize(branch)); |
2049 CHECK_EQ(0U, itest_node->deopt_infos().size()); | 2054 CHECK_EQ(0U, itest_node->deopt_infos().size()); |
2050 | 2055 |
2051 iprofiler->DeleteProfile(iprofile); | 2056 iprofiler->DeleteProfile(iprofile); |
2052 } | 2057 } |
OLD | NEW |