xref: /aosp_15_r20/external/perfetto/src/tracing/core/null_trace_writer_unittest.cc (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1 /*
2  * Copyright (C) 2018 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #include "src/tracing/core/null_trace_writer.h"
18 
19 #include "perfetto/ext/base/utils.h"
20 #include "perfetto/ext/tracing/core/trace_writer.h"
21 #include "perfetto/protozero/scattered_stream_writer.h"
22 #include "src/base/test/utils.h"
23 #include "test/gtest_and_gmock.h"
24 
25 #include "protos/perfetto/trace/test_event.pbzero.h"
26 #include "protos/perfetto/trace/trace_packet.pbzero.h"
27 
28 namespace perfetto {
29 namespace {
30 
TEST(NullTraceWriterTest,WriterIdIsZero)31 TEST(NullTraceWriterTest, WriterIdIsZero) {
32   NullTraceWriter writer;
33   EXPECT_EQ(writer.writer_id(), 0);
34 }
35 
TEST(NullTraceWriterTest,NewTracePacket)36 TEST(NullTraceWriterTest, NewTracePacket) {
37   NullTraceWriter writer;
38   for (size_t i = 0; i < 10000; i++) {
39     auto packet = writer.NewTracePacket();
40     packet->set_for_testing()->set_str("Hello, world!");
41   }
42 }
43 
44 #if defined(GTEST_HAS_DEATH_TEST)
TEST(NullTraceWriterDeathTest,NewTracePacketTakeStreamWriterNoFinish)45 TEST(NullTraceWriterDeathTest, NewTracePacketTakeStreamWriterNoFinish) {
46   NullTraceWriter writer;
47   auto trace_packet_handle = writer.NewTracePacket();
48   protozero::ScatteredStreamWriter* ss = trace_packet_handle.TakeStreamWriter();
49   const uint8_t payload[] = {'I', 'g', 'n', 'o', 'r', 'e', 'd'};
50   ss->WriteBytes(payload, sizeof payload);
51 
52   EXPECT_DCHECK_DEATH(writer.NewTracePacket(););
53 }
54 #endif  // defined(GTEST_HAS_DEATH_TEST)
55 
TEST(NullTraceWriterTest,NewTracePacketTakeStreamWriterWithFinish)56 TEST(NullTraceWriterTest, NewTracePacketTakeStreamWriterWithFinish) {
57   NullTraceWriter writer;
58   for (size_t i = 0; i < 10000; i++) {
59     auto trace_packet_handle = writer.NewTracePacket();
60     protozero::ScatteredStreamWriter* ss =
61         trace_packet_handle.TakeStreamWriter();
62     const uint8_t payload[] = {'I', 'g', 'n', 'o', 'r', 'e', 'd'};
63     ss->WriteBytes(payload, sizeof payload);
64     writer.FinishTracePacket();
65   }
66 }
67 
TEST(NullTraceWriterTest,FlushCallbackIsCalled)68 TEST(NullTraceWriterTest, FlushCallbackIsCalled) {
69   NullTraceWriter writer;
70   writer.Flush();
71   bool was_called = false;
72   writer.Flush([&was_called] { was_called = true; });
73   EXPECT_TRUE(was_called);
74 }
75 
76 }  // namespace
77 }  // namespace perfetto
78