Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2271)

Unified Diff: runtime/vm/timeline_test.cc

Issue 1284263002: Start TimelineAnalysis utility (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/timeline_analysis.cc ('k') | runtime/vm/vm_sources.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/timeline_test.cc
diff --git a/runtime/vm/timeline_test.cc b/runtime/vm/timeline_test.cc
index 38f907be6bedddd423fff55a178cc0f740df91a7..a91ea6e4bc8b15dd558dd0cceb46e5cec41b16ef 100644
--- a/runtime/vm/timeline_test.cc
+++ b/runtime/vm/timeline_test.cc
@@ -8,6 +8,7 @@
#include "vm/dart_api_state.h"
#include "vm/globals.h"
#include "vm/timeline.h"
+#include "vm/timeline_analysis.h"
#include "vm/unit_test.h"
namespace dart {
@@ -17,6 +18,15 @@ class TimelineTestHelper : public AllStatic {
static void SetStream(TimelineEvent* event, TimelineStream* stream) {
event->StreamInit(stream);
}
+
+ static TimelineEvent* FakeThreadEvent(
+ TimelineEventBlock* block, intptr_t ftid) {
+ TimelineEvent* event = block->StartEvent();
+ ASSERT(event != NULL);
+ event->DurationBegin("fake");
+ event->thread_ = static_cast<ThreadId>(ftid);
+ return event;
+ }
};
@@ -225,4 +235,78 @@ TEST_CASE(TimelineEventStreamingRecorderBasic) {
EXPECT_EQ(1, recorder->CountFor(TimelineEvent::kAsyncEnd));
}
+
+TEST_CASE(TimelineAnalysis_ThreadBlockCount) {
+ TimelineEventEndlessRecorder* recorder = new TimelineEventEndlessRecorder();
+ ASSERT(recorder != NULL);
+ // Blocks owned by thread "1".
+ TimelineEventBlock* block_1_0 = recorder->GetNewBlock();
+ TimelineEventBlock* block_1_1 = recorder->GetNewBlock();
+ TimelineEventBlock* block_1_2 = recorder->GetNewBlock();
+ // Blocks owned by thread "2".
+ TimelineEventBlock* block_2_0 = recorder->GetNewBlock();
+ // Blocks owned by thread "3".
+ TimelineEventBlock* block_3_0 = recorder->GetNewBlock();
+ USE(block_3_0);
+
+ // Add events to each block for thread 1.
+ TimelineTestHelper::FakeThreadEvent(block_1_2, 1);
+ TimelineTestHelper::FakeThreadEvent(block_1_2, 1);
+ TimelineTestHelper::FakeThreadEvent(block_1_2, 1);
+ // Sleep to ensure timestamps differ.
+ OS::Sleep(1);
+ TimelineTestHelper::FakeThreadEvent(block_1_0, 1);
+ OS::Sleep(1);
+ TimelineTestHelper::FakeThreadEvent(block_1_1, 1);
+ TimelineTestHelper::FakeThreadEvent(block_1_1, 1);
+ OS::Sleep(1);
+
+ // Add events to each block for thread 2.
+ TimelineTestHelper::FakeThreadEvent(block_2_0, 2);
+ TimelineTestHelper::FakeThreadEvent(block_2_0, 2);
+ TimelineTestHelper::FakeThreadEvent(block_2_0, 2);
+ TimelineTestHelper::FakeThreadEvent(block_2_0, 2);
+ TimelineTestHelper::FakeThreadEvent(block_2_0, 2);
+ TimelineTestHelper::FakeThreadEvent(block_2_0, 2);
+
+ Thread* thread = Thread::Current();
+ Zone* zone = thread->zone();
+ Isolate* isolate = thread->isolate();
+
+ // Discover threads in recorder.
+ TimelineAnalysis ta(zone, isolate, recorder);
+ ta.BuildThreads();
+ // block_3_0 is never used by a thread, so we only have two threads.
+ EXPECT_EQ(2, ta.NumThreads());
+
+ // Extract both threads.
+ TimelineAnalysisThread* thread_1 = ta.GetThread(static_cast<ThreadId>(1));
+ TimelineAnalysisThread* thread_2 = ta.GetThread(static_cast<ThreadId>(2));
+ EXPECT_EQ(static_cast<ThreadId>(1), thread_1->id());
+ EXPECT_EQ(static_cast<ThreadId>(2), thread_2->id());
+
+ // Thread "1" should have three blocks.
+ EXPECT_EQ(3, thread_1->NumBlocks());
+
+ // Verify that blocks for thread "1" are sorted based on start time.
+ EXPECT_EQ(thread_1->At(0), block_1_2);
+ EXPECT_EQ(thread_1->At(1), block_1_0);
+ EXPECT_EQ(thread_1->At(2), block_1_1);
+
+ // Verify that block_1_2 has three events.
+ EXPECT_EQ(3, block_1_2->length());
+
+ // Verify that block_1_0 has one events.
+ EXPECT_EQ(1, block_1_0->length());
+
+ // Verify that block_1_1 has two events.
+ EXPECT_EQ(2, block_1_1->length());
+
+ // Thread '2" should have one block.'
+ EXPECT_EQ(1, thread_2->NumBlocks());
+ EXPECT_EQ(thread_2->At(0), block_2_0);
+ // Verify that block_2_0 has six events.
+ EXPECT_EQ(6, block_2_0->length());
+}
+
} // namespace dart
« no previous file with comments | « runtime/vm/timeline_analysis.cc ('k') | runtime/vm/vm_sources.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698