| Index: runtime/vm/timeline_test.cc
|
| diff --git a/runtime/vm/timeline_test.cc b/runtime/vm/timeline_test.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..344b2070690f705b3d7017622037f288169f1d98
|
| --- /dev/null
|
| +++ b/runtime/vm/timeline_test.cc
|
| @@ -0,0 +1,136 @@
|
| +// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +
|
| +#include "platform/assert.h"
|
| +
|
| +#include "vm/dart_api_impl.h"
|
| +#include "vm/dart_api_state.h"
|
| +#include "vm/globals.h"
|
| +#include "vm/timeline.h"
|
| +#include "vm/unit_test.h"
|
| +
|
| +namespace dart {
|
| +
|
| +TEST_CASE(TimelineEventIsValid) {
|
| + // Create a test stream.
|
| + TimelineStream stream;
|
| + stream.Init("testStream", true);
|
| +
|
| + TimelineEvent event;
|
| +
|
| + // Starts invalid.
|
| + EXPECT(!event.IsValid());
|
| +
|
| + // Becomes valid.
|
| + event.Instant(&stream, "hello");
|
| + EXPECT(event.IsValid());
|
| +
|
| + // Becomes invalid.
|
| + event.Reset();
|
| + EXPECT(!event.IsValid());
|
| +}
|
| +
|
| +
|
| +TEST_CASE(TimelineEventDuration) {
|
| + // Create a test stream.
|
| + TimelineStream stream;
|
| + stream.Init("testStream", true);
|
| +
|
| + // Create a test event.
|
| + TimelineEvent event;
|
| + event.DurationBegin(&stream, "apple");
|
| + // Measure the duration.
|
| + int64_t current_duration = event.TimeDuration();
|
| + event.DurationEnd();
|
| + // Verify that duration is larger.
|
| + EXPECT_GE(event.TimeDuration(), current_duration);
|
| +}
|
| +
|
| +
|
| +TEST_CASE(TimelineEventDurationPrintJSON) {
|
| + // Create a test stream.
|
| + TimelineStream stream;
|
| + stream.Init("testStream", true);
|
| +
|
| + // Create a test event.
|
| + TimelineEvent event;
|
| + event.DurationBegin(&stream, "apple");
|
| + {
|
| + // Test printing to JSON.
|
| + JSONStream js;
|
| + event.PrintJSON(&js);
|
| + // Check category
|
| + EXPECT_SUBSTRING("\"cat\":\"testStream\"", js.ToCString());
|
| + // Check name.
|
| + EXPECT_SUBSTRING("\"name\":\"apple\"", js.ToCString());
|
| + // Check phase.
|
| + EXPECT_SUBSTRING("\"ph\":\"X\"", js.ToCString());
|
| + // Check that ts key is present.
|
| + EXPECT_SUBSTRING("\"ts\":", js.ToCString());
|
| + // Check that dur key is present.
|
| + EXPECT_SUBSTRING("\"dur\":", js.ToCString());
|
| + }
|
| + event.DurationEnd();
|
| +}
|
| +
|
| +
|
| +TEST_CASE(TimelineEventArguments) {
|
| + // Create a test stream.
|
| + TimelineStream stream;
|
| + stream.Init("testStream", true);
|
| +
|
| + // Create a test event.
|
| + TimelineEvent event;
|
| +
|
| + // Allocate room for four arguments.
|
| + event.SetNumArguments(4);
|
| + // Reset.
|
| + event.Reset();
|
| +
|
| + event.DurationBegin(&stream, "apple");
|
| + event.SetNumArguments(2);
|
| + event.CopyArgument(0, "arg1", "value1");
|
| + event.CopyArgument(1, "arg2", "value2");
|
| + event.DurationEnd();
|
| +}
|
| +
|
| +
|
| +TEST_CASE(TimelineEventArgumentsPrintJSON) {
|
| + // Create a test stream.
|
| + TimelineStream stream;
|
| + stream.Init("testStream", true);
|
| +
|
| + // Create a test event.
|
| + TimelineEvent event;
|
| +
|
| + event.DurationBegin(&stream, "apple");
|
| + event.SetNumArguments(2);
|
| + event.CopyArgument(0, "arg1", "value1");
|
| + event.CopyArgument(1, "arg2", "value2");
|
| + event.DurationEnd();
|
| +
|
| + {
|
| + // Test printing to JSON.
|
| + JSONStream js;
|
| + event.PrintJSON(&js);
|
| +
|
| + // Check both arguments.
|
| + EXPECT_SUBSTRING("\"arg1\":\"value1\"", js.ToCString());
|
| + EXPECT_SUBSTRING("\"arg2\":\"value2\"", js.ToCString());
|
| + }
|
| +}
|
| +
|
| +
|
| +TEST_CASE(TimelineEventBufferPrintJSON) {
|
| + Isolate* isolate = Isolate::Current();
|
| + TimelineEventBuffer* buffer = isolate->timeline_event_buffer();
|
| + JSONStream js;
|
| + buffer->PrintJSON(&js);
|
| + // Check the type. This test will fail if we ever make Timeline public.
|
| + EXPECT_SUBSTRING("\"type\":\"_Timeline\"", js.ToCString());
|
| + // Check that there is a traceEvents array.
|
| + EXPECT_SUBSTRING("\"traceEvents\":[", js.ToCString());
|
| +}
|
| +
|
| +} // namespace dart
|
|
|