blob: 29a55900e8b4c081c6abc48835e7c784b61a3431 [file] [log] [blame]
Christopher Ferris626efb72016-02-23 18:02:20 -08001/*
2 * Copyright (C) 2016 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 <sys/types.h>
18#include <unistd.h>
19
20#include <memory>
21#include <string>
22
23#include <android-base/file.h>
24#include <android-base/stringprintf.h>
Christopher Ferris626efb72016-02-23 18:02:20 -080025#include <gtest/gtest.h>
26
Elliott Hughes8e9aeb92017-11-10 10:22:07 -080027#include "../trace-dev.cpp"
Christopher Ferris626efb72016-02-23 18:02:20 -080028
29class TraceDevTest : public ::testing::Test {
30 protected:
31 void SetUp() override {
32 lseek(tmp_file_.fd, 0, SEEK_SET);
33 atrace_marker_fd = tmp_file_.fd;
34 }
35
36 void TearDown() override {
37 atrace_marker_fd = -1;
38 }
39
40 TemporaryFile tmp_file_;
41
42 static std::string MakeName(size_t length) {
43 std::string name;
44 for (size_t i = 0; i < length; i++) {
45 name += '0' + (i % 10);
46 }
47 return name;
48 }
49};
50
51TEST_F(TraceDevTest, atrace_begin_body_normal) {
52 atrace_begin_body("fake_name");
53
54 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
55
56 std::string actual;
57 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
58 std::string expected = android::base::StringPrintf("B|%d|fake_name", getpid());
59 ASSERT_STREQ(expected.c_str(), actual.c_str());
60}
61
62TEST_F(TraceDevTest, atrace_begin_body_exact) {
63 std::string expected = android::base::StringPrintf("B|%d|", getpid());
64 std::string name = MakeName(ATRACE_MESSAGE_LENGTH - expected.length() - 1);
65 atrace_begin_body(name.c_str());
66
67 ASSERT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
68 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
69
70 std::string actual;
71 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
72 expected += name;
73 ASSERT_STREQ(expected.c_str(), actual.c_str());
74
75 // Add a single character and verify we get the exact same value as before.
76 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
77 name += '*';
78 atrace_begin_body(name.c_str());
79 EXPECT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
80 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
81 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
82 ASSERT_STREQ(expected.c_str(), actual.c_str());
83}
84
85TEST_F(TraceDevTest, atrace_begin_body_truncated) {
86 std::string expected = android::base::StringPrintf("B|%d|", getpid());
87 std::string name = MakeName(2 * ATRACE_MESSAGE_LENGTH);
88 atrace_begin_body(name.c_str());
89
90 ASSERT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
91 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
92
93 std::string actual;
94 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
95 int expected_len = ATRACE_MESSAGE_LENGTH - expected.length() - 1;
96 expected += android::base::StringPrintf("%.*s", expected_len, name.c_str());
97 ASSERT_STREQ(expected.c_str(), actual.c_str());
98}
99
100TEST_F(TraceDevTest, atrace_async_begin_body_normal) {
101 atrace_async_begin_body("fake_name", 12345);
102
103 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
104
105 std::string actual;
106 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
107 std::string expected = android::base::StringPrintf("S|%d|fake_name|12345", getpid());
108 ASSERT_STREQ(expected.c_str(), actual.c_str());
109}
110
111TEST_F(TraceDevTest, atrace_async_begin_body_exact) {
112 std::string expected = android::base::StringPrintf("S|%d|", getpid());
113 std::string name = MakeName(ATRACE_MESSAGE_LENGTH - expected.length() - 7);
114 atrace_async_begin_body(name.c_str(), 12345);
115
116 ASSERT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
117 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
118
119 std::string actual;
120 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
121 expected += name + "|12345";
122 ASSERT_STREQ(expected.c_str(), actual.c_str());
123
124 // Add a single character and verify we get the exact same value as before.
125 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
126 name += '*';
127 atrace_async_begin_body(name.c_str(), 12345);
128 EXPECT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
129 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
130 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
131 ASSERT_STREQ(expected.c_str(), actual.c_str());
132}
133
134TEST_F(TraceDevTest, atrace_async_begin_body_truncated) {
135 std::string expected = android::base::StringPrintf("S|%d|", getpid());
136 std::string name = MakeName(2 * ATRACE_MESSAGE_LENGTH);
137 atrace_async_begin_body(name.c_str(), 12345);
138
139 ASSERT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
140 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
141
142 std::string actual;
143 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
144 int expected_len = ATRACE_MESSAGE_LENGTH - expected.length() - 7;
145 expected += android::base::StringPrintf("%.*s|12345", expected_len, name.c_str());
146 ASSERT_STREQ(expected.c_str(), actual.c_str());
147}
148
149TEST_F(TraceDevTest, atrace_async_end_body_normal) {
150 atrace_async_end_body("fake_name", 12345);
151
152 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
153
154 std::string actual;
155 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
156 std::string expected = android::base::StringPrintf("F|%d|fake_name|12345", getpid());
157 ASSERT_STREQ(expected.c_str(), actual.c_str());
158}
159
160TEST_F(TraceDevTest, atrace_async_end_body_exact) {
161 std::string expected = android::base::StringPrintf("F|%d|", getpid());
162 std::string name = MakeName(ATRACE_MESSAGE_LENGTH - expected.length() - 7);
163 atrace_async_end_body(name.c_str(), 12345);
164
165 ASSERT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
166 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
167
168 std::string actual;
169 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
170 expected += name + "|12345";
171 ASSERT_STREQ(expected.c_str(), actual.c_str());
172
173 // Add a single character and verify we get the exact same value as before.
174 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
175 name += '*';
176 atrace_async_end_body(name.c_str(), 12345);
177 EXPECT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
178 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
179 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
180 ASSERT_STREQ(expected.c_str(), actual.c_str());
181}
182
183TEST_F(TraceDevTest, atrace_async_end_body_truncated) {
184 std::string expected = android::base::StringPrintf("F|%d|", getpid());
185 std::string name = MakeName(2 * ATRACE_MESSAGE_LENGTH);
186 atrace_async_end_body(name.c_str(), 12345);
187
188 ASSERT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
189 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
190
191 std::string actual;
192 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
193 int expected_len = ATRACE_MESSAGE_LENGTH - expected.length() - 7;
194 expected += android::base::StringPrintf("%.*s|12345", expected_len, name.c_str());
195 ASSERT_STREQ(expected.c_str(), actual.c_str());
196}
197
Lucas Dupin2c2c5d92021-12-08 16:37:22 -0800198TEST_F(TraceDevTest, atrace_instant_body_normal) {
199 atrace_instant_body("fake_name");
200
201 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
202
203 std::string actual;
204 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
205 std::string expected = android::base::StringPrintf("I|%d|fake_name", getpid());
206 ASSERT_STREQ(expected.c_str(), actual.c_str());
207}
208
209TEST_F(TraceDevTest, atrace_instant_body_exact) {
210 std::string expected = android::base::StringPrintf("I|%d|", getpid());
211 std::string name = MakeName(ATRACE_MESSAGE_LENGTH - expected.length() - 1);
212 atrace_instant_body(name.c_str());
213
214 ASSERT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
215 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
216
217 std::string actual;
218 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
219 expected += name;
220 ASSERT_STREQ(expected.c_str(), actual.c_str());
221
222 // Add a single character and verify we get the exact same value as before.
223 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
224 name += '*';
225 atrace_instant_body(name.c_str());
226 EXPECT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
227 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
228 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
229 ASSERT_STREQ(expected.c_str(), actual.c_str());
230}
231
232TEST_F(TraceDevTest, atrace_instant_body_truncated) {
233 std::string expected = android::base::StringPrintf("I|%d|", getpid());
234 std::string name = MakeName(2 * ATRACE_MESSAGE_LENGTH);
235 atrace_instant_body(name.c_str());
236
237 ASSERT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
238 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
239
240 std::string actual;
241 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
242 int expected_len = ATRACE_MESSAGE_LENGTH - expected.length() - 1;
243 expected += android::base::StringPrintf("%.*s", expected_len, name.c_str());
244 ASSERT_STREQ(expected.c_str(), actual.c_str());
245}
246
247TEST_F(TraceDevTest, atrace_instant_for_track_body_normal) {
248 atrace_instant_for_track_body("fake_track", "fake_name");
249
250 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
251
252 std::string actual;
253 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
254 std::string expected = android::base::StringPrintf("N|%d|fake_track|fake_name", getpid());
255 ASSERT_STREQ(expected.c_str(), actual.c_str());
256}
257
Ray Ye9a542402022-03-15 23:28:01 +0000258TEST_F(TraceDevTest, atrace_instant_for_track_body_exact_track_name) {
259 const int name_size = 5;
Lucas Dupin2c2c5d92021-12-08 16:37:22 -0800260 std::string expected = android::base::StringPrintf("N|%d|", getpid());
Ray Ye9a542402022-03-15 23:28:01 +0000261 std::string track_name = MakeName(ATRACE_MESSAGE_LENGTH - expected.length() - 1 - name_size);
262 atrace_instant_for_track_body(track_name.c_str(), "name");
Lucas Dupin2c2c5d92021-12-08 16:37:22 -0800263
264 ASSERT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
265 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
266
267 std::string actual;
268 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
Ray Ye9a542402022-03-15 23:28:01 +0000269 expected += track_name + "|name";
Lucas Dupin2c2c5d92021-12-08 16:37:22 -0800270 ASSERT_STREQ(expected.c_str(), actual.c_str());
271
Ray Ye9a542402022-03-15 23:28:01 +0000272 // Add a single character and verify name truncation
Lucas Dupin2c2c5d92021-12-08 16:37:22 -0800273 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
Ray Ye9a542402022-03-15 23:28:01 +0000274 track_name += '*';
275 expected = android::base::StringPrintf("N|%d|", getpid());
276 expected += track_name + "|nam";
277 atrace_instant_for_track_body(track_name.c_str(), "name");
Lucas Dupin2c2c5d92021-12-08 16:37:22 -0800278 EXPECT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
279 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
280 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
281 ASSERT_STREQ(expected.c_str(), actual.c_str());
282}
283
Ray Ye9a542402022-03-15 23:28:01 +0000284TEST_F(TraceDevTest, atrace_instant_for_track_body_truncated_track_name) {
Lucas Dupin2c2c5d92021-12-08 16:37:22 -0800285 std::string expected = android::base::StringPrintf("N|%d|", getpid());
Ray Ye9a542402022-03-15 23:28:01 +0000286 std::string track_name = MakeName(2 * ATRACE_MESSAGE_LENGTH);
287 atrace_instant_for_track_body(track_name.c_str(), "name");
Lucas Dupin2c2c5d92021-12-08 16:37:22 -0800288
289 ASSERT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
290 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
291
292 std::string actual;
293 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
Ray Ye9a542402022-03-15 23:28:01 +0000294 int expected_len = ATRACE_MESSAGE_LENGTH - expected.length() - 3;
295 expected += android::base::StringPrintf("%.*s|n", expected_len, track_name.c_str());
296 ASSERT_STREQ(expected.c_str(), actual.c_str());
297}
298
299TEST_F(TraceDevTest, atrace_instant_for_track_body_exact_name) {
300 const int track_name_size = 11;
301 std::string expected = android::base::StringPrintf("N|%d|", getpid());
302 std::string name = MakeName(ATRACE_MESSAGE_LENGTH - expected.length() - 1 - track_name_size);
303 atrace_instant_for_track_body("track_name", name.c_str());
304
305 ASSERT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
306 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
307
308 std::string actual;
309 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
310 expected += "track_name|" + name;
311 ASSERT_STREQ(expected.c_str(), actual.c_str());
312
313 // Add a single character and verify we get the same value as before.
314 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
315 name += '*';
316 atrace_instant_for_track_body("track_name", name.c_str());
317 EXPECT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
318 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
319 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
320 ASSERT_STREQ(expected.c_str(), actual.c_str());
321}
322
323TEST_F(TraceDevTest, atrace_instant_for_track_body_truncated_name) {
324 std::string expected = android::base::StringPrintf("N|%d|track_name|", getpid());
325 std::string name = MakeName(2 * ATRACE_MESSAGE_LENGTH);
326 atrace_instant_for_track_body("track_name", name.c_str());
327
328 ASSERT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
329 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
330
331 std::string actual;
332 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
333 int expected_len = ATRACE_MESSAGE_LENGTH - expected.length() - 1;
334 expected += android::base::StringPrintf("%.*s", expected_len, name.c_str());
335 ASSERT_STREQ(expected.c_str(), actual.c_str());
336}
337
338TEST_F(TraceDevTest, atrace_instant_for_track_body_truncated_both) {
339 std::string expected = android::base::StringPrintf("N|%d|", getpid());
340 std::string name = MakeName(2 * ATRACE_MESSAGE_LENGTH);
341 std::string track_name = MakeName(2 * ATRACE_MESSAGE_LENGTH);
342 atrace_instant_for_track_body(track_name.c_str(), name.c_str());
343
344 ASSERT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
345 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
346
347 std::string actual;
348 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
349 int expected_len = ATRACE_MESSAGE_LENGTH - expected.length() - 3;
350 expected +=
351 android::base::StringPrintf("%.*s|%.1s", expected_len, track_name.c_str(), name.c_str());
Lucas Dupin2c2c5d92021-12-08 16:37:22 -0800352 ASSERT_STREQ(expected.c_str(), actual.c_str());
353}
354
Christopher Ferris626efb72016-02-23 18:02:20 -0800355TEST_F(TraceDevTest, atrace_int_body_normal) {
356 atrace_int_body("fake_name", 12345);
357
358 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
359
360 std::string actual;
361 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
362 std::string expected = android::base::StringPrintf("C|%d|fake_name|12345", getpid());
363 ASSERT_STREQ(expected.c_str(), actual.c_str());
364}
365
366TEST_F(TraceDevTest, atrace_int_body_exact) {
367 std::string expected = android::base::StringPrintf("C|%d|", getpid());
368 std::string name = MakeName(ATRACE_MESSAGE_LENGTH - expected.length() - 7);
369 atrace_int_body(name.c_str(), 12345);
370
371 ASSERT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
372 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
373
374 std::string actual;
375 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
376 expected += name + "|12345";
377 ASSERT_STREQ(expected.c_str(), actual.c_str());
378
379 // Add a single character and verify we get the exact same value as before.
380 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
381 name += '*';
382 atrace_int_body(name.c_str(), 12345);
383 EXPECT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
384 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
385 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
386 ASSERT_STREQ(expected.c_str(), actual.c_str());
387}
388
389TEST_F(TraceDevTest, atrace_int_body_truncated) {
390 std::string expected = android::base::StringPrintf("C|%d|", getpid());
391 std::string name = MakeName(2 * ATRACE_MESSAGE_LENGTH);
392 atrace_int_body(name.c_str(), 12345);
393
394 ASSERT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
395 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
396
397 std::string actual;
398 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
399 int expected_len = ATRACE_MESSAGE_LENGTH - expected.length() - 7;
400 expected += android::base::StringPrintf("%.*s|12345", expected_len, name.c_str());
401 ASSERT_STREQ(expected.c_str(), actual.c_str());
402}
403
404TEST_F(TraceDevTest, atrace_int64_body_normal) {
405 atrace_int64_body("fake_name", 17179869183L);
406
407 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
408
409 std::string actual;
410 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
411 std::string expected = android::base::StringPrintf("C|%d|fake_name|17179869183", getpid());
412 ASSERT_STREQ(expected.c_str(), actual.c_str());
413}
414
415TEST_F(TraceDevTest, atrace_int64_body_exact) {
416 std::string expected = android::base::StringPrintf("C|%d|", getpid());
417 std::string name = MakeName(ATRACE_MESSAGE_LENGTH - expected.length() - 13);
418 atrace_int64_body(name.c_str(), 17179869183L);
419
420 ASSERT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
421 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
422
423 std::string actual;
424 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
425 expected += name + "|17179869183";
426 ASSERT_STREQ(expected.c_str(), actual.c_str());
427
428 // Add a single character and verify we get the exact same value as before.
429 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
430 name += '*';
431 atrace_int64_body(name.c_str(), 17179869183L);
432 EXPECT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
433 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
434 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
435 ASSERT_STREQ(expected.c_str(), actual.c_str());
436}
437
438TEST_F(TraceDevTest, atrace_int64_body_truncated) {
439 std::string expected = android::base::StringPrintf("C|%d|", getpid());
440 std::string name = MakeName(2 * ATRACE_MESSAGE_LENGTH);
441 atrace_int64_body(name.c_str(), 17179869183L);
442
443 ASSERT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
444 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
445
446 std::string actual;
447 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
448 int expected_len = ATRACE_MESSAGE_LENGTH - expected.length() - 13;
449 expected += android::base::StringPrintf("%.*s|17179869183", expected_len, name.c_str());
450 ASSERT_STREQ(expected.c_str(), actual.c_str());
451}