| // Copyright 2017 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // This file is included from event_tests.c and event_tests.cpp to exercise |
| // the different API features when using the C and C++ compilers. |
| // Portions of some tests are only compiled in C++. |
| // |
| // This file is also compiled with and without the NTRACE macro. |
| |
| #ifndef ZIRCON_SYSTEM_UTEST_TRACE_EVENT_TESTS_COMMON_H_ |
| #define ZIRCON_SYSTEM_UTEST_TRACE_EVENT_TESTS_COMMON_H_ |
| |
| #include <lib/trace/event.h> |
| #include <lib/trace/event_args.h> |
| #include <zircon/syscalls.h> |
| |
| #include <trace-test-utils/fixture.h> |
| #include <zxtest/zxtest.h> |
| |
| #ifdef __cplusplus |
| #include <string_view> |
| |
| #include <fbl/string.h> |
| #endif // __cplusplus |
| |
| #include "fixture_macros.h" |
| |
| #define I32_ARGS1 "k1", TA_INT32(1) |
| #define I32_ARGS2 "k1", TA_INT32(1), "k2", TA_INT32(2) |
| #define I32_ARGS3 "k1", TA_INT32(1), "k2", TA_INT32(2), "k3", TA_INT32(3) |
| #define I32_ARGS4 "k1", TA_INT32(1), "k2", TA_INT32(2), "k3", TA_INT32(3), "k4", TA_INT32(4) |
| #define I32_ARGS5 \ |
| "k1", TA_INT32(1), "k2", TA_INT32(2), "k3", TA_INT32(3), "k4", TA_INT32(4), "k5", TA_INT32(5) |
| #define I32_ARGS6 \ |
| "k1", TA_INT32(1), "k2", TA_INT32(2), "k3", TA_INT32(3), "k4", TA_INT32(4), "k5", TA_INT32(5), \ |
| "k6", TA_INT32(6) |
| #define I32_ARGS7 \ |
| "k1", TA_INT32(1), "k2", TA_INT32(2), "k3", TA_INT32(3), "k4", TA_INT32(4), "k5", TA_INT32(5), \ |
| "k6", TA_INT32(6), "k7", TA_INT32(7) |
| #define I32_ARGS8 \ |
| "k1", TA_INT32(1), "k2", TA_INT32(2), "k3", TA_INT32(3), "k4", TA_INT32(4), "k5", TA_INT32(5), \ |
| "k6", TA_INT32(6), "k7", TA_INT32(7), "k8", TA_INT32(8) |
| #define I32_ARGS9 \ |
| "k1", TA_INT32(1), "k2", TA_INT32(2), "k3", TA_INT32(3), "k4", TA_INT32(4), "k5", TA_INT32(5), \ |
| "k6", TA_INT32(6), "k7", TA_INT32(7), "k8", TA_INT32(8), "k9", TA_INT32(9) |
| #define I32_ARGS10 \ |
| "k1", TA_INT32(1), "k2", TA_INT32(2), "k3", TA_INT32(3), "k4", TA_INT32(4), "k5", TA_INT32(5), \ |
| "k6", TA_INT32(6), "k7", TA_INT32(7), "k8", TA_INT32(8), "k9", TA_INT32(9), "k10", \ |
| TA_INT32(10) |
| #define I32_ARGS11 \ |
| "k1", TA_INT32(1), "k2", TA_INT32(2), "k3", TA_INT32(3), "k4", TA_INT32(4), "k5", TA_INT32(5), \ |
| "k6", TA_INT32(6), "k7", TA_INT32(7), "k8", TA_INT32(8), "k9", TA_INT32(9), "k10", \ |
| TA_INT32(10), "k11", TA_INT32(11) |
| #define I32_ARGS12 \ |
| "k1", TA_INT32(1), "k2", TA_INT32(2), "k3", TA_INT32(3), "k4", TA_INT32(4), "k5", TA_INT32(5), \ |
| "k6", TA_INT32(6), "k7", TA_INT32(7), "k8", TA_INT32(8), "k9", TA_INT32(9), "k10", \ |
| TA_INT32(10), "k11", TA_INT32(11), "k12", TA_INT32(12) |
| #define I32_ARGS13 \ |
| "k1", TA_INT32(1), "k2", TA_INT32(2), "k3", TA_INT32(3), "k4", TA_INT32(4), "k5", TA_INT32(5), \ |
| "k6", TA_INT32(6), "k7", TA_INT32(7), "k8", TA_INT32(8), "k9", TA_INT32(9), "k10", \ |
| TA_INT32(10), "k11", TA_INT32(11), "k12", TA_INT32(12), "k13", TA_INT32(13) |
| #define I32_ARGS14 \ |
| "k1", TA_INT32(1), "k2", TA_INT32(2), "k3", TA_INT32(3), "k4", TA_INT32(4), "k5", TA_INT32(5), \ |
| "k6", TA_INT32(6), "k7", TA_INT32(7), "k8", TA_INT32(8), "k9", TA_INT32(9), "k10", \ |
| TA_INT32(10), "k11", TA_INT32(11), "k12", TA_INT32(12), "k13", TA_INT32(13), "k14", \ |
| TA_INT32(14) |
| #define I32_ARGS15 \ |
| "k1", TA_INT32(1), "k2", TA_INT32(2), "k3", TA_INT32(3), "k4", TA_INT32(4), "k5", TA_INT32(5), \ |
| "k6", TA_INT32(6), "k7", TA_INT32(7), "k8", TA_INT32(8), "k9", TA_INT32(9), "k10", \ |
| TA_INT32(10), "k11", TA_INT32(11), "k12", TA_INT32(12), "k13", TA_INT32(13), "k14", \ |
| TA_INT32(14), "k15", TA_INT32(15) |
| |
| #define ALL15(fn) \ |
| fn(0) fn(1) fn(2) fn(3) fn(4) fn(5) fn(6) fn(7) fn(8) fn(9) fn(10) fn(11) fn(12) fn(13) fn(14) \ |
| fn(15) |
| |
| #define STR_ARGS1 "k1", TA_STRING("v1") |
| #define STR_ARGS2 "k1", TA_STRING("v1"), "k2", TA_STRING("v2") |
| #define STR_ARGS3 "k1", TA_STRING("v1"), "k2", TA_STRING("v2"), "k3", TA_STRING("v3") |
| #define STR_ARGS4 \ |
| "k1", TA_STRING("v1"), "k2", TA_STRING("v2"), "k3", TA_STRING("v3"), "k4", TA_STRING("v4") |
| |
| #ifdef __cplusplus |
| |
| #ifndef NTRACE |
| #define TEST_SUITE event_tests_cpp |
| #else |
| #define TEST_SUITE event_tests_cpp_ntrace |
| #endif // NTRACE |
| |
| #else |
| |
| #if defined(NTRACE) |
| #define TEST_SUITE event_tests_c_ntrace |
| #elif defined(NO_OPTIM) |
| #define TEST_SUITE event_tests_c_no_optim |
| #else |
| #define TEST_SUITE event_tests_c |
| #endif // NTRACE |
| |
| #endif // __cplusplus |
| |
| TEST(TEST_SUITE, test_enabled) { |
| BEGIN_TRACE_TEST; |
| |
| EXPECT_FALSE(TRACE_ENABLED(), ""); |
| |
| fixture_initialize_and_start_tracing(); |
| #ifndef NTRACE |
| EXPECT_TRUE(TRACE_ENABLED(), ""); |
| #else |
| EXPECT_FALSE(TRACE_ENABLED(), ""); |
| #endif // NTRACE |
| |
| fixture_stop_and_terminate_tracing(); |
| EXPECT_FALSE(TRACE_ENABLED(), ""); |
| |
| END_TRACE_TEST; |
| } |
| |
| TEST(TEST_SUITE, test_category_enabled) { |
| BEGIN_TRACE_TEST; |
| |
| EXPECT_FALSE(TRACE_CATEGORY_ENABLED("+enabled"), ""); |
| EXPECT_FALSE(TRACE_CATEGORY_ENABLED("-disabled"), ""); |
| EXPECT_FALSE(TRACE_CATEGORY_ENABLED(""), ""); |
| |
| fixture_initialize_and_start_tracing(); |
| #ifndef NTRACE |
| EXPECT_TRUE(TRACE_CATEGORY_ENABLED("+enabled"), ""); |
| EXPECT_FALSE(TRACE_CATEGORY_ENABLED("-disabled"), ""); |
| EXPECT_FALSE(TRACE_CATEGORY_ENABLED(""), ""); |
| #else |
| EXPECT_FALSE(TRACE_CATEGORY_ENABLED("+enabled"), ""); |
| EXPECT_FALSE(TRACE_CATEGORY_ENABLED("-disabled"), ""); |
| EXPECT_FALSE(TRACE_CATEGORY_ENABLED(""), ""); |
| #endif // NTRACE |
| |
| fixture_stop_and_terminate_tracing(); |
| EXPECT_FALSE(TRACE_CATEGORY_ENABLED("+enabled"), ""); |
| EXPECT_FALSE(TRACE_CATEGORY_ENABLED("-disabled"), ""); |
| EXPECT_FALSE(TRACE_CATEGORY_ENABLED(""), ""); |
| |
| END_TRACE_TEST; |
| } |
| |
| TEST(TEST_SUITE, test_trace_nonce) { |
| BEGIN_TRACE_TEST; |
| |
| // Note: TRACE_NONCE() still returns unique values when NTRACE is defined |
| // since nonces are available even when tracing is disabled. |
| uint64_t nonce1 = TRACE_NONCE(); |
| EXPECT_NE(0u, nonce1, "nonce is never 0"); |
| uint64_t nonce2 = TRACE_NONCE(); |
| EXPECT_NE(0u, nonce1, "nonce is never 0"); |
| EXPECT_NE(nonce1, nonce2, "nonce is unique"); |
| |
| END_TRACE_TEST; |
| } |
| |
| TEST(TEST_SUITE, test_instant) { |
| BEGIN_TRACE_TEST; |
| |
| fixture_initialize_and_start_tracing(); |
| |
| TRACE_INSTANT("+enabled", "name", TRACE_SCOPE_GLOBAL); |
| TRACE_INSTANT("+enabled", "name", TRACE_SCOPE_PROCESS); |
| TRACE_INSTANT("+enabled", "name", TRACE_SCOPE_THREAD); |
| TRACE_INSTANT("+enabled", "name", TRACE_SCOPE_THREAD, STR_ARGS1); |
| TRACE_INSTANT("+enabled", "name", TRACE_SCOPE_THREAD, STR_ARGS4); |
| TRACE_INSTANT("-disabled", "name", TRACE_SCOPE_THREAD); |
| |
| ASSERT_RECORDS( |
| "\ |
| String(index: 1, \"+enabled\")\n\ |
| String(index: 2, \"process\")\n\ |
| KernelObject(koid: <>, type: thread, name: \"initial-thread\", {process: koid(<>)})\n\ |
| Thread(index: 1, <>)\n\ |
| String(index: 3, \"name\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", Instant(scope: global), {})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", Instant(scope: process), {})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", Instant(scope: thread), {})\n\ |
| String(index: 4, \"k1\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", Instant(scope: thread), {k1: string(\"v1\")})\n\ |
| String(index: 5, \"k2\")\n\ |
| String(index: 6, \"k3\")\n\ |
| String(index: 7, \"k4\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", Instant(scope: thread), {k1: string(\"v1\"), k2: string(\"v2\"), k3: string(\"v3\"), k4: string(\"v4\")})\n\ |
| ", |
| ""); |
| |
| END_TRACE_TEST; |
| } |
| |
| TEST(TEST_SUITE, test_counter) { |
| BEGIN_TRACE_TEST; |
| |
| fixture_initialize_and_start_tracing(); |
| |
| TRACE_COUNTER("+enabled", "name", 1u, I32_ARGS1); |
| TRACE_COUNTER("+enabled", "name", 1u, I32_ARGS4); |
| |
| ASSERT_RECORDS( |
| "\ |
| String(index: 1, \"+enabled\")\n\ |
| String(index: 2, \"process\")\n\ |
| KernelObject(koid: <>, type: thread, name: \"initial-thread\", {process: koid(<>)})\n\ |
| Thread(index: 1, <>)\n\ |
| String(index: 3, \"name\")\n\ |
| String(index: 4, \"k1\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", Counter(id: 1), {k1: int32(1)})\n\ |
| String(index: 5, \"k2\")\n\ |
| String(index: 6, \"k3\")\n\ |
| String(index: 7, \"k4\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", Counter(id: 1), {k1: int32(1), k2: int32(2), k3: int32(3), k4: int32(4)})\n\ |
| ", |
| ""); |
| |
| END_TRACE_TEST; |
| } |
| |
| TEST(TEST_SUITE, test_duration) { |
| BEGIN_TRACE_TEST; |
| |
| fixture_initialize_and_start_tracing(); |
| |
| { |
| TRACE_DURATION("+enabled", "name"); |
| TRACE_DURATION("+enabled", "name", STR_ARGS1); |
| TRACE_DURATION("+enabled", "name", STR_ARGS4); |
| } // complete duration events are written when the scope exits |
| |
| ASSERT_RECORDS( |
| "\ |
| String(index: 1, \"+enabled\")\n\ |
| String(index: 2, \"process\")\n\ |
| KernelObject(koid: <>, type: thread, name: \"initial-thread\", {process: koid(<>)})\n\ |
| Thread(index: 1, <>)\n\ |
| String(index: 3, \"name\")\n\ |
| String(index: 4, \"k1\")\n\ |
| String(index: 5, \"k2\")\n\ |
| String(index: 6, \"k3\")\n\ |
| String(index: 7, \"k4\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationComplete(end_ts: <>), {k1: string(\"v1\"), k2: string(\"v2\"), k3: string(\"v3\"), k4: string(\"v4\")})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationComplete(end_ts: <>), {k1: string(\"v1\")})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationComplete(end_ts: <>), {})\n\ |
| ", |
| ""); |
| |
| END_TRACE_TEST; |
| } |
| |
| TEST(TEST_SUITE, test_duration_begin) { |
| BEGIN_TRACE_TEST; |
| |
| fixture_initialize_and_start_tracing(); |
| |
| TRACE_DURATION_BEGIN("+enabled", "name"); |
| TRACE_DURATION_BEGIN("+enabled", "name", STR_ARGS1); |
| TRACE_DURATION_BEGIN("+enabled", "name", STR_ARGS4); |
| |
| ASSERT_RECORDS( |
| "\ |
| String(index: 1, \"+enabled\")\n\ |
| String(index: 2, \"process\")\n\ |
| KernelObject(koid: <>, type: thread, name: \"initial-thread\", {process: koid(<>)})\n\ |
| Thread(index: 1, <>)\n\ |
| String(index: 3, \"name\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {})\n\ |
| String(index: 4, \"k1\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {k1: string(\"v1\")})\n\ |
| String(index: 5, \"k2\")\n\ |
| String(index: 6, \"k3\")\n\ |
| String(index: 7, \"k4\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {k1: string(\"v1\"), k2: string(\"v2\"), k3: string(\"v3\"), k4: string(\"v4\")})\n\ |
| ", |
| ""); |
| |
| END_TRACE_TEST; |
| } |
| |
| TEST(TEST_SUITE, test_duration_end) { |
| BEGIN_TRACE_TEST; |
| |
| fixture_initialize_and_start_tracing(); |
| |
| TRACE_DURATION_END("+enabled", "name"); |
| TRACE_DURATION_END("+enabled", "name", STR_ARGS1); |
| TRACE_DURATION_END("+enabled", "name", STR_ARGS4); |
| |
| ASSERT_RECORDS( |
| "\ |
| String(index: 1, \"+enabled\")\n\ |
| String(index: 2, \"process\")\n\ |
| KernelObject(koid: <>, type: thread, name: \"initial-thread\", {process: koid(<>)})\n\ |
| Thread(index: 1, <>)\n\ |
| String(index: 3, \"name\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationEnd, {})\n\ |
| String(index: 4, \"k1\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationEnd, {k1: string(\"v1\")})\n\ |
| String(index: 5, \"k2\")\n\ |
| String(index: 6, \"k3\")\n\ |
| String(index: 7, \"k4\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationEnd, {k1: string(\"v1\"), k2: string(\"v2\"), k3: string(\"v3\"), k4: string(\"v4\")})\n\ |
| ", |
| ""); |
| |
| END_TRACE_TEST; |
| } |
| |
| TEST(TEST_SUITE, test_async_begin) { |
| BEGIN_TRACE_TEST; |
| |
| fixture_initialize_and_start_tracing(); |
| |
| TRACE_ASYNC_BEGIN("+enabled", "name", 1u); |
| TRACE_ASYNC_BEGIN("+enabled", "name", 1u, STR_ARGS1); |
| TRACE_ASYNC_BEGIN("+enabled", "name", 1u, STR_ARGS4); |
| |
| ASSERT_RECORDS( |
| "\ |
| String(index: 1, \"+enabled\")\n\ |
| String(index: 2, \"process\")\n\ |
| KernelObject(koid: <>, type: thread, name: \"initial-thread\", {process: koid(<>)})\n\ |
| Thread(index: 1, <>)\n\ |
| String(index: 3, \"name\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", AsyncBegin(id: 1), {})\n\ |
| String(index: 4, \"k1\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", AsyncBegin(id: 1), {k1: string(\"v1\")})\n\ |
| String(index: 5, \"k2\")\n\ |
| String(index: 6, \"k3\")\n\ |
| String(index: 7, \"k4\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", AsyncBegin(id: 1), {k1: string(\"v1\"), k2: string(\"v2\"), k3: string(\"v3\"), k4: string(\"v4\")})\n\ |
| ", |
| ""); |
| |
| END_TRACE_TEST; |
| } |
| |
| TEST(TEST_SUITE, test_async_instant) { |
| BEGIN_TRACE_TEST; |
| |
| fixture_initialize_and_start_tracing(); |
| |
| TRACE_ASYNC_INSTANT("+enabled", "name", 1u); |
| TRACE_ASYNC_INSTANT("+enabled", "name", 1u, STR_ARGS1); |
| TRACE_ASYNC_INSTANT("+enabled", "name", 1u, STR_ARGS4); |
| |
| ASSERT_RECORDS( |
| "\ |
| String(index: 1, \"+enabled\")\n\ |
| String(index: 2, \"process\")\n\ |
| KernelObject(koid: <>, type: thread, name: \"initial-thread\", {process: koid(<>)})\n\ |
| Thread(index: 1, <>)\n\ |
| String(index: 3, \"name\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", AsyncInstant(id: 1), {})\n\ |
| String(index: 4, \"k1\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", AsyncInstant(id: 1), {k1: string(\"v1\")})\n\ |
| String(index: 5, \"k2\")\n\ |
| String(index: 6, \"k3\")\n\ |
| String(index: 7, \"k4\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", AsyncInstant(id: 1), {k1: string(\"v1\"), k2: string(\"v2\"), k3: string(\"v3\"), k4: string(\"v4\")})\n\ |
| ", |
| ""); |
| |
| END_TRACE_TEST; |
| } |
| |
| TEST(TEST_SUITE, test_async_end) { |
| BEGIN_TRACE_TEST; |
| |
| fixture_initialize_and_start_tracing(); |
| |
| TRACE_ASYNC_END("+enabled", "name", 1u); |
| TRACE_ASYNC_END("+enabled", "name", 1u, STR_ARGS1); |
| TRACE_ASYNC_END("+enabled", "name", 1u, STR_ARGS4); |
| |
| ASSERT_RECORDS( |
| "\ |
| String(index: 1, \"+enabled\")\n\ |
| String(index: 2, \"process\")\n\ |
| KernelObject(koid: <>, type: thread, name: \"initial-thread\", {process: koid(<>)})\n\ |
| Thread(index: 1, <>)\n\ |
| String(index: 3, \"name\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", AsyncEnd(id: 1), {})\n\ |
| String(index: 4, \"k1\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", AsyncEnd(id: 1), {k1: string(\"v1\")})\n\ |
| String(index: 5, \"k2\")\n\ |
| String(index: 6, \"k3\")\n\ |
| String(index: 7, \"k4\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", AsyncEnd(id: 1), {k1: string(\"v1\"), k2: string(\"v2\"), k3: string(\"v3\"), k4: string(\"v4\")})\n\ |
| ", |
| ""); |
| |
| END_TRACE_TEST; |
| } |
| |
| TEST(TEST_SUITE, test_flow_begin) { |
| BEGIN_TRACE_TEST; |
| |
| fixture_initialize_and_start_tracing(); |
| |
| TRACE_FLOW_BEGIN("+enabled", "name", 1u); |
| TRACE_FLOW_BEGIN("+enabled", "name", 1u, STR_ARGS1); |
| TRACE_FLOW_BEGIN("+enabled", "name", 1u, STR_ARGS4); |
| |
| ASSERT_RECORDS( |
| "\ |
| String(index: 1, \"+enabled\")\n\ |
| String(index: 2, \"process\")\n\ |
| KernelObject(koid: <>, type: thread, name: \"initial-thread\", {process: koid(<>)})\n\ |
| Thread(index: 1, <>)\n\ |
| String(index: 3, \"name\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", FlowBegin(id: 1), {})\n\ |
| String(index: 4, \"k1\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", FlowBegin(id: 1), {k1: string(\"v1\")})\n\ |
| String(index: 5, \"k2\")\n\ |
| String(index: 6, \"k3\")\n\ |
| String(index: 7, \"k4\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", FlowBegin(id: 1), {k1: string(\"v1\"), k2: string(\"v2\"), k3: string(\"v3\"), k4: string(\"v4\")})\n\ |
| ", |
| ""); |
| |
| END_TRACE_TEST; |
| } |
| |
| TEST(TEST_SUITE, test_flow_step) { |
| BEGIN_TRACE_TEST; |
| |
| fixture_initialize_and_start_tracing(); |
| |
| TRACE_FLOW_STEP("+enabled", "name", 1u); |
| TRACE_FLOW_STEP("+enabled", "name", 1u, STR_ARGS1); |
| TRACE_FLOW_STEP("+enabled", "name", 1u, STR_ARGS4); |
| |
| ASSERT_RECORDS( |
| "\ |
| String(index: 1, \"+enabled\")\n\ |
| String(index: 2, \"process\")\n\ |
| KernelObject(koid: <>, type: thread, name: \"initial-thread\", {process: koid(<>)})\n\ |
| Thread(index: 1, <>)\n\ |
| String(index: 3, \"name\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", FlowStep(id: 1), {})\n\ |
| String(index: 4, \"k1\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", FlowStep(id: 1), {k1: string(\"v1\")})\n\ |
| String(index: 5, \"k2\")\n\ |
| String(index: 6, \"k3\")\n\ |
| String(index: 7, \"k4\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", FlowStep(id: 1), {k1: string(\"v1\"), k2: string(\"v2\"), k3: string(\"v3\"), k4: string(\"v4\")})\n\ |
| ", |
| ""); |
| |
| END_TRACE_TEST; |
| } |
| |
| TEST(TEST_SUITE, test_flow_end) { |
| BEGIN_TRACE_TEST; |
| |
| fixture_initialize_and_start_tracing(); |
| |
| TRACE_FLOW_END("+enabled", "name", 1u); |
| TRACE_FLOW_END("+enabled", "name", 1u, STR_ARGS1); |
| TRACE_FLOW_END("+enabled", "name", 1u, STR_ARGS4); |
| |
| ASSERT_RECORDS( |
| "\ |
| String(index: 1, \"+enabled\")\n\ |
| String(index: 2, \"process\")\n\ |
| KernelObject(koid: <>, type: thread, name: \"initial-thread\", {process: koid(<>)})\n\ |
| Thread(index: 1, <>)\n\ |
| String(index: 3, \"name\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", FlowEnd(id: 1), {})\n\ |
| String(index: 4, \"k1\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", FlowEnd(id: 1), {k1: string(\"v1\")})\n\ |
| String(index: 5, \"k2\")\n\ |
| String(index: 6, \"k3\")\n\ |
| String(index: 7, \"k4\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", FlowEnd(id: 1), {k1: string(\"v1\"), k2: string(\"v2\"), k3: string(\"v3\"), k4: string(\"v4\")})\n\ |
| ", |
| ""); |
| |
| END_TRACE_TEST; |
| } |
| |
| TEST(TEST_SUITE, test_kernel_object) { |
| BEGIN_TRACE_TEST; |
| |
| zx_handle_t event; |
| zx_event_create(0u, &event); |
| |
| fixture_initialize_and_start_tracing(); |
| |
| TRACE_KERNEL_OBJECT(event); |
| TRACE_KERNEL_OBJECT(event, STR_ARGS1); |
| TRACE_KERNEL_OBJECT(event, STR_ARGS4); |
| |
| ASSERT_RECORDS( |
| "\ |
| KernelObject(koid: <>, type: event, name: \"\", {})\n\ |
| String(index: 1, \"k1\")\n\ |
| KernelObject(koid: <>, type: event, name: \"\", {k1: string(\"v1\")})\n\ |
| String(index: 2, \"k2\")\n\ |
| String(index: 3, \"k3\")\n\ |
| String(index: 4, \"k4\")\n\ |
| KernelObject(koid: <>, type: event, name: \"\", {k1: string(\"v1\"), k2: string(\"v2\"), k3: string(\"v3\"), k4: string(\"v4\")})\n\ |
| ", |
| ""); |
| |
| zx_handle_close(event); |
| |
| END_TRACE_TEST; |
| } |
| |
| TEST(TEST_SUITE, test_null_arguments) { |
| BEGIN_TRACE_TEST; |
| |
| fixture_initialize_and_start_tracing(); |
| |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_NULL()); |
| |
| #ifdef __cplusplus |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", nullptr); |
| #endif // __cplusplus |
| |
| ASSERT_RECORDS( |
| "\ |
| String(index: 1, \"+enabled\")\n\ |
| String(index: 2, \"process\")\n\ |
| KernelObject(koid: <>, type: thread, name: \"initial-thread\", {process: koid(<>)})\n\ |
| Thread(index: 1, <>)\n\ |
| String(index: 3, \"name\")\n\ |
| String(index: 4, \"key\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: null})\n\ |
| ", |
| "\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: null})\n\ |
| "); |
| |
| END_TRACE_TEST; |
| } |
| |
| TEST(TEST_SUITE, test_bool_arguments) { |
| BEGIN_TRACE_TEST; |
| |
| fixture_initialize_and_start_tracing(); |
| |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_BOOL(true)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_BOOL(false)); |
| |
| #ifdef __cplusplus |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", true); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", false); |
| #endif // __cplusplus |
| |
| ASSERT_RECORDS( |
| "\ |
| String(index: 1, \"+enabled\")\n\ |
| String(index: 2, \"process\")\n\ |
| KernelObject(koid: <>, type: thread, name: \"initial-thread\", {process: koid(<>)})\n\ |
| Thread(index: 1, <>)\n\ |
| String(index: 3, \"name\")\n\ |
| String(index: 4, \"key\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: bool(true)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: bool(false)})\n\ |
| ", |
| "\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: bool(true)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: bool(false)})\n\ |
| "); |
| |
| END_TRACE_TEST; |
| } |
| |
| TEST(TEST_SUITE, test_int32_arguments) { |
| BEGIN_TRACE_TEST; |
| |
| fixture_initialize_and_start_tracing(); |
| |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_INT32(INT32_MIN)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_INT32(0)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_INT32(INT32_MAX)); |
| |
| #ifdef __cplusplus |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", int8_t(INT8_MIN)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", int8_t(0)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", int8_t(INT8_MAX)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", int16_t(INT16_MIN)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", int16_t(0)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", int16_t(INT16_MAX)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", int32_t(INT32_MIN)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", int32_t(0)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", int32_t(INT32_MAX)); |
| #endif // __cplusplus |
| |
| ASSERT_RECORDS( |
| "\ |
| String(index: 1, \"+enabled\")\n\ |
| String(index: 2, \"process\")\n\ |
| KernelObject(koid: <>, type: thread, name: \"initial-thread\", {process: koid(<>)})\n\ |
| Thread(index: 1, <>)\n\ |
| String(index: 3, \"name\")\n\ |
| String(index: 4, \"key\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int32(-2147483648)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int32(0)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int32(2147483647)})\n\ |
| ", |
| "\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int32(-128)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int32(0)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int32(127)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int32(-32768)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int32(0)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int32(32767)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int32(-2147483648)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int32(0)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int32(2147483647)})\n\ |
| "); |
| |
| END_TRACE_TEST; |
| } |
| |
| TEST(TEST_SUITE, test_uint32_arguments) { |
| BEGIN_TRACE_TEST; |
| |
| fixture_initialize_and_start_tracing(); |
| |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_UINT32(0)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_UINT32(UINT32_MAX)); |
| |
| #ifdef __cplusplus |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", uint8_t(0)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", uint8_t(UINT8_MAX)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", uint16_t(0)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", uint16_t(UINT16_MAX)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", uint32_t(0)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", uint32_t(UINT32_MAX)); |
| #endif // __cplusplus |
| |
| ASSERT_RECORDS( |
| "\ |
| String(index: 1, \"+enabled\")\n\ |
| String(index: 2, \"process\")\n\ |
| KernelObject(koid: <>, type: thread, name: \"initial-thread\", {process: koid(<>)})\n\ |
| Thread(index: 1, <>)\n\ |
| String(index: 3, \"name\")\n\ |
| String(index: 4, \"key\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: uint32(0)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: uint32(4294967295)})\n\ |
| ", |
| "\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: uint32(0)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: uint32(255)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: uint32(0)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: uint32(65535)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: uint32(0)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: uint32(4294967295)})\n\ |
| "); |
| |
| END_TRACE_TEST; |
| } |
| |
| TEST(TEST_SUITE, test_int64_arguments) { |
| BEGIN_TRACE_TEST; |
| |
| fixture_initialize_and_start_tracing(); |
| |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_INT64(INT64_MIN)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_INT64(0)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_INT64(INT64_MAX)); |
| |
| #ifdef __cplusplus |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", int64_t(INT64_MIN)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", int64_t(0)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", int64_t(INT64_MAX)); |
| #endif // __cplusplus |
| |
| ASSERT_RECORDS( |
| "\ |
| String(index: 1, \"+enabled\")\n\ |
| String(index: 2, \"process\")\n\ |
| KernelObject(koid: <>, type: thread, name: \"initial-thread\", {process: koid(<>)})\n\ |
| Thread(index: 1, <>)\n\ |
| String(index: 3, \"name\")\n\ |
| String(index: 4, \"key\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int64(-9223372036854775808)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int64(0)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int64(9223372036854775807)})\n\ |
| ", |
| "\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int64(-9223372036854775808)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int64(0)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int64(9223372036854775807)})\n\ |
| "); |
| |
| END_TRACE_TEST; |
| } |
| |
| TEST(TEST_SUITE, test_uint64_arguments) { |
| BEGIN_TRACE_TEST; |
| |
| fixture_initialize_and_start_tracing(); |
| |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_UINT64(0)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_UINT64(UINT64_MAX)); |
| |
| #ifdef __cplusplus |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", uint64_t(0)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", uint64_t(UINT64_MAX)); |
| #endif // __cplusplus |
| |
| ASSERT_RECORDS( |
| "\ |
| String(index: 1, \"+enabled\")\n\ |
| String(index: 2, \"process\")\n\ |
| KernelObject(koid: <>, type: thread, name: \"initial-thread\", {process: koid(<>)})\n\ |
| Thread(index: 1, <>)\n\ |
| String(index: 3, \"name\")\n\ |
| String(index: 4, \"key\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: uint64(0)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: uint64(18446744073709551615)})\n\ |
| ", |
| "\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: uint64(0)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: uint64(18446744073709551615)})\n\ |
| "); |
| |
| END_TRACE_TEST; |
| } |
| |
| TEST(TEST_SUITE, test_enum_arguments) { |
| BEGIN_TRACE_TEST; |
| |
| #ifdef __cplusplus |
| enum Int8Enum : int8_t { kInt8_Min = INT8_MIN, kInt8_Zero = 0, kInt8_Max = INT8_MAX }; |
| enum Uint8Enum : uint8_t { kUint8_Zero = 0, kUint8_Max = UINT8_MAX }; |
| enum Int16Enum : int16_t { kInt16_Min = INT16_MIN, kInt16_Zero = 0, kInt16_Max = INT16_MAX }; |
| enum Uint16Enum : uint16_t { kUint16_Zero = 0, kUint16_Max = UINT16_MAX }; |
| enum Int32Enum : int32_t { kInt32_Min = INT32_MIN, kInt32_Zero = 0, kInt32_Max = INT32_MAX }; |
| enum Uint32Enum : uint32_t { kUint32_Zero = 0, kUint32_Max = UINT32_MAX }; |
| enum Int64Enum : int64_t { kInt64_Min = INT64_MIN, kInt64_Zero = 0, kInt64_Max = INT64_MAX }; |
| enum Uint64Enum : uint64_t { kUint64_Zero = 0, kUint64_Max = UINT64_MAX }; |
| #else |
| enum Int32Enum { kInt32_Min = INT32_MIN, kInt32_Zero = 0, kInt32_Max = INT32_MAX }; |
| enum Uint32Enum { kUint32_Zero = 0, kUint32_Max = UINT32_MAX }; |
| enum Int64Enum { kInt64_Min = INT64_MIN, kInt64_Zero = 0, kInt64_Max = INT64_MAX }; |
| enum Uint64Enum { kUint64_Zero = 0, kUint64_Max = UINT64_MAX }; |
| #endif // __cplusplus |
| |
| fixture_initialize_and_start_tracing(); |
| |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_INT32(kInt32_Min)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_INT32(kInt32_Zero)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_INT32(kInt32_Max)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_UINT32(kUint32_Zero)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_UINT32(kUint32_Max)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_INT64(kInt64_Min)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_INT64(kInt64_Zero)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_INT64(kInt64_Max)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_UINT64(kUint64_Zero)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_UINT64(kUint64_Max)); |
| |
| #ifdef __cplusplus |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", kInt8_Min); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", kInt8_Zero); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", kInt8_Max); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", kUint8_Zero); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", kUint8_Max); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", kInt16_Min); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", kInt16_Zero); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", kInt16_Max); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", kUint16_Zero); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", kUint16_Max); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", kInt32_Min); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", kInt32_Zero); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", kInt32_Max); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", kUint32_Zero); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", kUint32_Max); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", kInt64_Min); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", kInt64_Zero); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", kInt64_Max); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", kUint64_Zero); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", kUint64_Max); |
| #endif // __cplusplus |
| |
| ASSERT_RECORDS( |
| "\ |
| String(index: 1, \"+enabled\")\n\ |
| String(index: 2, \"process\")\n\ |
| KernelObject(koid: <>, type: thread, name: \"initial-thread\", {process: koid(<>)})\n\ |
| Thread(index: 1, <>)\n\ |
| String(index: 3, \"name\")\n\ |
| String(index: 4, \"key\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int32(-2147483648)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int32(0)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int32(2147483647)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: uint32(0)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: uint32(4294967295)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int64(-9223372036854775808)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int64(0)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int64(9223372036854775807)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: uint64(0)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: uint64(18446744073709551615)})\n\ |
| ", |
| "\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int32(-128)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int32(0)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int32(127)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: uint32(0)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: uint32(255)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int32(-32768)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int32(0)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int32(32767)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: uint32(0)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: uint32(65535)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int32(-2147483648)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int32(0)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int32(2147483647)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: uint32(0)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: uint32(4294967295)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int64(-9223372036854775808)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int64(0)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: int64(9223372036854775807)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: uint64(0)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: uint64(18446744073709551615)})\n\ |
| "); |
| |
| END_TRACE_TEST; |
| } |
| |
| TEST(TEST_SUITE, test_double_arguments) { |
| BEGIN_TRACE_TEST; |
| |
| fixture_initialize_and_start_tracing(); |
| |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_DOUBLE(1.f)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_DOUBLE(1.)); |
| |
| #ifdef __cplusplus |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", 1.f); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", 1.); |
| #endif // __cplusplus |
| |
| ASSERT_RECORDS( |
| "\ |
| String(index: 1, \"+enabled\")\n\ |
| String(index: 2, \"process\")\n\ |
| KernelObject(koid: <>, type: thread, name: \"initial-thread\", {process: koid(<>)})\n\ |
| Thread(index: 1, <>)\n\ |
| String(index: 3, \"name\")\n\ |
| String(index: 4, \"key\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: double(1.000000)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: double(1.000000)})\n\ |
| ", |
| "\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: double(1.000000)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: double(1.000000)})\n\ |
| "); |
| |
| END_TRACE_TEST; |
| } |
| |
| TEST(TEST_SUITE, test_char_array_arguments) { |
| BEGIN_TRACE_TEST; |
| |
| char kCharArray[] = "char[n]..."; |
| |
| fixture_initialize_and_start_tracing(); |
| |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_CHAR_ARRAY(NULL, 0u)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_CHAR_ARRAY("", 0u)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_CHAR_ARRAY("literal", 7u)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_CHAR_ARRAY(kCharArray, 7u)); |
| |
| #ifdef __cplusplus |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", kCharArray); |
| #endif // __cplusplus |
| |
| ASSERT_RECORDS( |
| "\ |
| String(index: 1, \"+enabled\")\n\ |
| String(index: 2, \"process\")\n\ |
| KernelObject(koid: <>, type: thread, name: \"initial-thread\", {process: koid(<>)})\n\ |
| Thread(index: 1, <>)\n\ |
| String(index: 3, \"name\")\n\ |
| String(index: 4, \"key\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: string(\"\")})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: string(\"\")})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: string(\"literal\")})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: string(\"char[n]\")})\n\ |
| ", |
| "\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: string(\"char[n]...\")})\n\ |
| "); |
| |
| END_TRACE_TEST; |
| } |
| |
| TEST(TEST_SUITE, test_string_arguments) { |
| BEGIN_TRACE_TEST; |
| |
| char string[5] = {'?', '2', '3', '4', '\0'}; |
| string[0] = '1'; |
| |
| fixture_initialize_and_start_tracing(); |
| |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_STRING(NULL)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_STRING("")); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_STRING("literal")); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_STRING(string)); |
| |
| #ifdef __cplusplus |
| static const char nonterminated[5] = {'1', '2', '3', '4', '5'}; |
| |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", (const char*)nullptr); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", ""); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", "literal"); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", string); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", nonterminated); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", fbl::String("dynamic string")); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", std::string_view("piece", 3u)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", nonterminated); |
| #endif // __cplusplus |
| |
| ASSERT_RECORDS( |
| "\ |
| String(index: 1, \"+enabled\")\n\ |
| String(index: 2, \"process\")\n\ |
| KernelObject(koid: <>, type: thread, name: \"initial-thread\", {process: koid(<>)})\n\ |
| Thread(index: 1, <>)\n\ |
| String(index: 3, \"name\")\n\ |
| String(index: 4, \"key\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: string(\"\")})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: string(\"\")})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: string(\"literal\")})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: string(\"1234\")})\n\ |
| ", |
| "\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: string(\"\")})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: string(\"\")})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: string(\"literal\")})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: string(\"1234\")})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: string(\"12345\")})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: string(\"dynamic string\")})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: string(\"pie\")})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: string(\"12345\")})\n\ |
| "); |
| |
| END_TRACE_TEST; |
| } |
| |
| // This function is kept pending resolution of fxbug.dev/22929 when TA_STRING_LITERAL() |
| // is re-added. |
| TEST(TEST_SUITE, test_string_literal_arguments) { |
| BEGIN_TRACE_TEST; |
| |
| fixture_initialize_and_start_tracing(); |
| |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_STRING(NULL)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_STRING("")); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_STRING("literal")); |
| |
| ASSERT_RECORDS( |
| "\ |
| String(index: 1, \"+enabled\")\n\ |
| String(index: 2, \"process\")\n\ |
| KernelObject(koid: <>, type: thread, name: \"initial-thread\", {process: koid(<>)})\n\ |
| Thread(index: 1, <>)\n\ |
| String(index: 3, \"name\")\n\ |
| String(index: 4, \"key\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: string(\"\")})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: string(\"\")})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: string(\"literal\")})\n\ |
| ", |
| ""); |
| |
| END_TRACE_TEST; |
| } |
| |
| TEST(TEST_SUITE, test_pointer_arguments) { |
| BEGIN_TRACE_TEST; |
| |
| void* kNull = NULL; |
| const void* kConstNull = NULL; |
| volatile void* kVolatileNull = NULL; |
| const volatile void* kConstVolatileNull = NULL; |
| void* kPtr = &kNull; |
| const void* kConstPtr = &kNull; |
| volatile void* kVolatilePtr = &kNull; |
| const volatile void* kConstVolatilePtr = &kNull; |
| |
| fixture_initialize_and_start_tracing(); |
| |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_POINTER(kNull)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_POINTER(kConstNull)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_POINTER(kVolatileNull)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_POINTER(kConstVolatileNull)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_POINTER(kPtr)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_POINTER(kConstPtr)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_POINTER(kVolatilePtr)); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_POINTER(kConstVolatilePtr)); |
| |
| #ifdef __cplusplus |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", kNull); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", kConstNull); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", kVolatileNull); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", kConstVolatileNull); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", kPtr); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", kConstPtr); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", kVolatilePtr); |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", kConstVolatilePtr); |
| #endif // __cplusplus |
| |
| ASSERT_RECORDS( |
| "\ |
| String(index: 1, \"+enabled\")\n\ |
| String(index: 2, \"process\")\n\ |
| KernelObject(koid: <>, type: thread, name: \"initial-thread\", {process: koid(<>)})\n\ |
| Thread(index: 1, <>)\n\ |
| String(index: 3, \"name\")\n\ |
| String(index: 4, \"key\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: pointer(0)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: pointer(0)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: pointer(0)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: pointer(0)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: pointer(<>)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: pointer(<>)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: pointer(<>)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: pointer(<>)})\n\ |
| ", |
| "\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: pointer(0)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: pointer(0)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: pointer(0)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: pointer(0)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: pointer(<>)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: pointer(<>)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: pointer(<>)})\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: pointer(<>)})\n\ |
| "); |
| |
| END_TRACE_TEST; |
| } |
| |
| TEST(TEST_SUITE, test_koid_arguments) { |
| BEGIN_TRACE_TEST; |
| |
| fixture_initialize_and_start_tracing(); |
| |
| TRACE_DURATION_BEGIN("+enabled", "name", "key", TA_KOID(42u)); |
| |
| ASSERT_RECORDS( |
| "\ |
| String(index: 1, \"+enabled\")\n\ |
| String(index: 2, \"process\")\n\ |
| KernelObject(koid: <>, type: thread, name: \"initial-thread\", {process: koid(<>)})\n\ |
| Thread(index: 1, <>)\n\ |
| String(index: 3, \"name\")\n\ |
| String(index: 4, \"key\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {key: koid(<>)})\n\ |
| ", |
| ""); |
| |
| END_TRACE_TEST; |
| } |
| |
| TEST(TEST_SUITE, test_all_argument_counts) { |
| BEGIN_TRACE_TEST; |
| |
| fixture_initialize_and_start_tracing(); |
| |
| #define FN(n) TRACE_DURATION_BEGIN("+enabled", "name", I32_ARGS##n); |
| ALL15(FN) |
| #undef FN |
| |
| ASSERT_RECORDS( |
| "\ |
| String(index: 1, \"+enabled\")\n\ |
| String(index: 2, \"process\")\n\ |
| KernelObject(koid: <>, type: thread, name: \"initial-thread\", {process: koid(<>)})\n\ |
| Thread(index: 1, <>)\n\ |
| String(index: 3, \"name\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {})\n\ |
| String(index: 4, \"k1\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {k1: int32(1)})\n\ |
| String(index: 5, \"k2\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {k1: int32(1), k2: int32(2)})\n\ |
| String(index: 6, \"k3\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {k1: int32(1), k2: int32(2), k3: int32(3)})\n\ |
| String(index: 7, \"k4\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {k1: int32(1), k2: int32(2), k3: int32(3), k4: int32(4)})\n\ |
| String(index: 8, \"k5\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {k1: int32(1), k2: int32(2), k3: int32(3), k4: int32(4), k5: int32(5)})\n\ |
| String(index: 9, \"k6\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {k1: int32(1), k2: int32(2), k3: int32(3), k4: int32(4), k5: int32(5), k6: int32(6)})\n\ |
| String(index: 10, \"k7\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {k1: int32(1), k2: int32(2), k3: int32(3), k4: int32(4), k5: int32(5), k6: int32(6), k7: int32(7)})\n\ |
| String(index: 11, \"k8\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {k1: int32(1), k2: int32(2), k3: int32(3), k4: int32(4), k5: int32(5), k6: int32(6), k7: int32(7), k8: int32(8)})\n\ |
| String(index: 12, \"k9\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {k1: int32(1), k2: int32(2), k3: int32(3), k4: int32(4), k5: int32(5), k6: int32(6), k7: int32(7), k8: int32(8), k9: int32(9)})\n\ |
| String(index: 13, \"k10\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {k1: int32(1), k2: int32(2), k3: int32(3), k4: int32(4), k5: int32(5), k6: int32(6), k7: int32(7), k8: int32(8), k9: int32(9), k10: int32(10)})\n\ |
| String(index: 14, \"k11\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {k1: int32(1), k2: int32(2), k3: int32(3), k4: int32(4), k5: int32(5), k6: int32(6), k7: int32(7), k8: int32(8), k9: int32(9), k10: int32(10), k11: int32(11)})\n\ |
| String(index: 15, \"k12\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {k1: int32(1), k2: int32(2), k3: int32(3), k4: int32(4), k5: int32(5), k6: int32(6), k7: int32(7), k8: int32(8), k9: int32(9), k10: int32(10), k11: int32(11), k12: int32(12)})\n\ |
| String(index: 16, \"k13\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {k1: int32(1), k2: int32(2), k3: int32(3), k4: int32(4), k5: int32(5), k6: int32(6), k7: int32(7), k8: int32(8), k9: int32(9), k10: int32(10), k11: int32(11), k12: int32(12), k13: int32(13)})\n\ |
| String(index: 17, \"k14\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {k1: int32(1), k2: int32(2), k3: int32(3), k4: int32(4), k5: int32(5), k6: int32(6), k7: int32(7), k8: int32(8), k9: int32(9), k10: int32(10), k11: int32(11), k12: int32(12), k13: int32(13), k14: int32(14)})\n\ |
| String(index: 18, \"k15\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {k1: int32(1), k2: int32(2), k3: int32(3), k4: int32(4), k5: int32(5), k6: int32(6), k7: int32(7), k8: int32(8), k9: int32(9), k10: int32(10), k11: int32(11), k12: int32(12), k13: int32(13), k14: int32(14), k15: int32(15)})\n\ |
| ", |
| ""); |
| |
| END_TRACE_TEST; |
| } |
| |
| TEST(TEST_SUITE, test_declare_args) { |
| BEGIN_TRACE_TEST; |
| |
| #ifndef NTRACE |
| fixture_initialize_and_start_tracing(); |
| |
| trace_thread_ref_t thread_ref; |
| trace_string_ref_t category_ref; |
| trace_string_ref_t name_ref; |
| size_t num_args; |
| |
| trace_context_t* context = trace_acquire_context_for_category("+enabled", &category_ref); |
| ASSERT_NOT_NULL(context, ""); |
| |
| trace_context_register_current_thread(context, &thread_ref); |
| trace_context_register_string_literal(context, "name", &name_ref); |
| |
| num_args = 0; |
| TRACE_DECLARE_ARGS(context, args0); |
| ASSERT_EQ(TRACE_NUM_ARGS(args0), num_args, ""); |
| TRACE_COMPLETE_ARGS(context, args0, num_args); |
| trace_context_write_duration_begin_event_record(context, zx_ticks_get(), &thread_ref, |
| &category_ref, &name_ref, args0, num_args); |
| |
| num_args = 1; |
| TRACE_DECLARE_ARGS(context, args1, STR_ARGS1); |
| ASSERT_EQ(TRACE_NUM_ARGS(args1), num_args, ""); |
| TRACE_COMPLETE_ARGS(context, args1, num_args); |
| trace_context_write_duration_begin_event_record(context, zx_ticks_get(), &thread_ref, |
| &category_ref, &name_ref, args1, num_args); |
| |
| num_args = 4; |
| TRACE_DECLARE_ARGS(context, args4, STR_ARGS4); |
| ASSERT_EQ(TRACE_NUM_ARGS(args4), num_args, ""); |
| TRACE_COMPLETE_ARGS(context, args4, num_args); |
| trace_context_write_duration_begin_event_record(context, zx_ticks_get(), &thread_ref, |
| &category_ref, &name_ref, args4, num_args); |
| |
| trace_release_context(context); |
| |
| ASSERT_RECORDS( |
| "\ |
| String(index: 1, \"+enabled\")\n\ |
| String(index: 2, \"process\")\n\ |
| KernelObject(koid: <>, type: thread, name: \"initial-thread\", {process: koid(<>)})\n\ |
| Thread(index: 1, <>)\n\ |
| String(index: 3, \"name\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {})\n\ |
| String(index: 4, \"k1\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {k1: string(\"v1\")})\n\ |
| String(index: 5, \"k2\")\n\ |
| String(index: 6, \"k3\")\n\ |
| String(index: 7, \"k4\")\n\ |
| Event(ts: <>, pt: <>, category: \"+enabled\", name: \"name\", DurationBegin, {k1: string(\"v1\"), k2: string(\"v2\"), k3: string(\"v3\"), k4: string(\"v4\")})\n\ |
| ", |
| ""); |
| #endif // !NTRACE |
| |
| END_TRACE_TEST; |
| } |
| |
| #undef TEST_SUITE |
| |
| #endif // ZIRCON_SYSTEM_UTEST_TRACE_EVENT_TESTS_COMMON_H_ |