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 26 matching lines...) Expand all Loading... |
37 using i::CodeEntry; | 37 using i::CodeEntry; |
38 using i::CpuProfile; | 38 using i::CpuProfile; |
39 using i::CpuProfiler; | 39 using i::CpuProfiler; |
40 using i::CpuProfilesCollection; | 40 using i::CpuProfilesCollection; |
41 using i::Heap; | 41 using i::Heap; |
42 using i::ProfileGenerator; | 42 using i::ProfileGenerator; |
43 using i::ProfileNode; | 43 using i::ProfileNode; |
44 using i::ProfilerEventsProcessor; | 44 using i::ProfilerEventsProcessor; |
45 using i::ScopedVector; | 45 using i::ScopedVector; |
46 using i::SmartPointer; | 46 using i::SmartPointer; |
47 using i::TimeDelta; | |
48 using i::Vector; | 47 using i::Vector; |
49 | 48 |
50 | 49 |
51 TEST(StartStop) { | 50 TEST(StartStop) { |
52 CpuProfilesCollection profiles; | 51 CpuProfilesCollection profiles; |
53 ProfileGenerator generator(&profiles); | 52 ProfileGenerator generator(&profiles); |
54 SmartPointer<ProfilerEventsProcessor> processor(new ProfilerEventsProcessor( | 53 SmartPointer<ProfilerEventsProcessor> processor( |
55 &generator, NULL, TimeDelta::FromMicroseconds(100))); | 54 new ProfilerEventsProcessor(&generator, NULL, 100)); |
56 processor->Start(); | 55 processor->Start(); |
57 processor->StopSynchronously(); | 56 processor->StopSynchronously(); |
58 } | 57 } |
59 | 58 |
60 | 59 |
61 static inline i::Address ToAddress(int n) { | 60 static inline i::Address ToAddress(int n) { |
62 return reinterpret_cast<i::Address>(n); | 61 return reinterpret_cast<i::Address>(n); |
63 } | 62 } |
64 | 63 |
65 static void EnqueueTickSampleEvent(ProfilerEventsProcessor* proc, | 64 static void EnqueueTickSampleEvent(ProfilerEventsProcessor* proc, |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
136 i::Code* comment_code = CreateCode(&env); | 135 i::Code* comment_code = CreateCode(&env); |
137 i::Code* args5_code = CreateCode(&env); | 136 i::Code* args5_code = CreateCode(&env); |
138 i::Code* comment2_code = CreateCode(&env); | 137 i::Code* comment2_code = CreateCode(&env); |
139 i::Code* moved_code = CreateCode(&env); | 138 i::Code* moved_code = CreateCode(&env); |
140 i::Code* args3_code = CreateCode(&env); | 139 i::Code* args3_code = CreateCode(&env); |
141 i::Code* args4_code = CreateCode(&env); | 140 i::Code* args4_code = CreateCode(&env); |
142 | 141 |
143 CpuProfilesCollection* profiles = new CpuProfilesCollection; | 142 CpuProfilesCollection* profiles = new CpuProfilesCollection; |
144 profiles->StartProfiling("", 1, false); | 143 profiles->StartProfiling("", 1, false); |
145 ProfileGenerator generator(profiles); | 144 ProfileGenerator generator(profiles); |
146 SmartPointer<ProfilerEventsProcessor> processor(new ProfilerEventsProcessor( | 145 SmartPointer<ProfilerEventsProcessor> processor( |
147 &generator, NULL, TimeDelta::FromMicroseconds(100))); | 146 new ProfilerEventsProcessor(&generator, NULL, 100)); |
148 processor->Start(); | 147 processor->Start(); |
149 CpuProfiler profiler(isolate, profiles, &generator, *processor); | 148 CpuProfiler profiler(isolate, profiles, &generator, *processor); |
150 | 149 |
151 // Enqueue code creation events. | 150 // Enqueue code creation events. |
152 const char* aaa_str = "aaa"; | 151 const char* aaa_str = "aaa"; |
153 i::Handle<i::String> aaa_name = factory->NewStringFromAscii( | 152 i::Handle<i::String> aaa_name = factory->NewStringFromAscii( |
154 i::Vector<const char>(aaa_str, i::StrLength(aaa_str))); | 153 i::Vector<const char>(aaa_str, i::StrLength(aaa_str))); |
155 profiler.CodeCreateEvent(i::Logger::FUNCTION_TAG, aaa_code, *aaa_name); | 154 profiler.CodeCreateEvent(i::Logger::FUNCTION_TAG, aaa_code, *aaa_name); |
156 profiler.CodeCreateEvent(i::Logger::BUILTIN_TAG, comment_code, "comment"); | 155 profiler.CodeCreateEvent(i::Logger::BUILTIN_TAG, comment_code, "comment"); |
157 profiler.CodeCreateEvent(i::Logger::STUB_TAG, args5_code, 5); | 156 profiler.CodeCreateEvent(i::Logger::STUB_TAG, args5_code, 5); |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 i::Isolate* isolate = i::Isolate::Current(); | 197 i::Isolate* isolate = i::Isolate::Current(); |
199 i::HandleScope scope(isolate); | 198 i::HandleScope scope(isolate); |
200 | 199 |
201 i::Code* frame1_code = CreateCode(&env); | 200 i::Code* frame1_code = CreateCode(&env); |
202 i::Code* frame2_code = CreateCode(&env); | 201 i::Code* frame2_code = CreateCode(&env); |
203 i::Code* frame3_code = CreateCode(&env); | 202 i::Code* frame3_code = CreateCode(&env); |
204 | 203 |
205 CpuProfilesCollection* profiles = new CpuProfilesCollection; | 204 CpuProfilesCollection* profiles = new CpuProfilesCollection; |
206 profiles->StartProfiling("", 1, false); | 205 profiles->StartProfiling("", 1, false); |
207 ProfileGenerator generator(profiles); | 206 ProfileGenerator generator(profiles); |
208 SmartPointer<ProfilerEventsProcessor> processor(new ProfilerEventsProcessor( | 207 SmartPointer<ProfilerEventsProcessor> processor( |
209 &generator, NULL, TimeDelta::FromMicroseconds(100))); | 208 new ProfilerEventsProcessor(&generator, NULL, 100)); |
210 processor->Start(); | 209 processor->Start(); |
211 CpuProfiler profiler(isolate, profiles, &generator, *processor); | 210 CpuProfiler profiler(isolate, profiles, &generator, *processor); |
212 | 211 |
213 profiler.CodeCreateEvent(i::Logger::BUILTIN_TAG, frame1_code, "bbb"); | 212 profiler.CodeCreateEvent(i::Logger::BUILTIN_TAG, frame1_code, "bbb"); |
214 profiler.CodeCreateEvent(i::Logger::STUB_TAG, frame2_code, 5); | 213 profiler.CodeCreateEvent(i::Logger::STUB_TAG, frame2_code, 5); |
215 profiler.CodeCreateEvent(i::Logger::BUILTIN_TAG, frame3_code, "ddd"); | 214 profiler.CodeCreateEvent(i::Logger::BUILTIN_TAG, frame3_code, "ddd"); |
216 | 215 |
217 EnqueueTickSampleEvent(*processor, frame1_code->instruction_start()); | 216 EnqueueTickSampleEvent(*processor, frame1_code->instruction_start()); |
218 EnqueueTickSampleEvent( | 217 EnqueueTickSampleEvent( |
219 *processor, | 218 *processor, |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
267 TestSetup test_setup; | 266 TestSetup test_setup; |
268 LocalContext env; | 267 LocalContext env; |
269 i::Isolate* isolate = i::Isolate::Current(); | 268 i::Isolate* isolate = i::Isolate::Current(); |
270 i::HandleScope scope(isolate); | 269 i::HandleScope scope(isolate); |
271 | 270 |
272 i::Code* code = CreateCode(&env); | 271 i::Code* code = CreateCode(&env); |
273 | 272 |
274 CpuProfilesCollection* profiles = new CpuProfilesCollection; | 273 CpuProfilesCollection* profiles = new CpuProfilesCollection; |
275 profiles->StartProfiling("", 1, false); | 274 profiles->StartProfiling("", 1, false); |
276 ProfileGenerator generator(profiles); | 275 ProfileGenerator generator(profiles); |
277 SmartPointer<ProfilerEventsProcessor> processor(new ProfilerEventsProcessor( | 276 SmartPointer<ProfilerEventsProcessor> processor( |
278 &generator, NULL, TimeDelta::FromMicroseconds(100))); | 277 new ProfilerEventsProcessor(&generator, NULL, 100)); |
279 processor->Start(); | 278 processor->Start(); |
280 CpuProfiler profiler(isolate, profiles, &generator, *processor); | 279 CpuProfiler profiler(isolate, profiles, &generator, *processor); |
281 | 280 |
282 profiler.CodeCreateEvent(i::Logger::BUILTIN_TAG, code, "bbb"); | 281 profiler.CodeCreateEvent(i::Logger::BUILTIN_TAG, code, "bbb"); |
283 | 282 |
284 i::TickSample* sample = processor->StartTickSample(); | 283 i::TickSample* sample = processor->StartTickSample(); |
285 sample->pc = code->address(); | 284 sample->pc = code->address(); |
286 sample->tos = 0; | 285 sample->tos = 0; |
287 sample->frames_count = i::TickSample::kMaxFramesCount; | 286 sample->frames_count = i::TickSample::kMaxFramesCount; |
288 for (int i = 0; i < sample->frames_count; ++i) { | 287 for (int i = 0; i < sample->frames_count; ++i) { |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
413 isolate->Dispose(); | 412 isolate->Dispose(); |
414 CHECK_EQ(NULL, isolate->GetCpuProfiler()); | 413 CHECK_EQ(NULL, isolate->GetCpuProfiler()); |
415 } | 414 } |
416 | 415 |
417 | 416 |
418 TEST(ProfileStartEndTime) { | 417 TEST(ProfileStartEndTime) { |
419 LocalContext env; | 418 LocalContext env; |
420 v8::HandleScope scope(env->GetIsolate()); | 419 v8::HandleScope scope(env->GetIsolate()); |
421 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler(); | 420 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler(); |
422 | 421 |
| 422 int64_t time_before_profiling = i::OS::Ticks(); |
423 v8::Local<v8::String> profile_name = v8::String::New("test"); | 423 v8::Local<v8::String> profile_name = v8::String::New("test"); |
424 cpu_profiler->StartCpuProfiling(profile_name); | 424 cpu_profiler->StartCpuProfiling(profile_name); |
425 const v8::CpuProfile* profile = cpu_profiler->StopCpuProfiling(profile_name); | 425 const v8::CpuProfile* profile = cpu_profiler->StopCpuProfiling(profile_name); |
| 426 CHECK(time_before_profiling <= profile->GetStartTime()); |
426 CHECK(profile->GetStartTime() <= profile->GetEndTime()); | 427 CHECK(profile->GetStartTime() <= profile->GetEndTime()); |
| 428 CHECK(profile->GetEndTime() <= i::OS::Ticks()); |
427 } | 429 } |
428 | 430 |
429 | 431 |
430 static const v8::CpuProfile* RunProfiler( | 432 static const v8::CpuProfile* RunProfiler( |
431 LocalContext& env, v8::Handle<v8::Function> function, | 433 LocalContext& env, v8::Handle<v8::Function> function, |
432 v8::Handle<v8::Value> argv[], int argc, | 434 v8::Handle<v8::Value> argv[], int argc, |
433 unsigned min_js_samples) { | 435 unsigned min_js_samples) { |
434 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler(); | 436 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler(); |
435 v8::Local<v8::String> profile_name = v8::String::New("my_profile"); | 437 v8::Local<v8::String> profile_name = v8::String::New("my_profile"); |
436 | 438 |
(...skipping 935 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1372 CHECK_EQ(0, programNode->GetChildrenCount()); | 1374 CHECK_EQ(0, programNode->GetChildrenCount()); |
1373 CHECK_GE(programNode->GetHitCount(), 3); | 1375 CHECK_GE(programNode->GetHitCount(), 3); |
1374 | 1376 |
1375 const v8::CpuProfileNode* idleNode = | 1377 const v8::CpuProfileNode* idleNode = |
1376 GetChild(root, ProfileGenerator::kIdleEntryName); | 1378 GetChild(root, ProfileGenerator::kIdleEntryName); |
1377 CHECK_EQ(0, idleNode->GetChildrenCount()); | 1379 CHECK_EQ(0, idleNode->GetChildrenCount()); |
1378 CHECK_GE(idleNode->GetHitCount(), 3); | 1380 CHECK_GE(idleNode->GetHitCount(), 3); |
1379 | 1381 |
1380 cpu_profiler->DeleteAllCpuProfiles(); | 1382 cpu_profiler->DeleteAllCpuProfiles(); |
1381 } | 1383 } |
OLD | NEW |