OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "platform/assert.h" | 5 #include "platform/assert.h" |
6 | 6 |
7 #include "vm/dart_api_impl.h" | 7 #include "vm/dart_api_impl.h" |
8 #include "vm/dart_api_state.h" | 8 #include "vm/dart_api_state.h" |
9 #include "vm/globals.h" | 9 #include "vm/globals.h" |
10 #include "vm/timeline.h" | 10 #include "vm/timeline.h" |
11 #include "vm/timeline_analysis.h" | 11 #include "vm/timeline_analysis.h" |
12 #include "vm/unit_test.h" | 12 #include "vm/unit_test.h" |
13 | 13 |
14 namespace dart { | 14 namespace dart { |
15 | 15 |
16 class TimelineTestHelper : public AllStatic { | 16 class TimelineTestHelper : public AllStatic { |
17 public: | 17 public: |
18 static void SetStream(TimelineEvent* event, TimelineStream* stream) { | 18 static void SetStream(TimelineEvent* event, TimelineStream* stream) { |
19 event->StreamInit(stream); | 19 event->StreamInit(stream); |
20 } | 20 } |
21 | 21 |
22 static TimelineEvent* FakeThreadEvent( | 22 static TimelineEvent* FakeThreadEvent( |
23 TimelineEventBlock* block, intptr_t ftid) { | 23 TimelineEventBlock* block, intptr_t ftid) { |
24 TimelineEvent* event = block->StartEvent(); | 24 TimelineEvent* event = block->StartEvent(); |
25 ASSERT(event != NULL); | 25 ASSERT(event != NULL); |
26 event->DurationBegin("fake"); | 26 event->DurationBegin("fake"); |
27 event->thread_ = static_cast<ThreadId>(ftid); | 27 event->thread_ = OSThread::ThreadIdFromIntPtr(ftid); |
28 return event; | 28 return event; |
29 } | 29 } |
30 }; | 30 }; |
31 | 31 |
32 | 32 |
33 TEST_CASE(TimelineEventIsValid) { | 33 TEST_CASE(TimelineEventIsValid) { |
34 // Create a test stream. | 34 // Create a test stream. |
35 TimelineStream stream; | 35 TimelineStream stream; |
36 stream.Init("testStream", true); | 36 stream.Init("testStream", true); |
37 | 37 |
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
273 Zone* zone = thread->zone(); | 273 Zone* zone = thread->zone(); |
274 Isolate* isolate = thread->isolate(); | 274 Isolate* isolate = thread->isolate(); |
275 | 275 |
276 // Discover threads in recorder. | 276 // Discover threads in recorder. |
277 TimelineAnalysis ta(zone, isolate, recorder); | 277 TimelineAnalysis ta(zone, isolate, recorder); |
278 ta.BuildThreads(); | 278 ta.BuildThreads(); |
279 // block_3_0 is never used by a thread, so we only have two threads. | 279 // block_3_0 is never used by a thread, so we only have two threads. |
280 EXPECT_EQ(2, ta.NumThreads()); | 280 EXPECT_EQ(2, ta.NumThreads()); |
281 | 281 |
282 // Extract both threads. | 282 // Extract both threads. |
283 TimelineAnalysisThread* thread_1 = ta.GetThread(static_cast<ThreadId>(1)); | 283 TimelineAnalysisThread* thread_1 = |
284 TimelineAnalysisThread* thread_2 = ta.GetThread(static_cast<ThreadId>(2)); | 284 ta.GetThread(OSThread::ThreadIdFromIntPtr(1)); |
285 EXPECT_EQ(static_cast<ThreadId>(1), thread_1->id()); | 285 TimelineAnalysisThread* thread_2 = |
286 EXPECT_EQ(static_cast<ThreadId>(2), thread_2->id()); | 286 ta.GetThread(OSThread::ThreadIdFromIntPtr(2)); |
| 287 EXPECT_EQ(OSThread::ThreadIdFromIntPtr(1), thread_1->id()); |
| 288 EXPECT_EQ(OSThread::ThreadIdFromIntPtr(2), thread_2->id()); |
287 | 289 |
288 // Thread "1" should have three blocks. | 290 // Thread "1" should have three blocks. |
289 EXPECT_EQ(3, thread_1->NumBlocks()); | 291 EXPECT_EQ(3, thread_1->NumBlocks()); |
290 | 292 |
291 // Verify that blocks for thread "1" are sorted based on start time. | 293 // Verify that blocks for thread "1" are sorted based on start time. |
292 EXPECT_EQ(thread_1->At(0), block_1_2); | 294 EXPECT_EQ(thread_1->At(0), block_1_2); |
293 EXPECT_EQ(thread_1->At(1), block_1_0); | 295 EXPECT_EQ(thread_1->At(1), block_1_0); |
294 EXPECT_EQ(thread_1->At(2), block_1_1); | 296 EXPECT_EQ(thread_1->At(2), block_1_1); |
295 | 297 |
296 // Verify that block_1_2 has three events. | 298 // Verify that block_1_2 has three events. |
297 EXPECT_EQ(3, block_1_2->length()); | 299 EXPECT_EQ(3, block_1_2->length()); |
298 | 300 |
299 // Verify that block_1_0 has one events. | 301 // Verify that block_1_0 has one events. |
300 EXPECT_EQ(1, block_1_0->length()); | 302 EXPECT_EQ(1, block_1_0->length()); |
301 | 303 |
302 // Verify that block_1_1 has two events. | 304 // Verify that block_1_1 has two events. |
303 EXPECT_EQ(2, block_1_1->length()); | 305 EXPECT_EQ(2, block_1_1->length()); |
304 | 306 |
305 // Thread '2" should have one block.' | 307 // Thread '2" should have one block.' |
306 EXPECT_EQ(1, thread_2->NumBlocks()); | 308 EXPECT_EQ(1, thread_2->NumBlocks()); |
307 EXPECT_EQ(thread_2->At(0), block_2_0); | 309 EXPECT_EQ(thread_2->At(0), block_2_0); |
308 // Verify that block_2_0 has six events. | 310 // Verify that block_2_0 has six events. |
309 EXPECT_EQ(6, block_2_0->length()); | 311 EXPECT_EQ(6, block_2_0->length()); |
310 } | 312 } |
311 | 313 |
312 } // namespace dart | 314 } // namespace dart |
OLD | NEW |