xref: /aosp_15_r20/external/perfetto/src/trace_processor/importers/systrace/systrace_parser_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/trace_processor/importers/systrace/systrace_parser.h"
18 
19 #include "test/gtest_and_gmock.h"
20 
21 namespace perfetto {
22 namespace trace_processor {
23 namespace systrace_utils {
24 namespace {
25 
26 using Result = SystraceParseResult;
27 
TEST(SystraceParserTest,SystraceEvent)28 TEST(SystraceParserTest, SystraceEvent) {
29   SystraceTracePoint result{};
30   ASSERT_EQ(ParseSystraceTracePoint("", &result), Result::kFailure);
31   ASSERT_EQ(ParseSystraceTracePoint("abcdef", &result), Result::kFailure);
32   ASSERT_EQ(ParseSystraceTracePoint("  ", &result), Result::kFailure);
33   ASSERT_EQ(ParseSystraceTracePoint("|", &result), Result::kFailure);
34   ASSERT_EQ(ParseSystraceTracePoint("||", &result), Result::kFailure);
35   ASSERT_EQ(ParseSystraceTracePoint("|||", &result), Result::kFailure);
36   ASSERT_EQ(ParseSystraceTracePoint("\n", &result), Result::kFailure);
37   ASSERT_EQ(ParseSystraceTracePoint("|\n", &result), Result::kFailure);
38   ASSERT_EQ(ParseSystraceTracePoint("||\n", &result), Result::kFailure);
39   ASSERT_EQ(ParseSystraceTracePoint("||\n", &result), Result::kFailure);
40   ASSERT_EQ(ParseSystraceTracePoint("B", &result), Result::kFailure);
41   ASSERT_EQ(ParseSystraceTracePoint("B\n", &result), Result::kFailure);
42   ASSERT_EQ(ParseSystraceTracePoint("C\n", &result), Result::kFailure);
43   ASSERT_EQ(ParseSystraceTracePoint("S\n", &result), Result::kFailure);
44   ASSERT_EQ(ParseSystraceTracePoint("F\n", &result), Result::kFailure);
45   ASSERT_EQ(ParseSystraceTracePoint("C", &result), Result::kFailure);
46   ASSERT_EQ(ParseSystraceTracePoint("S", &result), Result::kFailure);
47   ASSERT_EQ(ParseSystraceTracePoint("F", &result), Result::kFailure);
48   ASSERT_EQ(ParseSystraceTracePoint("I", &result), Result::kFailure);
49   ASSERT_EQ(ParseSystraceTracePoint("N", &result), Result::kFailure);
50 
51   ASSERT_EQ(ParseSystraceTracePoint("B|42|\n", &result), Result::kSuccess);
52   EXPECT_EQ(result, SystraceTracePoint::B(42, "[empty slice name]"));
53 
54   ASSERT_EQ(ParseSystraceTracePoint("B|1|foo", &result), Result::kSuccess);
55   EXPECT_EQ(result, SystraceTracePoint::B(1, "foo"));
56 
57   ASSERT_EQ(ParseSystraceTracePoint("B|42|Bar\n", &result), Result::kSuccess);
58   EXPECT_EQ(result, SystraceTracePoint::B(42, "Bar"));
59 
60   ASSERT_EQ(ParseSystraceTracePoint("E\n", &result), Result::kSuccess);
61   EXPECT_EQ(result, SystraceTracePoint::E(0));
62 
63   ASSERT_EQ(ParseSystraceTracePoint("E", &result), Result::kSuccess);
64   EXPECT_EQ(result, SystraceTracePoint::E(0));
65 
66   ASSERT_EQ(ParseSystraceTracePoint("E|42\n", &result), Result::kSuccess);
67   EXPECT_EQ(result, SystraceTracePoint::E(42));
68 
69   ASSERT_EQ(ParseSystraceTracePoint("E|42", &result), Result::kSuccess);
70   EXPECT_EQ(result, SystraceTracePoint::E(42));
71 
72   ASSERT_EQ(ParseSystraceTracePoint("C|543|foo|8", &result), Result::kSuccess);
73   EXPECT_EQ(result, SystraceTracePoint::C(543, "foo", 8));
74 
75   ASSERT_EQ(
76       ParseSystraceTracePoint("C|543|foo|8|chromium_group_ignored", &result),
77       Result::kSuccess);
78   EXPECT_EQ(result, SystraceTracePoint::C(543, "foo", 8));
79 
80   ASSERT_EQ(ParseSystraceTracePoint("S|", &result), Result::kFailure);
81 
82   ASSERT_EQ(ParseSystraceTracePoint("S|123|foo|456", &result),
83             Result::kSuccess);
84   EXPECT_EQ(result, SystraceTracePoint::S(123, "foo", 456));
85 
86   ASSERT_EQ(ParseSystraceTracePoint("F|123|foo|456", &result),
87             Result::kSuccess);
88   EXPECT_EQ(result, SystraceTracePoint::F(123, "foo", 456));
89 
90   ASSERT_EQ(ParseSystraceTracePoint("I||test", &result), Result::kFailure);
91   ASSERT_EQ(ParseSystraceTracePoint("I|123|", &result), Result::kFailure);
92   ASSERT_EQ(ParseSystraceTracePoint("I|123|event\n", &result),
93             Result::kSuccess);
94   EXPECT_EQ(result, SystraceTracePoint::I(123, "event"));
95 
96   ASSERT_EQ(ParseSystraceTracePoint("N||test|test", &result), Result::kFailure);
97   ASSERT_EQ(ParseSystraceTracePoint("N|123|test|", &result), Result::kFailure);
98   ASSERT_EQ(ParseSystraceTracePoint("N|123||test", &result), Result::kFailure);
99   ASSERT_EQ(ParseSystraceTracePoint("N|123|track|event\n", &result),
100             Result::kSuccess);
101   EXPECT_EQ(result, SystraceTracePoint::N(123, "track", "event"));
102 
103   ASSERT_EQ(ParseSystraceTracePoint("trace_event_clock_sync: parent_ts=0.123\n",
104                                     &result),
105             Result::kUnsupported);
106   ASSERT_EQ(ParseSystraceTracePoint("trace_event_clock_sync: realtime_ts=123\n",
107                                     &result),
108             Result::kUnsupported);
109 }
110 
TEST(SystraceParserTest,AsyncTrackEvents)111 TEST(SystraceParserTest, AsyncTrackEvents) {
112   SystraceTracePoint result{};
113   ASSERT_EQ(ParseSystraceTracePoint("G", &result), Result::kFailure);
114   ASSERT_EQ(ParseSystraceTracePoint("H", &result), Result::kFailure);
115 
116   ASSERT_EQ(ParseSystraceTracePoint("G||test|test|", &result),
117             Result::kFailure);
118   ASSERT_EQ(ParseSystraceTracePoint("G|123|test||", &result), Result::kFailure);
119   ASSERT_EQ(ParseSystraceTracePoint("G|123||test|", &result), Result::kFailure);
120   ASSERT_EQ(ParseSystraceTracePoint("G|123|track|event|", &result),
121             Result::kFailure);
122   ASSERT_EQ(ParseSystraceTracePoint("G|123|track|event|456", &result),
123             Result::kSuccess);
124   EXPECT_EQ(result, SystraceTracePoint::G(123, "track", "event", 456));
125 
126   ASSERT_EQ(ParseSystraceTracePoint("H||test|test|", &result),
127             Result::kFailure);
128   ASSERT_EQ(ParseSystraceTracePoint("H|123|test||", &result), Result::kFailure);
129   ASSERT_EQ(ParseSystraceTracePoint("H|123||test|", &result), Result::kFailure);
130   ASSERT_EQ(ParseSystraceTracePoint("H|123|track|event|", &result),
131             Result::kFailure);
132   ASSERT_EQ(ParseSystraceTracePoint("H|123|track|456", &result),
133             Result::kSuccess);
134   EXPECT_EQ(result, SystraceTracePoint::H(123, "track", 456));
135   ASSERT_EQ(ParseSystraceTracePoint("H|123|track|event|456", &result),
136             Result::kSuccess);
137   EXPECT_EQ(result, SystraceTracePoint::H(123, "track", 456));
138 }
139 
140 }  // namespace
141 }  // namespace systrace_utils
142 }  // namespace trace_processor
143 }  // namespace perfetto
144