blob: 8be5e7470bf70412df1a61d255f0a72affa36656 [file] [log] [blame]
Primiano Tucci4f9b6d72017-12-05 20:59:16 +00001/*
2 * Copyright (C) 2017 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
Primiano Tucci3cbb10a2018-04-10 17:52:40 +010017#include "src/ftrace_reader/cpu_reader.h"
Primiano Tucci4f9b6d72017-12-05 20:59:16 +000018
Anna Zappone5a407c12018-02-22 14:21:38 +000019#include <sys/stat.h>
20
Hector Dearmancc6dcb02017-12-12 16:48:43 +000021#include "gmock/gmock.h"
Primiano Tucci4f9b6d72017-12-05 20:59:16 +000022#include "gtest/gtest.h"
Florian Mayerba3eeae2018-03-12 11:48:21 +000023#include "src/ftrace_reader/event_info.h"
Primiano Tucci3cbb10a2018-04-10 17:52:40 +010024#include "src/ftrace_reader/proto_translation_table.h"
Primiano Tucci4f9b6d72017-12-05 20:59:16 +000025
Primiano Tucci808d6df2018-03-31 13:24:18 +010026#include "perfetto/base/build_config.h"
Anna Zapponebba19412018-01-24 16:38:18 +000027#include "perfetto/base/utils.h"
Primiano Tucci4f9b6d72017-12-05 20:59:16 +000028#include "perfetto/protozero/scattered_stream_writer.h"
Oystein Eftevaag72daa6c2018-04-13 10:34:06 -070029#include "src/protozero/scattered_stream_delegate_for_testing.h"
Primiano Tucci4f9b6d72017-12-05 20:59:16 +000030
Primiano Tucci20b760c2018-01-19 12:36:12 +000031#include "perfetto/trace/ftrace/ftrace_event.pb.h"
32#include "perfetto/trace/ftrace/ftrace_event.pbzero.h"
33#include "perfetto/trace/ftrace/ftrace_event_bundle.pb.h"
34#include "perfetto/trace/ftrace/ftrace_event_bundle.pbzero.h"
Hector Dearmanbc8368e2018-01-25 17:34:11 +000035#include "src/ftrace_reader/test/cpu_reader_support.h"
Hector Dearmancc6dcb02017-12-12 16:48:43 +000036#include "src/ftrace_reader/test/test_messages.pb.h"
37#include "src/ftrace_reader/test/test_messages.pbzero.h"
38
Anna Zappone5a407c12018-02-22 14:21:38 +000039using testing::Each;
40using testing::ElementsAre;
Hector Dearmancc6dcb02017-12-12 16:48:43 +000041using testing::ElementsAreArray;
Hector Dearman8fd632b2018-02-27 13:42:50 +000042using testing::EndsWith;
Anna Zappone5a407c12018-02-22 14:21:38 +000043using testing::Eq;
44using testing::Pair;
Hector Dearman8fd632b2018-02-27 13:42:50 +000045using testing::StartsWith;
Hector Dearmanf19e7c52018-03-06 10:25:01 +000046using testing::Contains;
Primiano Tucci4f9b6d72017-12-05 20:59:16 +000047
48namespace perfetto {
49
50namespace {
51
Florian Mayerdbd08782018-03-21 14:07:51 +000052constexpr uint64_t kNanoInSecond = 1000 * 1000 * 1000;
53constexpr uint64_t kNanoInMicro = 1000;
Hector Dearman71372ea2017-12-06 17:13:37 +000054
55::testing::AssertionResult WithinOneMicrosecond(uint64_t actual_ns,
56 uint64_t expected_s,
57 uint64_t expected_us) {
58 // Round to closest us.
59 uint64_t actual_us = (actual_ns + kNanoInMicro / 2) / kNanoInMicro;
60 uint64_t total_expected_us = expected_s * 1000 * 1000 + expected_us;
Florian Mayer22e4b392018-03-08 10:20:11 +000061 if (actual_us == total_expected_us)
Hector Dearman71372ea2017-12-06 17:13:37 +000062 return ::testing::AssertionSuccess();
Florian Mayer22e4b392018-03-08 10:20:11 +000063
64 return ::testing::AssertionFailure()
65 << actual_ns / kNanoInSecond << "."
66 << (actual_ns % kNanoInSecond) / kNanoInMicro << " vs. " << expected_s
67 << "." << expected_us;
Hector Dearman71372ea2017-12-06 17:13:37 +000068}
Primiano Tucci4f9b6d72017-12-05 20:59:16 +000069
Hector Dearman5add6542017-12-06 15:47:42 +000070// Single class to manage the whole protozero -> scattered stream -> chunks ->
71// single buffer -> real proto dance. Has a method: writer() to get an
Hector Dearmancc6dcb02017-12-12 16:48:43 +000072// protozero ftrace bundle writer and a method ParseProto() to attempt to
Hector Dearman5add6542017-12-06 15:47:42 +000073// parse whatever has been written so far into a proto message.
Hector Dearmancc6dcb02017-12-12 16:48:43 +000074template <class ZeroT, class ProtoT>
75class ProtoProvider {
Primiano Tucci4f9b6d72017-12-05 20:59:16 +000076 public:
Hector Dearmancc6dcb02017-12-12 16:48:43 +000077 explicit ProtoProvider(size_t chunk_size)
Hector Dearman5add6542017-12-06 15:47:42 +000078 : chunk_size_(chunk_size), delegate_(chunk_size_), stream_(&delegate_) {
79 delegate_.set_writer(&stream_);
80 writer_.Reset(&stream_);
Primiano Tucci4f9b6d72017-12-05 20:59:16 +000081 }
Hector Dearmancc6dcb02017-12-12 16:48:43 +000082 ~ProtoProvider() = default;
Primiano Tucci4f9b6d72017-12-05 20:59:16 +000083
Hector Dearmancc6dcb02017-12-12 16:48:43 +000084 ZeroT* writer() { return &writer_; }
Primiano Tucci4f9b6d72017-12-05 20:59:16 +000085
Hector Dearman5add6542017-12-06 15:47:42 +000086 // Stitch together the scattered chunks into a single buffer then attempt
87 // to parse the buffer as a FtraceEventBundle. Returns the FtraceEventBundle
88 // on success and nullptr on failure.
Hector Dearmancc6dcb02017-12-12 16:48:43 +000089 std::unique_ptr<ProtoT> ParseProto() {
90 auto bundle = std::unique_ptr<ProtoT>(new ProtoT());
Hector Dearman5add6542017-12-06 15:47:42 +000091 size_t msg_size =
92 delegate_.chunks().size() * chunk_size_ - stream_.bytes_available();
93 std::unique_ptr<uint8_t[]> buffer = delegate_.StitchChunks(msg_size);
94 if (!bundle->ParseFromArray(buffer.get(), static_cast<int>(msg_size)))
95 return nullptr;
96 return bundle;
Primiano Tucci4f9b6d72017-12-05 20:59:16 +000097 }
98
99 private:
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000100 ProtoProvider(const ProtoProvider&) = delete;
101 ProtoProvider& operator=(const ProtoProvider&) = delete;
Hector Dearman5add6542017-12-06 15:47:42 +0000102
103 size_t chunk_size_;
Hector Dearmanbc8368e2018-01-25 17:34:11 +0000104 ScatteredStreamDelegateForTesting delegate_;
Hector Dearman5add6542017-12-06 15:47:42 +0000105 protozero::ScatteredStreamWriter stream_;
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000106 ZeroT writer_;
Primiano Tucci4f9b6d72017-12-05 20:59:16 +0000107};
108
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000109using BundleProvider =
110 ProtoProvider<protos::pbzero::FtraceEventBundle, protos::FtraceEventBundle>;
111
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000112class BinaryWriter {
113 public:
114 BinaryWriter()
Anna Zapponebba19412018-01-24 16:38:18 +0000115 : size_(base::kPageSize), page_(new uint8_t[size_]), ptr_(page_.get()) {}
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000116
117 template <typename T>
118 void Write(T t) {
119 memcpy(ptr_, &t, sizeof(T));
120 ptr_ += sizeof(T);
121 PERFETTO_CHECK(ptr_ < ptr_ + size_);
122 }
123
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000124 void WriteFixedString(size_t n, const char* s) {
125 size_t length = strlen(s);
126 PERFETTO_CHECK(length < n);
127 char c;
128 while ((c = *s++)) {
129 Write<char>(c);
130 }
131 Write<char>('\0');
132 for (size_t i = 0; i < n - length - 1; i++) {
133 Write<char>('\xff');
134 }
135 }
136
137 std::unique_ptr<uint8_t[]> GetCopy() {
138 std::unique_ptr<uint8_t[]> buffer(new uint8_t[written()]);
139 memcpy(buffer.get(), page_.get(), written());
140 return buffer;
141 }
142
Primiano Tucci3cbb10a2018-04-10 17:52:40 +0100143 size_t written() { return static_cast<size_t>(ptr_ - page_.get()); }
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000144
145 private:
146 size_t size_;
147 std::unique_ptr<uint8_t[]> page_;
148 uint8_t* ptr_;
149};
150
Primiano Tucci4f9b6d72017-12-05 20:59:16 +0000151} // namespace
152
Hector Dearman5add6542017-12-06 15:47:42 +0000153TEST(PageFromXxdTest, OneLine) {
154 std::string text = R"(
155 00000000: 0000 0000 0000 0000 0000 0000 0000 0000 ................
156 00000000: 0000 0000 5600 0000 0000 0000 0000 0000 ................
157 )";
158 auto page = PageFromXxd(text);
159 EXPECT_EQ(page.get()[0x14], 0x56);
160}
161
162TEST(PageFromXxdTest, ManyLines) {
163 std::string text = R"(
164 00000000: 1234 0000 0000 0000 0000 0000 0000 0056 ................
165 00000010: 7800 0000 0000 0000 0000 0000 0000 009a ................
166 00000020: 0000 0000 bc00 0000 00de 0000 0000 009a ................
167 )";
168 auto page = PageFromXxd(text);
169 EXPECT_EQ(page.get()[0x00], 0x12);
170 EXPECT_EQ(page.get()[0x01], 0x34);
171 EXPECT_EQ(page.get()[0x0f], 0x56);
172 EXPECT_EQ(page.get()[0x10], 0x78);
173 EXPECT_EQ(page.get()[0x1f], 0x9a);
174 EXPECT_EQ(page.get()[0x24], 0xbc);
175 EXPECT_EQ(page.get()[0x29], 0xde);
176}
177
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000178TEST(CpuReaderTest, BinaryWriter) {
179 BinaryWriter writer;
180 writer.Write<uint64_t>(1);
181 writer.Write<uint32_t>(2);
182 writer.Write<uint16_t>(3);
183 writer.Write<uint8_t>(4);
184 auto buffer = writer.GetCopy();
185 EXPECT_EQ(buffer.get()[0], 1);
186 EXPECT_EQ(buffer.get()[1], 0);
187 EXPECT_EQ(buffer.get()[2], 0);
188 EXPECT_EQ(buffer.get()[3], 0);
189 EXPECT_EQ(buffer.get()[4], 0);
190 EXPECT_EQ(buffer.get()[5], 0);
191 EXPECT_EQ(buffer.get()[6], 0);
192 EXPECT_EQ(buffer.get()[7], 0);
193 EXPECT_EQ(buffer.get()[8], 2);
194}
195
Primiano Tucci4f9b6d72017-12-05 20:59:16 +0000196TEST(EventFilterTest, EventFilter) {
Primiano Tucci4f9b6d72017-12-05 20:59:16 +0000197 std::vector<Field> common_fields;
198 std::vector<Event> events;
199
200 {
201 Event event;
202 event.name = "foo";
Hector Dearmanc27e5fb2018-03-26 14:02:35 +0100203 event.group = "foo_group";
Primiano Tucci4f9b6d72017-12-05 20:59:16 +0000204 event.ftrace_event_id = 1;
205 events.push_back(event);
206 }
207
208 {
209 Event event;
210 event.name = "bar";
Hector Dearmanc27e5fb2018-03-26 14:02:35 +0100211 event.group = "bar_group";
Primiano Tucci4f9b6d72017-12-05 20:59:16 +0000212 event.ftrace_event_id = 10;
213 events.push_back(event);
214 }
215
216 ProtoTranslationTable table(events, std::move(common_fields));
Hector Dearman7391c0f2018-02-02 14:20:09 +0000217 EventFilter filter(table, {"foo"});
Primiano Tucci4f9b6d72017-12-05 20:59:16 +0000218
219 EXPECT_TRUE(filter.IsEventEnabled(1));
220 EXPECT_FALSE(filter.IsEventEnabled(2));
221 EXPECT_FALSE(filter.IsEventEnabled(10));
222}
223
Hector Dearman5add6542017-12-06 15:47:42 +0000224TEST(ReadAndAdvanceTest, Number) {
Primiano Tucci4f9b6d72017-12-05 20:59:16 +0000225 uint64_t expected = 42;
226 uint64_t actual = 0;
227 uint8_t buffer[8] = {};
228 const uint8_t* start = buffer;
229 const uint8_t* ptr = buffer;
230 memcpy(&buffer, &expected, 8);
231 EXPECT_TRUE(CpuReader::ReadAndAdvance<uint64_t>(&ptr, ptr + 8, &actual));
232 EXPECT_EQ(ptr, start + 8);
233 EXPECT_EQ(actual, expected);
234}
235
Hector Dearman5add6542017-12-06 15:47:42 +0000236TEST(ReadAndAdvanceTest, PlainStruct) {
Primiano Tucci4f9b6d72017-12-05 20:59:16 +0000237 struct PlainStruct {
238 uint64_t timestamp;
239 uint64_t length;
240 };
241
242 uint64_t expected[2] = {42, 999};
243 PlainStruct actual;
244 uint8_t buffer[16] = {};
245 const uint8_t* start = buffer;
246 const uint8_t* ptr = buffer;
247 memcpy(&buffer, &expected, 16);
248 EXPECT_TRUE(CpuReader::ReadAndAdvance<PlainStruct>(&ptr, ptr + 16, &actual));
249 EXPECT_EQ(ptr, start + 16);
250 EXPECT_EQ(actual.timestamp, 42ul);
251 EXPECT_EQ(actual.length, 999ul);
252}
253
Hector Dearman5add6542017-12-06 15:47:42 +0000254TEST(ReadAndAdvanceTest, ComplexStruct) {
Primiano Tucci4f9b6d72017-12-05 20:59:16 +0000255 struct ComplexStruct {
256 uint64_t timestamp;
257 uint32_t length;
258 uint32_t : 24;
259 uint32_t overwrite : 8;
260 };
261
262 uint64_t expected[2] = {42, 0xcdffffffabababab};
263 ComplexStruct actual = {};
264 uint8_t buffer[16] = {};
265 const uint8_t* start = buffer;
266 const uint8_t* ptr = buffer;
267 memcpy(&buffer, &expected, 16);
268 EXPECT_TRUE(
269 CpuReader::ReadAndAdvance<ComplexStruct>(&ptr, ptr + 16, &actual));
270 EXPECT_EQ(ptr, start + 16);
271 EXPECT_EQ(actual.timestamp, 42ul);
272 EXPECT_EQ(actual.length, 0xabababab);
273 EXPECT_EQ(actual.overwrite, 0xCDu);
274}
275
Hector Dearman5add6542017-12-06 15:47:42 +0000276TEST(ReadAndAdvanceTest, Overruns) {
Primiano Tucci4f9b6d72017-12-05 20:59:16 +0000277 uint64_t result = 42;
278 uint8_t buffer[7] = {};
279 const uint8_t* start = buffer;
280 const uint8_t* ptr = buffer;
281 EXPECT_FALSE(CpuReader::ReadAndAdvance<uint64_t>(&ptr, ptr + 7, &result));
282 EXPECT_EQ(ptr, start);
283 EXPECT_EQ(result, 42ul);
284}
285
Hector Dearman5add6542017-12-06 15:47:42 +0000286TEST(ReadAndAdvanceTest, AtEnd) {
Primiano Tucci4f9b6d72017-12-05 20:59:16 +0000287 uint8_t result = 42;
288 uint8_t buffer[8] = {};
289 const uint8_t* start = buffer;
290 const uint8_t* ptr = buffer;
291 EXPECT_FALSE(CpuReader::ReadAndAdvance<uint8_t>(&ptr, ptr, &result));
292 EXPECT_EQ(ptr, start);
293 EXPECT_EQ(result, 42);
294}
295
Hector Dearman5add6542017-12-06 15:47:42 +0000296TEST(ReadAndAdvanceTest, Underruns) {
Primiano Tucci4f9b6d72017-12-05 20:59:16 +0000297 uint64_t expected = 42;
298 uint64_t actual = 0;
299 uint8_t buffer[9] = {};
300 const uint8_t* start = buffer;
301 const uint8_t* ptr = buffer;
302 memcpy(&buffer, &expected, 8);
303 EXPECT_TRUE(CpuReader::ReadAndAdvance<uint64_t>(&ptr, ptr + 8, &actual));
304 EXPECT_EQ(ptr, start + 8);
305 EXPECT_EQ(actual, expected);
306}
307
Hector Dearman639651c2018-03-09 19:00:40 +0000308// clang-format off
Hector Dearman5add6542017-12-06 15:47:42 +0000309// # tracer: nop
310// #
311// # entries-in-buffer/entries-written: 1/1 #P:8
312// #
313// # _-----=> irqs-off
314// # / _----=> need-resched
315// # | / _---=> hardirq/softirq
316// # || / _--=> preempt-depth
317// # ||| / delay
318// # TASK-PID CPU# |||| TIMESTAMP FUNCTION
319// # | | | |||| | |
320// sh-28712 [000] ...1 608934.535199: tracing_mark_write: Hello, world!
Hector Dearman639651c2018-03-09 19:00:40 +0000321// clang-format on
322
Primiano Tucci3cbb10a2018-04-10 17:52:40 +0100323static ExamplePage g_single_print{
Hector Dearman5add6542017-12-06 15:47:42 +0000324 "synthetic",
325 R"(
326 00000000: ba12 6a33 c628 0200 2c00 0000 0000 0000 ..j3.(..,.......
327 00000010: def0 ec67 8d21 0000 0800 0000 0500 0001 ...g.!..........
328 00000020: 2870 0000 ac5d 1661 86ff ffff 4865 6c6c (p...].a....Hell
329 00000030: 6f2c 2077 6f72 6c64 210a 00ff 0000 0000 o, world!.......
330 )",
331};
Primiano Tucci4f9b6d72017-12-05 20:59:16 +0000332
Hector Dearman5add6542017-12-06 15:47:42 +0000333TEST(CpuReaderTest, ParseSinglePrint) {
334 const ExamplePage* test_case = &g_single_print;
Primiano Tucci4f9b6d72017-12-05 20:59:16 +0000335
Anna Zapponebba19412018-01-24 16:38:18 +0000336 BundleProvider bundle_provider(base::kPageSize);
Hector Dearman5add6542017-12-06 15:47:42 +0000337 ProtoTranslationTable* table = GetTable(test_case->name);
338 auto page = PageFromXxd(test_case->data);
Primiano Tucci4f9b6d72017-12-05 20:59:16 +0000339
Hector Dearman7391c0f2018-02-02 14:20:09 +0000340 EventFilter filter(*table, {"print"});
Primiano Tucci4f9b6d72017-12-05 20:59:16 +0000341
Hector Dearmanc8488032018-03-02 13:12:01 +0000342 FtraceMetadata metadata{};
Hector Dearman1f14b622018-02-27 11:17:37 +0000343 size_t bytes = CpuReader::ParsePage(
Hector Dearmanc8488032018-03-02 13:12:01 +0000344 page.get(), &filter, bundle_provider.writer(), table, &metadata);
Hector Dearman680a28b2018-01-11 18:34:24 +0000345 EXPECT_EQ(bytes, 60ul);
Primiano Tucci4f9b6d72017-12-05 20:59:16 +0000346
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000347 auto bundle = bundle_provider.ParseProto();
Hector Dearman5add6542017-12-06 15:47:42 +0000348 ASSERT_TRUE(bundle);
Hector Dearmanc8488032018-03-02 13:12:01 +0000349 EXPECT_EQ(metadata.overwrite_count, 0ul);
Hector Dearman5add6542017-12-06 15:47:42 +0000350 ASSERT_EQ(bundle->event().size(), 1);
351 const protos::FtraceEvent& event = bundle->event().Get(0);
Oystein Eftevaaged4df192017-12-07 10:52:58 -0800352 EXPECT_EQ(event.pid(), 28712ul);
Hector Dearman71372ea2017-12-06 17:13:37 +0000353 EXPECT_TRUE(WithinOneMicrosecond(event.timestamp(), 608934, 535199));
Hector Dearman5add6542017-12-06 15:47:42 +0000354 EXPECT_EQ(event.print().buf(), "Hello, world!\n");
Primiano Tucci4f9b6d72017-12-05 20:59:16 +0000355}
356
Hector Dearman639651c2018-03-09 19:00:40 +0000357// clang-format off
Hector Dearman8fd632b2018-02-27 13:42:50 +0000358// # tracer: nop
359// #
360// # entries-in-buffer/entries-written: 2/2 #P:8
361// #
362// # _-----=> irqs-off
363// # / _----=> need-resched
364// # | / _---=> hardirq/softirq
365// # || / _--=> preempt-depth
366// # ||| / delay
367// # TASK-PID TGID CPU# |||| TIMESTAMP FUNCTION
368// # | | | | |||| | |
369// echo-6908 ( 6908) [000] ...1 282762.884473: tracing_mark_write: qwertyuiopqwrtyuiopqwertyuiopqwertyuiopqwer[...]
370// echo-6908 ( 6908) [000] ...1 282762.884492: tracing_mark_write:
Hector Dearman639651c2018-03-09 19:00:40 +0000371// clang-format on
372
Primiano Tucci3cbb10a2018-04-10 17:52:40 +0100373static ExamplePage g_really_long_event{
Hector Dearman8fd632b2018-02-27 13:42:50 +0000374 "synthetic",
375 R"(
376 00000000: 6be0 48dd 2b01 0100 e403 0000 0000 0000 k.H.+...........
377 00000010: 1e00 0000 0000 0000 0000 0000 c003 0000 ................
378 00000020: 0500 0001 fc1a 0000 4096 3615 9cff ffff ........@.6.....
379 00000030: 7177 6572 7479 7569 6f70 7177 7274 7975 qwertyuiopqwrtyu
380 00000040: 696f 7071 7765 7274 7975 696f 7071 7765 iopqwertyuiopqwe
381 00000050: 7274 7975 696f 7071 7765 7274 7975 696f rtyuiopqwertyuio
382 00000060: 7071 7772 7479 7569 6f70 7177 6572 7479 pqwrtyuiopqwerty
383 00000070: 7569 6f70 7177 6572 7479 7569 6f71 7765 uiopqwertyuioqwe
384 00000080: 7274 7975 696f 7071 7772 7479 7569 6f70 rtyuiopqwrtyuiop
385 00000090: 7177 6572 7479 7569 6f70 7177 6572 7479 qwertyuiopqwerty
386 000000a0: 7569 6f71 7765 7274 7975 696f 7071 7772 uioqwertyuiopqwr
387 000000b0: 7479 7569 6f70 7177 6572 7479 7569 6f70 tyuiopqwertyuiop
388 000000c0: 7177 6572 7479 7569 6f70 7070 7177 6572 qwertyuiopppqwer
389 000000d0: 7479 7569 6f70 7177 7274 7975 696f 7071 tyuiopqwrtyuiopq
390 000000e0: 7765 7274 7975 696f 7071 7765 7274 7975 wertyuiopqwertyu
391 000000f0: 696f 7071 7765 7274 7975 696f 7071 7772 iopqwertyuiopqwr
392 00000100: 7479 7569 6f70 7177 6572 7479 7569 6f70 tyuiopqwertyuiop
393 00000110: 7177 6572 7479 7569 6f71 7765 7274 7975 qwertyuioqwertyu
394 00000120: 696f 7071 7772 7479 7569 6f70 7177 6572 iopqwrtyuiopqwer
395 00000130: 7479 7569 6f70 7177 6572 7479 7569 6f71 tyuiopqwertyuioq
396 00000140: 7765 7274 7975 696f 7071 7772 7479 7569 wertyuiopqwrtyui
397 00000150: 6f70 7177 6572 7479 7569 6f70 7177 6572 opqwertyuiopqwer
398 00000160: 7479 7569 6f70 7070 7177 6572 7479 7569 tyuiopppqwertyui
399 00000170: 6f70 7177 7274 7975 696f 7071 7765 7274 opqwrtyuiopqwert
400 00000180: 7975 696f 7071 7765 7274 7975 696f 7071 yuiopqwertyuiopq
401 00000190: 7765 7274 7975 696f 7071 7772 7479 7569 wertyuiopqwrtyui
402 000001a0: 6f70 7177 6572 7479 7569 6f70 7177 6572 opqwertyuiopqwer
403 000001b0: 7479 7569 6f71 7765 7274 7975 696f 7071 tyuioqwertyuiopq
404 000001c0: 7772 7479 7569 6f70 7177 6572 7479 7569 wrtyuiopqwertyui
405 000001d0: 6f70 7177 6572 7479 7569 6f71 7765 7274 opqwertyuioqwert
406 000001e0: 7975 696f 7071 7772 7479 7569 6f70 7177 yuiopqwrtyuiopqw
407 000001f0: 6572 7479 7569 6f70 7177 6572 7479 7569 ertyuiopqwertyui
408 00000200: 6f70 7070 7177 6572 7479 7569 6f70 7177 opppqwertyuiopqw
409 00000210: 7274 7975 696f 7071 7765 7274 7975 696f rtyuiopqwertyuio
410 00000220: 7071 7765 7274 7975 696f 7071 7765 7274 pqwertyuiopqwert
411 00000230: 7975 696f 7071 7772 7479 7569 6f70 7177 yuiopqwrtyuiopqw
412 00000240: 6572 7479 7569 6f70 7177 6572 7479 7569 ertyuiopqwertyui
413 00000250: 6f71 7765 7274 7975 696f 7071 7772 7479 oqwertyuiopqwrty
414 00000260: 7569 6f70 7177 6572 7479 7569 6f70 7177 uiopqwertyuiopqw
415 00000270: 6572 7479 7569 6f71 7765 7274 7975 696f ertyuioqwertyuio
416 00000280: 7071 7772 7479 7569 6f70 7177 6572 7479 pqwrtyuiopqwerty
417 00000290: 7569 6f70 7177 6572 7479 7569 6f70 7070 uiopqwertyuioppp
418 000002a0: 7177 6572 7479 7569 6f70 7177 7274 7975 qwertyuiopqwrtyu
419 000002b0: 696f 7071 7765 7274 7975 696f 7071 7765 iopqwertyuiopqwe
420 000002c0: 7274 7975 696f 7071 7765 7274 7975 696f rtyuiopqwertyuio
421 000002d0: 7071 7772 7479 7569 6f70 7177 6572 7479 pqwrtyuiopqwerty
422 000002e0: 7569 6f70 7177 6572 7479 7569 6f71 7765 uiopqwertyuioqwe
423 000002f0: 7274 7975 696f 7071 7772 7479 7569 6f70 rtyuiopqwrtyuiop
424 00000300: 7177 6572 7479 7569 6f70 7177 6572 7479 qwertyuiopqwerty
425 00000310: 7569 6f71 7765 7274 7975 696f 7071 7772 uioqwertyuiopqwr
426 00000320: 7479 7569 6f70 7177 6572 7479 7569 6f70 tyuiopqwertyuiop
427 00000330: 7177 6572 7479 7569 6f70 7070 7177 6572 qwertyuiopppqwer
428 00000340: 7479 7569 6f70 7177 7274 7975 696f 7071 tyuiopqwrtyuiopq
429 00000350: 7765 7274 7975 696f 7071 7765 7274 7975 wertyuiopqwertyu
430 00000360: 696f 7071 7765 7274 7975 696f 7071 7772 iopqwertyuiopqwr
431 00000370: 7479 7569 6f70 7177 6572 7479 7569 6f70 tyuiopqwertyuiop
432 00000380: 7177 6572 7479 7569 6f71 7765 7274 7975 qwertyuioqwertyu
433 00000390: 696f 7071 7772 7479 7569 6f70 7177 6572 iopqwrtyuiopqwer
434 000003a0: 7479 7569 6f70 7177 6572 7479 7569 6f71 tyuiopqwertyuioq
435 000003b0: 7765 7274 7975 696f 7071 7772 7479 7569 wertyuiopqwrtyui
436 000003c0: 6f70 7177 6572 7479 7569 6f70 7177 6572 opqwertyuiopqwer
437 000003d0: 7479 7569 6f70 7070 0a00 5115 6562 0900 tyuioppp..Q.eb..
438 000003e0: 0500 0001 fc1a 0000 4096 3615 9cff ffff ........@.6.....
439 000003f0: 0a00 0000 0000 0000 0000 0000 0000 0000 ................
440 00000400: 0000 0000 0000 0000 0000 0000 0000 0000 ................
441 00000410: 0000 0000 0000 0000 0000 0000 0000 0000 ................
442 00000420: 0000 0000 0000 0000 0000 0000 0000 0000 ................
443 )",
444};
445
446TEST(CpuReaderTest, ReallyLongEvent) {
447 const ExamplePage* test_case = &g_really_long_event;
448
449 BundleProvider bundle_provider(base::kPageSize);
450 ProtoTranslationTable* table = GetTable(test_case->name);
451 auto page = PageFromXxd(test_case->data);
452
453 EventFilter filter(*table, {"print"});
454
Hector Dearmanc8488032018-03-02 13:12:01 +0000455 FtraceMetadata metadata{};
456 CpuReader::ParsePage(page.get(), &filter, bundle_provider.writer(), table,
457 &metadata);
Hector Dearman8fd632b2018-02-27 13:42:50 +0000458
459 auto bundle = bundle_provider.ParseProto();
460 ASSERT_TRUE(bundle);
461 const protos::FtraceEvent& long_print = bundle->event().Get(0);
462 EXPECT_THAT(long_print.print().buf(), StartsWith("qwerty"));
463 EXPECT_THAT(long_print.print().buf(), EndsWith("ppp\n"));
464 const protos::FtraceEvent& newline = bundle->event().Get(1);
465 EXPECT_EQ(newline.print().buf(), "\n");
466}
467
Hector Dearman7a472d92018-01-15 12:39:26 +0000468// This event is as the event for ParseSinglePrint above except the string
469// is extended to overflow the page size written in the header.
Primiano Tucci3cbb10a2018-04-10 17:52:40 +0100470static ExamplePage g_single_print_malformed{
Hector Dearman7a472d92018-01-15 12:39:26 +0000471 "synthetic",
472 R"(
473 00000000: ba12 6a33 c628 0200 2c00 0000 0000 0000 ................
474 00000010: def0 ec67 8d21 0000 0800 0000 0500 0001 ................
475 00000020: 2870 0000 ac5d 1661 86ff ffff 4865 6c6c ................
476 00000030: 6f2c 2077 6f72 6c64 2120 776f 726c 6421 ................
477 00000040: 0a00 ff00 0000 0000 0000 0000 0000 0000 ................
478 )",
479};
480
481TEST(CpuReaderTest, ParseSinglePrintMalformed) {
482 const ExamplePage* test_case = &g_single_print_malformed;
483
Anna Zapponebba19412018-01-24 16:38:18 +0000484 BundleProvider bundle_provider(base::kPageSize);
Hector Dearman7a472d92018-01-15 12:39:26 +0000485 ProtoTranslationTable* table = GetTable(test_case->name);
486 auto page = PageFromXxd(test_case->data);
487
Hector Dearman7391c0f2018-02-02 14:20:09 +0000488 EventFilter filter(*table, {"print"});
Hector Dearman7a472d92018-01-15 12:39:26 +0000489
Hector Dearmanc8488032018-03-02 13:12:01 +0000490 FtraceMetadata metadata{};
Hector Dearman1f14b622018-02-27 11:17:37 +0000491 ASSERT_FALSE(CpuReader::ParsePage(
Hector Dearmanc8488032018-03-02 13:12:01 +0000492 page.get(), &filter, bundle_provider.writer(), table, &metadata));
Hector Dearman7a472d92018-01-15 12:39:26 +0000493
494 auto bundle = bundle_provider.ParseProto();
495 ASSERT_TRUE(bundle);
Hector Dearmanc8488032018-03-02 13:12:01 +0000496 EXPECT_EQ(metadata.overwrite_count, 0ul);
Hector Dearman7a472d92018-01-15 12:39:26 +0000497 ASSERT_EQ(bundle->event().size(), 1);
498 // Although one field is malformed we still see data for the rest
499 // since we write the fields as we parse them for speed.
500 const protos::FtraceEvent& event = bundle->event().Get(0);
501 EXPECT_EQ(event.pid(), 28712ul);
502 EXPECT_TRUE(WithinOneMicrosecond(event.timestamp(), 608934, 535199));
503 EXPECT_EQ(event.print().buf(), "");
504}
505
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000506TEST(CpuReaderTest, FilterByEvent) {
507 const ExamplePage* test_case = &g_single_print;
508
Anna Zapponebba19412018-01-24 16:38:18 +0000509 BundleProvider bundle_provider(base::kPageSize);
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000510 ProtoTranslationTable* table = GetTable(test_case->name);
511 auto page = PageFromXxd(test_case->data);
512
Hector Dearman7391c0f2018-02-02 14:20:09 +0000513 EventFilter filter(*table, {});
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000514
Hector Dearmanc8488032018-03-02 13:12:01 +0000515 FtraceMetadata metadata{};
Hector Dearman1f14b622018-02-27 11:17:37 +0000516 ASSERT_TRUE(CpuReader::ParsePage(page.get(), &filter,
Hector Dearmanc8488032018-03-02 13:12:01 +0000517 bundle_provider.writer(), table, &metadata));
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000518
519 auto bundle = bundle_provider.ParseProto();
520 ASSERT_TRUE(bundle);
Hector Dearmanc8488032018-03-02 13:12:01 +0000521 EXPECT_EQ(metadata.overwrite_count, 0ul);
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000522 ASSERT_EQ(bundle->event().size(), 0);
523}
524
Hector Dearman639651c2018-03-09 19:00:40 +0000525// clang-format off
Hector Dearman71372ea2017-12-06 17:13:37 +0000526// # tracer: nop
527// #
528// # entries-in-buffer/entries-written: 3/3 #P:8
529// #
530// # _-----=> irqs-off
531// # / _----=> need-resched
532// # | / _---=> hardirq/softirq
533// # || / _--=> preempt-depth
534// # ||| / delay
535// # TASK-PID CPU# |||| TIMESTAMP FUNCTION
536// # | | | |||| | |
537// sh-30693 [000] ...1 615436.216806: tracing_mark_write: Hello, world!
538// sh-30693 [000] ...1 615486.377232: tracing_mark_write: Good afternoon, world!
539// sh-30693 [000] ...1 615495.632679: tracing_mark_write: Goodbye, world!
Hector Dearman639651c2018-03-09 19:00:40 +0000540// clang-format on
541
Primiano Tucci3cbb10a2018-04-10 17:52:40 +0100542static ExamplePage g_three_prints{
Hector Dearman71372ea2017-12-06 17:13:37 +0000543 "synthetic",
544 R"(
545 00000000: a3ab 1569 bc2f 0200 9400 0000 0000 0000 ...i./..........
546 00000010: 1e00 0000 0000 0000 0800 0000 0500 0001 ................
547 00000020: e577 0000 ac5d 1661 86ff ffff 4865 6c6c .w...].a....Hell
548 00000030: 6f2c 2077 6f72 6c64 210a 0000 5e32 6bb9 o, world!...^2k.
549 00000040: 7501 0000 0b00 0000 0500 0001 e577 0000 u............w..
550 00000050: ac5d 1661 86ff ffff 476f 6f64 2061 6674 .].a....Good aft
551 00000060: 6572 6e6f 6f6e 2c20 776f 726c 6421 0a00 ernoon, world!..
552 00000070: 0000 0000 9e6a 5df5 4400 0000 0900 0000 .....j].D.......
553 00000080: 0500 0001 e577 0000 ac5d 1661 86ff ffff .....w...].a....
554 00000090: 476f 6f64 6279 652c 2077 6f72 6c64 210a Goodbye, world!.
555 000000a0: 0051 0000 0000 0000 0000 0000 0000 0000 .Q..............
556 )",
557};
558
559TEST(CpuReaderTest, ParseThreePrint) {
560 const ExamplePage* test_case = &g_three_prints;
561
Anna Zapponebba19412018-01-24 16:38:18 +0000562 BundleProvider bundle_provider(base::kPageSize);
Hector Dearman71372ea2017-12-06 17:13:37 +0000563 ProtoTranslationTable* table = GetTable(test_case->name);
564 auto page = PageFromXxd(test_case->data);
565
Hector Dearman7391c0f2018-02-02 14:20:09 +0000566 EventFilter filter(*table, {"print"});
Hector Dearman71372ea2017-12-06 17:13:37 +0000567
Hector Dearmanc8488032018-03-02 13:12:01 +0000568 FtraceMetadata metadata{};
Hector Dearman1f14b622018-02-27 11:17:37 +0000569 ASSERT_TRUE(CpuReader::ParsePage(page.get(), &filter,
Hector Dearmanc8488032018-03-02 13:12:01 +0000570 bundle_provider.writer(), table, &metadata));
Hector Dearman71372ea2017-12-06 17:13:37 +0000571
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000572 auto bundle = bundle_provider.ParseProto();
Hector Dearman71372ea2017-12-06 17:13:37 +0000573 ASSERT_TRUE(bundle);
Hector Dearmanc8488032018-03-02 13:12:01 +0000574 EXPECT_EQ(metadata.overwrite_count, 0ul);
Hector Dearman71372ea2017-12-06 17:13:37 +0000575 ASSERT_EQ(bundle->event().size(), 3);
576
577 {
578 const protos::FtraceEvent& event = bundle->event().Get(0);
Oystein Eftevaaged4df192017-12-07 10:52:58 -0800579 EXPECT_EQ(event.pid(), 30693ul);
Hector Dearman71372ea2017-12-06 17:13:37 +0000580 EXPECT_TRUE(WithinOneMicrosecond(event.timestamp(), 615436, 216806));
581 EXPECT_EQ(event.print().buf(), "Hello, world!\n");
582 }
583
584 {
585 const protos::FtraceEvent& event = bundle->event().Get(1);
Oystein Eftevaaged4df192017-12-07 10:52:58 -0800586 EXPECT_EQ(event.pid(), 30693ul);
Hector Dearman71372ea2017-12-06 17:13:37 +0000587 EXPECT_TRUE(WithinOneMicrosecond(event.timestamp(), 615486, 377232));
588 EXPECT_EQ(event.print().buf(), "Good afternoon, world!\n");
589 }
590
591 {
592 const protos::FtraceEvent& event = bundle->event().Get(2);
Oystein Eftevaaged4df192017-12-07 10:52:58 -0800593 EXPECT_EQ(event.pid(), 30693ul);
Hector Dearman71372ea2017-12-06 17:13:37 +0000594 EXPECT_TRUE(WithinOneMicrosecond(event.timestamp(), 615495, 632679));
595 EXPECT_EQ(event.print().buf(), "Goodbye, world!\n");
596 }
597}
598
Hector Dearman639651c2018-03-09 19:00:40 +0000599// clang-format off
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000600// # tracer: nop
601// #
602// # entries-in-buffer/entries-written: 6/6 #P:8
603// #
604// # _-----=> irqs-off
605// # / _----=> need-resched
606// # | / _---=> hardirq/softirq
607// # || / _--=> preempt-depth
608// # ||| / delay
609// # TASK-PID CPU# |||| TIMESTAMP FUNCTION
610// # | | | |||| | |
Hector Dearman639651c2018-03-09 19:00:40 +0000611// ksoftirqd/0-3 [000] d..3 1045157.722134: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=sleep next_pid=3733 next_prio=120
612// sleep-3733 [000] d..3 1045157.725035: sched_switch: prev_comm=sleep prev_pid=3733 prev_prio=120 prev_state=R+ ==> next_comm=rcuop/0 next_pid=10 next_prio=120
613// rcu_preempt-7 [000] d..3 1045157.725182: sched_switch: prev_comm=rcu_preempt prev_pid=7 prev_prio=120 prev_state=S ==> next_comm=sleep next_pid=3733 next_prio=120
614// sleep-3733 [000] d..3 1045157.725671: sched_switch: prev_comm=sleep prev_pid=3733 prev_prio=120 prev_state=R+ ==> next_comm=sh next_pid=3513 next_prio=120
615// sh-3513 [000] d..3 1045157.726668: sched_switch: prev_comm=sh prev_pid=3513 prev_prio=120 prev_state=S ==> next_comm=sleep next_pid=3733 next_prio=120
616// sleep-3733 [000] d..3 1045157.726697: sched_switch: prev_comm=sleep prev_pid=3733 prev_prio=120 prev_state=x ==> next_comm=kworker/u16:3 next_pid=3681 next_prio=120
617// clang-format on
618
Primiano Tucci3cbb10a2018-04-10 17:52:40 +0100619static ExamplePage g_six_sched_switch{
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000620 "synthetic",
621 R"(
622 00000000: 2b16 c3be 90b6 0300 a001 0000 0000 0000 +...............
623 00000010: 1e00 0000 0000 0000 1000 0000 2f00 0103 ............/...
624 00000020: 0300 0000 6b73 6f66 7469 7271 642f 3000 ....ksoftirqd/0.
625 00000030: 0000 0000 0300 0000 7800 0000 0100 0000 ........x.......
626 00000040: 0000 0000 736c 6565 7000 722f 3000 0000 ....sleep.r/0...
627 00000050: 0000 0000 950e 0000 7800 0000 b072 8805 ........x....r..
628 00000060: 2f00 0103 950e 0000 736c 6565 7000 722f /.......sleep.r/
629 00000070: 3000 0000 0000 0000 950e 0000 7800 0000 0...........x...
630 00000080: 0008 0000 0000 0000 7263 756f 702f 3000 ........rcuop/0.
631 00000090: 0000 0000 0000 0000 0a00 0000 7800 0000 ............x...
632 000000a0: f0b0 4700 2f00 0103 0700 0000 7263 755f ..G./.......rcu_
633 000000b0: 7072 6565 6d70 7400 0000 0000 0700 0000 preempt.........
634 000000c0: 7800 0000 0100 0000 0000 0000 736c 6565 x...........slee
635 000000d0: 7000 722f 3000 0000 0000 0000 950e 0000 p.r/0...........
636 000000e0: 7800 0000 1001 ef00 2f00 0103 950e 0000 x......./.......
637 000000f0: 736c 6565 7000 722f 3000 0000 0000 0000 sleep.r/0.......
638 00000100: 950e 0000 7800 0000 0008 0000 0000 0000 ....x...........
639 00000110: 7368 0064 0065 722f 3000 0000 0000 0000 sh.d.er/0.......
640 00000120: b90d 0000 7800 0000 f0c7 e601 2f00 0103 ....x......./...
641 00000130: b90d 0000 7368 0064 0065 722f 3000 0000 ....sh.d.er/0...
642 00000140: 0000 0000 b90d 0000 7800 0000 0100 0000 ........x.......
643 00000150: 0000 0000 736c 6565 7000 722f 3000 0000 ....sleep.r/0...
644 00000160: 0000 0000 950e 0000 7800 0000 d030 0e00 ........x....0..
645 00000170: 2f00 0103 950e 0000 736c 6565 7000 722f /.......sleep.r/
646 00000180: 3000 0000 0000 0000 950e 0000 7800 0000 0...........x...
647 00000190: 4000 0000 0000 0000 6b77 6f72 6b65 722f @.......kworker/
648 000001a0: 7531 363a 3300 0000 610e 0000 7800 0000 u16:3...a...x...
649 000001b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
650 )",
651};
652
653TEST(CpuReaderTest, ParseSixSchedSwitch) {
654 const ExamplePage* test_case = &g_six_sched_switch;
655
Anna Zapponebba19412018-01-24 16:38:18 +0000656 BundleProvider bundle_provider(base::kPageSize);
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000657 ProtoTranslationTable* table = GetTable(test_case->name);
658 auto page = PageFromXxd(test_case->data);
659
Hector Dearman7391c0f2018-02-02 14:20:09 +0000660 EventFilter filter(*table, {"sched_switch"});
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000661
Hector Dearmanc8488032018-03-02 13:12:01 +0000662 FtraceMetadata metadata{};
Hector Dearman1f14b622018-02-27 11:17:37 +0000663 ASSERT_TRUE(CpuReader::ParsePage(page.get(), &filter,
Hector Dearmanc8488032018-03-02 13:12:01 +0000664 bundle_provider.writer(), table, &metadata));
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000665
Hector Dearman2c3ac7f2018-03-22 15:39:36 +0000666 auto bundle = bundle_provider.ParseProto();
667 ASSERT_TRUE(bundle);
668 EXPECT_EQ(metadata.overwrite_count, 0ul);
669 ASSERT_EQ(bundle->event().size(), 6);
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000670
Hector Dearman2c3ac7f2018-03-22 15:39:36 +0000671 {
672 const protos::FtraceEvent& event = bundle->event().Get(1);
673 EXPECT_EQ(event.pid(), 3733ul);
674 EXPECT_TRUE(WithinOneMicrosecond(event.timestamp(), 1045157, 725035));
675 EXPECT_EQ(event.sched_switch().prev_comm(), "sleep");
676 EXPECT_EQ(event.sched_switch().prev_pid(), 3733);
677 EXPECT_EQ(event.sched_switch().prev_prio(), 120);
678 EXPECT_EQ(event.sched_switch().next_comm(), "rcuop/0");
679 EXPECT_EQ(event.sched_switch().next_pid(), 10);
680 EXPECT_EQ(event.sched_switch().next_prio(), 120);
681 }
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000682}
683
684TEST(CpuReaderTest, ParseAllFields) {
685 using FakeEventProvider =
686 ProtoProvider<pbzero::FakeFtraceEvent, FakeFtraceEvent>;
687
688 uint16_t ftrace_event_id = 102;
689
690 std::vector<Field> common_fields;
Hector Dearman77af1332017-12-15 11:55:33 +0000691 {
692 common_fields.emplace_back(Field{});
693 Field* field = &common_fields.back();
694 field->ftrace_offset = 0;
695 field->ftrace_size = 4;
696 field->ftrace_type = kFtraceUint32;
697 field->proto_field_id = 1;
698 field->proto_field_type = kProtoUint32;
699 SetTranslationStrategy(field->ftrace_type, field->proto_field_type,
700 &field->strategy);
701 }
702
Florian Mayerb8e235b2018-03-22 20:32:50 +0000703 {
704 common_fields.emplace_back(Field{});
705 Field* field = &common_fields.back();
706 field->ftrace_offset = 4;
707 field->ftrace_size = 4;
708 field->ftrace_type = kFtraceCommonPid32;
709 field->proto_field_id = 2;
710 field->proto_field_type = kProtoInt32;
711 SetTranslationStrategy(field->ftrace_type, field->proto_field_type,
712 &field->strategy);
713 }
714
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000715 std::vector<Event> events;
Hector Dearman2c3ac7f2018-03-22 15:39:36 +0000716 events.emplace_back(Event{});
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000717 {
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000718 Event* event = &events.back();
719 event->name = "";
720 event->group = "";
721 event->proto_field_id = 42;
722 event->ftrace_event_id = ftrace_event_id;
Hector Dearman2c3ac7f2018-03-22 15:39:36 +0000723
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000724 {
Hector Dearman2c3ac7f2018-03-22 15:39:36 +0000725 // uint32 -> uint32
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000726 event->fields.emplace_back(Field{});
727 Field* field = &event->fields.back();
728 field->ftrace_offset = 8;
729 field->ftrace_size = 4;
Hector Dearman2c3ac7f2018-03-22 15:39:36 +0000730 field->ftrace_type = kFtraceUint32;
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000731 field->proto_field_id = 1;
Hector Dearman2c3ac7f2018-03-22 15:39:36 +0000732 field->proto_field_type = kProtoUint32;
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000733 }
Hector Dearman2c3ac7f2018-03-22 15:39:36 +0000734
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000735 {
Anna Zappone4ea73c02018-03-09 16:01:21 +0000736 // pid32 -> uint32
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000737 event->fields.emplace_back(Field{});
738 Field* field = &event->fields.back();
739 field->ftrace_offset = 12;
Hector Dearmanf19e7c52018-03-06 10:25:01 +0000740 field->ftrace_size = 4;
741 field->ftrace_type = kFtracePid32;
742 field->proto_field_id = 2;
743 field->proto_field_type = kProtoInt32;
Hector Dearmanf19e7c52018-03-06 10:25:01 +0000744 }
Hector Dearman2c3ac7f2018-03-22 15:39:36 +0000745
Hector Dearmanf19e7c52018-03-06 10:25:01 +0000746 {
Hector Dearman2c3ac7f2018-03-22 15:39:36 +0000747 // dev32 -> uint64
Hector Dearmanf19e7c52018-03-06 10:25:01 +0000748 event->fields.emplace_back(Field{});
749 Field* field = &event->fields.back();
750 field->ftrace_offset = 16;
751 field->ftrace_size = 4;
Hector Dearman2c3ac7f2018-03-22 15:39:36 +0000752 field->ftrace_type = kFtraceDevId32;
753 field->proto_field_id = 3;
754 field->proto_field_type = kProtoUint64;
Anna Zappone4ea73c02018-03-09 16:01:21 +0000755 }
Hector Dearman2c3ac7f2018-03-22 15:39:36 +0000756
Anna Zappone4ea73c02018-03-09 16:01:21 +0000757 {
758 // ino_t (32bit) -> uint64
759 event->fields.emplace_back(Field{});
760 Field* field = &event->fields.back();
761 field->ftrace_offset = 20;
762 field->ftrace_size = 4;
Hector Dearmanf19e7c52018-03-06 10:25:01 +0000763 field->ftrace_type = kFtraceInode32;
Hector Dearman2c3ac7f2018-03-22 15:39:36 +0000764 field->proto_field_id = 4;
Hector Dearmanf19e7c52018-03-06 10:25:01 +0000765 field->proto_field_type = kProtoUint64;
Hector Dearmanf19e7c52018-03-06 10:25:01 +0000766 }
Hector Dearman2c3ac7f2018-03-22 15:39:36 +0000767
Hector Dearmanf19e7c52018-03-06 10:25:01 +0000768 {
Anna Zappone8ce30872018-03-19 17:01:15 +0000769 // dev64 -> uint64
Hector Dearmanf19e7c52018-03-06 10:25:01 +0000770 event->fields.emplace_back(Field{});
771 Field* field = &event->fields.back();
Anna Zappone4ea73c02018-03-09 16:01:21 +0000772 field->ftrace_offset = 24;
Hector Dearmanf19e7c52018-03-06 10:25:01 +0000773 field->ftrace_size = 8;
Anna Zappone8ce30872018-03-19 17:01:15 +0000774 field->ftrace_type = kFtraceDevId64;
Hector Dearman2c3ac7f2018-03-22 15:39:36 +0000775 field->proto_field_id = 5;
Anna Zappone8ce30872018-03-19 17:01:15 +0000776 field->proto_field_type = kProtoUint64;
Anna Zappone8ce30872018-03-19 17:01:15 +0000777 }
Hector Dearman2c3ac7f2018-03-22 15:39:36 +0000778
Anna Zappone8ce30872018-03-19 17:01:15 +0000779 {
780 // ino_t (64bit) -> uint64
781 event->fields.emplace_back(Field{});
782 Field* field = &event->fields.back();
783 field->ftrace_offset = 32;
784 field->ftrace_size = 8;
Hector Dearmanf19e7c52018-03-06 10:25:01 +0000785 field->ftrace_type = kFtraceInode64;
Hector Dearman2c3ac7f2018-03-22 15:39:36 +0000786 field->proto_field_id = 6;
Hector Dearmanf19e7c52018-03-06 10:25:01 +0000787 field->proto_field_type = kProtoUint64;
Hector Dearmanf19e7c52018-03-06 10:25:01 +0000788 }
Hector Dearman2c3ac7f2018-03-22 15:39:36 +0000789
Hector Dearmanf19e7c52018-03-06 10:25:01 +0000790 {
791 // char[16] -> string
792 event->fields.emplace_back(Field{});
793 Field* field = &event->fields.back();
Anna Zappone8ce30872018-03-19 17:01:15 +0000794 field->ftrace_offset = 40;
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000795 field->ftrace_size = 16;
Hector Dearman77af1332017-12-15 11:55:33 +0000796 field->ftrace_type = kFtraceFixedCString;
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000797 field->proto_field_id = 500;
798 field->proto_field_type = kProtoString;
799 }
Hector Dearman2c3ac7f2018-03-22 15:39:36 +0000800
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000801 {
Anna Zappone5a407c12018-02-22 14:21:38 +0000802 // char -> string
803 event->fields.emplace_back(Field{});
804 Field* field = &event->fields.back();
Anna Zappone8ce30872018-03-19 17:01:15 +0000805 field->ftrace_offset = 56;
Anna Zappone5a407c12018-02-22 14:21:38 +0000806 field->ftrace_size = 0;
807 field->ftrace_type = kFtraceCString;
808 field->proto_field_id = 501;
809 field->proto_field_type = kProtoString;
Hector Dearman2c3ac7f2018-03-22 15:39:36 +0000810 }
811
812 for (Field& field : event->fields) {
813 SetTranslationStrategy(field.ftrace_type, field.proto_field_type,
814 &field.strategy);
Anna Zappone5a407c12018-02-22 14:21:38 +0000815 }
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000816 }
Hector Dearman2c3ac7f2018-03-22 15:39:36 +0000817
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000818 ProtoTranslationTable table(events, std::move(common_fields));
819
Anna Zapponebba19412018-01-24 16:38:18 +0000820 FakeEventProvider provider(base::kPageSize);
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000821
822 BinaryWriter writer;
Anna Zappone8ce30872018-03-19 17:01:15 +0000823
824 // Must use the bit masks to translate between kernel and userspace device ids
825 // to generate the below examples
Hector Dearman2c3ac7f2018-03-22 15:39:36 +0000826 const uint32_t kKernelBlockDeviceId = 271581216;
Anna Zapponedfaa90b2018-03-23 14:56:48 +0000827
Primiano Tucci3cbb10a2018-04-10 17:52:40 +0100828 const BlockDeviceID kUserspaceBlockDeviceId =
829 CpuReader::TranslateBlockDeviceIDToUserspace<BlockDeviceID>(
Hector Dearman2c3ac7f2018-03-22 15:39:36 +0000830 kKernelBlockDeviceId);
831 const uint64_t k64BitKernelBlockDeviceId = 4442450946;
Primiano Tucci3cbb10a2018-04-10 17:52:40 +0100832 const BlockDeviceID k64BitUserspaceBlockDeviceId =
Anna Zappone8ce30872018-03-19 17:01:15 +0000833 CpuReader::TranslateBlockDeviceIDToUserspace<uint64_t>(
Hector Dearman2c3ac7f2018-03-22 15:39:36 +0000834 k64BitKernelBlockDeviceId);
Anna Zappone8ce30872018-03-19 17:01:15 +0000835
Primiano Tucci3cbb10a2018-04-10 17:52:40 +0100836 writer.Write<int32_t>(1001); // Common field.
837 writer.Write<int32_t>(9999); // Common pid
838 writer.Write<int32_t>(1003); // Uint32 field
839 writer.Write<int32_t>(97); // Pid
840 writer.Write<int32_t>(kKernelBlockDeviceId); // Dev id
841 writer.Write<int32_t>(98); // Inode 32
Hector Dearman2c3ac7f2018-03-22 15:39:36 +0000842 writer.Write<int64_t>(k64BitKernelBlockDeviceId); // Dev id 64
843 writer.Write<int64_t>(99u); // Inode 64
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000844 writer.WriteFixedString(16, "Hello");
845 writer.WriteFixedString(300, "Goodbye");
846
847 auto input = writer.GetCopy();
848 auto length = writer.written();
Hector Dearmanc8488032018-03-02 13:12:01 +0000849 FtraceMetadata metadata{};
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000850
851 ASSERT_TRUE(CpuReader::ParseEvent(ftrace_event_id, input.get(),
852 input.get() + length, &table,
Hector Dearmanc8488032018-03-02 13:12:01 +0000853 provider.writer(), &metadata));
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000854
855 auto event = provider.ParseProto();
856 ASSERT_TRUE(event);
Hector Dearman77af1332017-12-15 11:55:33 +0000857 EXPECT_EQ(event->common_field(), 1001ul);
Anna Zapponedfaa90b2018-03-23 14:56:48 +0000858 EXPECT_EQ(event->common_pid(), 9999ul);
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000859 EXPECT_EQ(event->event_case(), FakeFtraceEvent::kAllFields);
Anna Zappone4ea73c02018-03-09 16:01:21 +0000860 EXPECT_EQ(event->all_fields().field_uint32(), 1003u);
Hector Dearman2c3ac7f2018-03-22 15:39:36 +0000861 EXPECT_EQ(event->all_fields().field_pid(), 97);
Primiano Tucci3cbb10a2018-04-10 17:52:40 +0100862 EXPECT_EQ(event->all_fields().field_dev_32(),
863 static_cast<uint32_t>(kUserspaceBlockDeviceId));
Hector Dearmanf19e7c52018-03-06 10:25:01 +0000864 EXPECT_EQ(event->all_fields().field_inode_32(), 98u);
Primiano Tucci808d6df2018-03-31 13:24:18 +0100865// TODO(primiano): for some reason this fails on mac.
866#if !PERFETTO_BUILDFLAG(PERFETTO_OS_MACOSX)
Hector Dearman2c3ac7f2018-03-22 15:39:36 +0000867 EXPECT_EQ(event->all_fields().field_dev_64(), k64BitUserspaceBlockDeviceId);
Primiano Tucci808d6df2018-03-31 13:24:18 +0100868#endif
Hector Dearmanf19e7c52018-03-06 10:25:01 +0000869 EXPECT_EQ(event->all_fields().field_inode_64(), 99u);
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000870 EXPECT_EQ(event->all_fields().field_char_16(), "Hello");
871 EXPECT_EQ(event->all_fields().field_char(), "Goodbye");
Hector Dearmanf19e7c52018-03-06 10:25:01 +0000872 EXPECT_THAT(metadata.pids, Contains(97));
Anna Zappone8ce30872018-03-19 17:01:15 +0000873 EXPECT_EQ(metadata.inode_and_device.size(), 2U);
874 EXPECT_THAT(metadata.inode_and_device,
Hector Dearman2c3ac7f2018-03-22 15:39:36 +0000875 Contains(Pair(98u, kUserspaceBlockDeviceId)));
Anna Zappone8ce30872018-03-19 17:01:15 +0000876 EXPECT_THAT(metadata.inode_and_device,
Hector Dearman2c3ac7f2018-03-22 15:39:36 +0000877 Contains(Pair(99u, k64BitUserspaceBlockDeviceId)));
Anna Zappone8ce30872018-03-19 17:01:15 +0000878}
879
880TEST(CpuReaderTest, TranslateBlockDeviceIDToUserspace) {
Hector Dearman2c3ac7f2018-03-22 15:39:36 +0000881 const uint32_t kKernelBlockDeviceId = 271581216;
Primiano Tucci3cbb10a2018-04-10 17:52:40 +0100882 const BlockDeviceID kUserspaceBlockDeviceId = 66336;
Hector Dearman2c3ac7f2018-03-22 15:39:36 +0000883 const uint64_t k64BitKernelBlockDeviceId = 4442450946;
Primiano Tucci3cbb10a2018-04-10 17:52:40 +0100884 const BlockDeviceID k64BitUserspaceBlockDeviceId =
885 static_cast<BlockDeviceID>(17594983681026ULL);
Anna Zappone8ce30872018-03-19 17:01:15 +0000886
Primiano Tucci3cbb10a2018-04-10 17:52:40 +0100887 EXPECT_EQ(CpuReader::TranslateBlockDeviceIDToUserspace<uint32_t>(
888 kKernelBlockDeviceId),
889 kUserspaceBlockDeviceId);
890 EXPECT_EQ(CpuReader::TranslateBlockDeviceIDToUserspace<uint64_t>(
891 k64BitKernelBlockDeviceId),
892 k64BitUserspaceBlockDeviceId);
Hector Dearmancc6dcb02017-12-12 16:48:43 +0000893}
894
Hector Dearman639651c2018-03-09 19:00:40 +0000895// clang-format off
Hector Dearmanbc8368e2018-01-25 17:34:11 +0000896// # tracer: nop
897// #
Hector Dearman639651c2018-03-09 19:00:40 +0000898// # entries-in-buffer/entries-written: 1041/238740 #P:8
Hector Dearmanbc8368e2018-01-25 17:34:11 +0000899// #
900// # _-----=> irqs-off
901// # / _----=> need-resched
902// # | / _---=> hardirq/softirq
903// # || / _--=> preempt-depth
904// # ||| / delay
905// # TASK-PID CPU# |||| TIMESTAMP FUNCTION
906// # | | | |||| | |
Hector Dearman639651c2018-03-09 19:00:40 +0000907// android.bg-1668 [000] ...1 174991.234105: ext4_journal_start: dev 259,32 blocks, 2 rsv_blocks, 0 caller ext4_dirty_inode+0x30/0x68
908// android.bg-1668 [000] ...1 174991.234108: ext4_mark_inode_dirty: dev 259,32 ino 2883605 caller ext4_dirty_inode+0x48/0x68
909// android.bg-1668 [000] ...1 174991.234118: ext4_da_write_begin: dev 259,32 ino 2883605 pos 20480 len 4096 flags 0
910// android.bg-1668 [000] ...1 174991.234126: ext4_journal_start: dev 259,32 blocks, 1 rsv_blocks, 0 caller ext4_da_write_begin+0x3d4/0x518
911// android.bg-1668 [000] ...1 174991.234133: ext4_es_lookup_extent_enter: dev 259,32 ino 2883605 lblk 5
912// android.bg-1668 [000] ...1 174991.234135: ext4_es_lookup_extent_exit: dev 259,32 ino 2883605 found 1 [5/4294967290) 576460752303423487 H0x10
913// android.bg-1668 [000] ...2 174991.234140: ext4_da_reserve_space: dev 259,32 ino 2883605 mode 0100600 i_blocks 8 reserved_data_blocks 6 reserved_meta_blocks 0
914// android.bg-1668 [000] ...1 174991.234142: ext4_es_insert_extent: dev 259,32 ino 2883605 es [5/1) mapped 576460752303423487 status D
915// android.bg-1668 [000] ...1 174991.234153: ext4_da_write_end: dev 259,32 ino 2883605 pos 20480 len 4096 copied 4096
916// android.bg-1668 [000] ...1 174991.234158: ext4_journal_start: dev 259,32 blocks, 2 rsv_blocks, 0 caller ext4_dirty_inode+0x30/0x68
917// android.bg-1668 [000] ...1 174991.234160: ext4_mark_inode_dirty: dev 259,32 ino 2883605 caller ext4_dirty_inode+0x48/0x68
918// android.bg-1668 [000] ...1 174991.234170: ext4_da_write_begin: dev 259,32 ino 2883605 pos 24576 len 2968 flags 0
919// android.bg-1668 [000] ...1 174991.234178: ext4_journal_start: dev 259,32 blocks, 1 rsv_blocks, 0 caller ext4_da_write_begin+0x3d4/0x518
920// android.bg-1668 [000] ...1 174991.234184: ext4_es_lookup_extent_enter: dev 259,32 ino 2883605 lblk 6
921// android.bg-1668 [000] ...1 174991.234187: ext4_es_lookup_extent_exit: dev 259,32 ino 2883605 found 1 [6/4294967289) 576460752303423487 H0x10
922// android.bg-1668 [000] ...2 174991.234191: ext4_da_reserve_space: dev 259,32 ino 2883605 mode 0100600 i_blocks 8 reserved_data_blocks 7 reserved_meta_blocks 0
923// android.bg-1668 [000] ...1 174991.234193: ext4_es_insert_extent: dev 259,32 ino 2883605 es [6/1) mapped 576460752303423487 status D
924// android.bg-1668 [000] ...1 174991.234203: ext4_da_write_end: dev 259,32 ino 2883605 pos 24576 len 2968 copied 2968
925// android.bg-1668 [000] ...1 174991.234209: ext4_journal_start: dev 259,32 blocks, 2 rsv_blocks, 0 caller ext4_dirty_inode+0x30/0x68
926// android.bg-1668 [000] ...1 174991.234211: ext4_mark_inode_dirty: dev 259,32 ino 2883605 caller ext4_dirty_inode+0x48/0x68
927// android.bg-1668 [000] ...1 174991.234262: ext4_sync_file_enter: dev 259,32 ino 2883605 parent 2883592 datasync 0
928// android.bg-1668 [000] ...1 174991.234270: ext4_writepages: dev 259,32 ino 2883605 nr_to_write 9223372036854775807 pages_skipped 0 range_start 0 range_end 9223372036854775807 sync_mode 1 for_kupdate 0 range_cyclic 0 writeback_index 0
929// android.bg-1668 [000] ...1 174991.234287: ext4_journal_start: dev 259,32 blocks, 10 rsv_blocks, 0 caller ext4_writepages+0x6a4/0x119c
930// android.bg-1668 [000] ...1 174991.234294: ext4_da_write_pages: dev 259,32 ino 2883605 first_page 0 nr_to_write 9223372036854775807 sync_mode 1
931// android.bg-1668 [000] ...1 174991.234319: ext4_da_write_pages_extent: dev 259,32 ino 2883605 lblk 0 len 7 flags 0x200
932// android.bg-1668 [000] ...1 174991.234322: ext4_es_lookup_extent_enter: dev 259,32 ino 2883605 lblk 0
933// android.bg-1668 [000] ...1 174991.234324: ext4_es_lookup_extent_exit: dev 259,32 ino 2883605 found 1 [0/7) 576460752303423487 D0x10
934// android.bg-1668 [000] ...1 174991.234328: ext4_ext_map_blocks_enter: dev 259,32 ino 2883605 lblk 0 len 7 flags CREATE|DELALLOC|METADATA_NOFAIL
935// android.bg-1668 [000] ...1 174991.234341: ext4_request_blocks: dev 259,32 ino 2883605 flags HINT_DATA|DELALLOC_RESV|USE_RESV len 7 lblk 0 goal 11567104 lleft 0 lright 0 pleft 0 pright 0
936// android.bg-1668 [000] ...1 174991.234394: ext4_mballoc_prealloc: dev 259,32 inode 2883605 orig 353/0/7@0 result 65/25551/7@0
937// android.bg-1668 [000] ...1 174991.234400: ext4_allocate_blocks: dev 259,32 ino 2883605 flags HINT_DATA|DELALLOC_RESV|USE_RESV len 7 block 2155471 lblk 0 goal 11567104 lleft 0 lright 0 pleft 0 pright 0
938// android.bg-1668 [000] ...1 174991.234409: ext4_mark_inode_dirty: dev 259,32 ino 2883605 caller __ext4_ext_dirty+0x104/0x170
939// android.bg-1668 [000] ...1 174991.234420: ext4_get_reserved_cluster_alloc: dev 259,32 ino 2883605 lblk 0 len 7
940// android.bg-1668 [000] ...2 174991.234426: ext4_da_update_reserve_space: dev 259,32 ino 2883605 mode 0100600 i_blocks 8 used_blocks 7 reserved_data_blocks 7 reserved_meta_blocks 0 allocated_meta_blocks 0 quota_claim 1
941// android.bg-1668 [000] ...1 174991.234434: ext4_journal_start: dev 259,32 blocks, 1 rsv_blocks, 0 caller ext4_mark_dquot_dirty+0x80/0xd4
942// android.bg-1668 [000] ...1 174991.234441: ext4_es_lookup_extent_enter: dev 259,32 ino 3 lblk 1
943// android.bg-1668 [000] ...1 174991.234445: ext4_es_lookup_extent_exit: dev 259,32 ino 3 found 1 [0/2) 9255 W0x10
944// android.bg-1668 [000] ...1 174991.234456: ext4_journal_start: dev 259,32 blocks, 1 rsv_blocks, 0 caller ext4_mark_dquot_dirty+0x80/0xd4
945// android.bg-1668 [000] ...1 174991.234460: ext4_es_lookup_extent_enter: dev 259,32 ino 4 lblk 1
946// android.bg-1668 [000] ...1 174991.234463: ext4_es_lookup_extent_exit: dev 259,32 ino 4 found 1 [0/2) 9257 W0x10
947// android.bg-1668 [000] ...1 174991.234471: ext4_journal_start: dev 259,32 blocks, 2 rsv_blocks, 0 caller ext4_dirty_inode+0x30/0x68
948// android.bg-1668 [000] ...1 174991.234474: ext4_mark_inode_dirty: dev 259,32 ino 2883605 caller ext4_dirty_inode+0x48/0x68
949// android.bg-1668 [000] ...1 174991.234481: ext4_ext_map_blocks_exit: dev 259,32 ino 2883605 flags CREATE|DELALLOC|METADATA_NOFAIL lblk 0 pblk 2155471 len 7 mflags NM ret 7
950// android.bg-1668 [000] ...1 174991.234484: ext4_es_insert_extent: dev 259,32 ino 2883605 es [0/7) mapped 2155471 status W
951// android.bg-1668 [000] ...1 174991.234547: ext4_mark_inode_dirty: dev 259,32 ino 2883605 caller ext4_writepages+0xdc0/0x119c
952// android.bg-1668 [000] ...1 174991.234604: ext4_journal_start: dev 259,32 blocks, 10 rsv_blocks, 0 caller ext4_writepages+0x6a4/0x119c
953// android.bg-1668 [000] ...1 174991.234609: ext4_da_write_pages: dev 259,32 ino 2883605 first_page 7 nr_to_write 9223372036854775800 sync_mode 1
954// android.bg-1668 [000] ...1 174991.234876: ext4_writepages_result: dev 259,32 ino 2883605 ret 0 pages_written 7 pages_skipped 0 sync_mode 1 writeback_index 7
955// Profile Saver-5504 [000] ...1 175002.711928: ext4_discard_preallocations: dev 259,32 ino 1311176
956// Profile Saver-5504 [000] ...1 175002.714165: ext4_begin_ordered_truncate: dev 259,32 ino 1311176 new_size 0
957// Profile Saver-5504 [000] ...1 175002.714172: ext4_journal_start: dev 259,32 blocks, 3 rsv_blocks, 0 caller ext4_setattr+0x5b4/0x788
958// Profile Saver-5504 [000] ...1 175002.714218: ext4_mark_inode_dirty: dev 259,32 ino 1311176 caller ext4_setattr+0x65c/0x788
959// Profile Saver-5504 [000] ...1 175002.714277: ext4_invalidatepage: dev 259,32 ino 1311176 page_index 0 offset 0 length 4096
960// Profile Saver-5504 [000] ...1 175002.714281: ext4_releasepage: dev 259,32 ino 1311176 page_index 0
961// Profile Saver-5504 [000] ...1 175002.714295: ext4_invalidatepage: dev 259,32 ino 1311176 page_index 1 offset 0 length 4096
962// Profile Saver-5504 [000] ...1 175002.714296: ext4_releasepage: dev 259,32 ino 1311176 page_index 1
963// Profile Saver-5504 [000] ...1 175002.714315: ext4_truncate_enter: dev 259,32 ino 1311176 blocks 24
964// Profile Saver-5504 [000] ...1 175002.714318: ext4_journal_start: dev 259,32 blocks, 10 rsv_blocks, 0 caller ext4_truncate+0x258/0x4b8
965// Profile Saver-5504 [000] ...1 175002.714322: ext4_discard_preallocations: dev 259,32 ino 1311176
966// Profile Saver-5504 [000] ...1 175002.714324: ext4_mark_inode_dirty: dev 259,32 ino 1311176 caller ext4_ext_truncate+0x24/0xc8
967// Profile Saver-5504 [000] ...1 175002.714328: ext4_es_remove_extent: dev 259,32 ino 1311176 es [0/4294967295)
968// Profile Saver-5504 [000] ...1 175002.714335: ext4_journal_start: dev 259,32 blocks, 1 rsv_blocks, 0 caller ext4_ext_remove_space+0x60/0x1180
969// Profile Saver-5504 [000] ...1 175002.714338: ext4_ext_remove_space: dev 259,32 ino 1311176 since 0 end 4294967294 depth 0
970// Profile Saver-5504 [000] ...1 175002.714347: ext4_ext_rm_leaf: dev 259,32 ino 1311176 start_lblk 0 last_extent [0(5276994), 2]partial_cluster 0
971// Profile Saver-5504 [000] ...1 175002.714351: ext4_remove_blocks: dev 259,32 ino 1311176 extent [0(5276994), 2]from 0 to 1 partial_cluster 0
972// Profile Saver-5504 [000] ...1 175002.714354: ext4_free_blocks: dev 259,32 ino 1311176 mode 0100600 block 5276994 count 2 flags 1ST_CLUSTER
973// Profile Saver-5504 [000] ...1 175002.714365: ext4_mballoc_free: dev 259,32 inode 1311176 extent 161/1346/2
974// Profile Saver-5504 [000] ...1 175002.714382: ext4_journal_start: dev 259,32 blocks, 1 rsv_blocks, 0 caller ext4_mark_dquot_dirty+0x80/0xd4
975// Profile Saver-5504 [000] ...1 175002.714391: ext4_es_lookup_extent_enter: dev 259,32 ino 3 lblk 4
976// Profile Saver-5504 [000] ...1 175002.714394: ext4_es_lookup_extent_exit: dev 259,32 ino 3 found 1 [4/1) 557094 W0x10
977// Profile Saver-5504 [000] ...1 175002.714402: ext4_journal_start: dev 259,32 blocks, 1 rsv_blocks, 0 caller ext4_mark_dquot_dirty+0x80/0xd4
978// Profile Saver-5504 [000] ...1 175002.714404: ext4_es_lookup_extent_enter: dev 259,32 ino 4 lblk 8
979// Profile Saver-5504 [000] ...1 175002.714406: ext4_es_lookup_extent_exit: dev 259,32 ino 4 found 1 [8/3) 7376914 W0x10
980// Profile Saver-5504 [000] ...1 175002.714413: ext4_journal_start: dev 259,32 blocks, 2 rsv_blocks, 0 caller ext4_dirty_inode+0x30/0x68
981// Profile Saver-5504 [000] ...1 175002.714414: ext4_mark_inode_dirty: dev 259,32 ino 1311176 caller ext4_dirty_inode+0x48/0x68
982// Profile Saver-5504 [000] ...1 175002.714420: ext4_mark_inode_dirty: dev 259,32 ino 1311176 caller __ext4_ext_dirty+0x104/0x170
983// Profile Saver-5504 [000] ...1 175002.714423: ext4_ext_remove_space_done: dev 259,32 ino 1311176 since 0 end 4294967294 depth 0 partial 0 remaining_entries 0
984// Profile Saver-5504 [000] ...1 175002.714425: ext4_mark_inode_dirty: dev 259,32 ino 1311176 caller __ext4_ext_dirty+0x104/0x170
985// Profile Saver-5504 [000] ...1 175002.714433: ext4_mark_inode_dirty: dev 259,32 ino 1311176 caller ext4_truncate+0x3c4/0x4b8
986// Profile Saver-5504 [000] ...1 175002.714436: ext4_truncate_exit: dev 259,32 ino 1311176 blocks 8
987// Profile Saver-5504 [000] ...1 175002.714437: ext4_journal_start: dev 259,32 blocks, 2 rsv_blocks, 0 caller ext4_dirty_inode+0x30/0x68
988// Profile Saver-5504 [000] ...1 175002.714438: ext4_mark_inode_dirty: dev 259,32 ino 1311176 caller ext4_dirty_inode+0x48/0x68
989// Profile Saver-5504 [000] ...1 175002.714462: ext4_da_write_begin: dev 259,32 ino 1311176 pos 0 len 4 flags 0
990// Profile Saver-5504 [000] ...1 175002.714472: ext4_journal_start: dev 259,32 blocks, 1 rsv_blocks, 0 caller ext4_da_write_begin+0x3d4/0x518
991// Profile Saver-5504 [000] ...1 175002.714477: ext4_es_lookup_extent_enter: dev 259,32 ino 1311176 lblk 0
992// Profile Saver-5504 [000] ...1 175002.714477: ext4_es_lookup_extent_exit: dev 259,32 ino 1311176 found 0 [0/0) 0
993// Profile Saver-5504 [000] ...1 175002.714480: ext4_ext_map_blocks_enter: dev 259,32 ino 1311176 lblk 0 len 1 flags
994// Profile Saver-5504 [000] ...1 175002.714485: ext4_es_find_delayed_extent_range_enter: dev 259,32 ino 1311176 lblk 0
995// Profile Saver-5504 [000] ...1 175002.714488: ext4_es_find_delayed_extent_range_exit: dev 259,32 ino 1311176 es [0/0) mapped 0 status
996// Profile Saver-5504 [000] ...1 175002.714490: ext4_es_insert_extent: dev 259,32 ino 1311176 es [0/4294967295) mapped 576460752303423487 status H
997// Profile Saver-5504 [000] ...1 175002.714495: ext4_ext_map_blocks_exit: dev 259,32 ino 1311176 flags lblk 0 pblk 4294967296 len 1 mflags ret 0
998// Profile Saver-5504 [000] ...2 175002.714501: ext4_da_reserve_space: dev 259,32 ino 1311176 mode 0100600 i_blocks 8 reserved_data_blocks 1 reserved_meta_blocks 0
999// Profile Saver-5504 [000] ...1 175002.714505: ext4_es_insert_extent: dev 259,32 ino 1311176 es [0/1) mapped 576460752303423487 status D
1000// Profile Saver-5504 [000] ...1 175002.714513: ext4_da_write_end: dev 259,32 ino 1311176 pos 0 len 4 copied 4
1001// Profile Saver-5504 [000] ...1 175002.714519: ext4_journal_start: dev 259,32 blocks, 2 rsv_blocks, 0 caller ext4_dirty_inode+0x30/0x68
1002// Profile Saver-5504 [000] ...1 175002.714520: ext4_mark_inode_dirty: dev 259,32 ino 1311176 caller ext4_dirty_inode+0x48/0x68
1003// Profile Saver-5504 [000] ...1 175002.714527: ext4_da_write_begin: dev 259,32 ino 1311176 pos 4 len 4 flags 0
1004// Profile Saver-5504 [000] ...1 175002.714529: ext4_journal_start: dev 259,32 blocks, 1 rsv_blocks, 0 caller ext4_da_write_begin+0x3d4/0x518
1005// Profile Saver-5504 [000] ...1 175002.714531: ext4_da_write_end: dev 259,32 ino 1311176 pos 4 len 4 copied 4
1006// Profile Saver-5504 [000] ...1 175002.714532: ext4_journal_start: dev 259,32 blocks, 2 rsv_blocks, 0 caller ext4_dirty_inode+0x30/0x68
1007// Profile Saver-5504 [000] ...1 175002.714532: ext4_mark_inode_dirty: dev 259,32 ino 1311176 caller ext4_dirty_inode+0x48/0x68
1008// Profile Saver-5504 [000] ...1 175002.715313: ext4_journal_start: dev 259,32 blocks, 2 rsv_blocks, 0 caller ext4_dirty_inode+0x30/0x68
1009// Profile Saver-5504 [000] ...1 175002.715322: ext4_mark_inode_dirty: dev 259,32 ino 1311176 caller ext4_dirty_inode+0x48/0x68
1010// Profile Saver-5504 [000] ...1 175002.723849: ext4_da_write_begin: dev 259,32 ino 1311176 pos 8 len 5 flags 0
1011// Profile Saver-5504 [000] ...1 175002.723862: ext4_journal_start: dev 259,32 blocks, 1 rsv_blocks, 0 caller ext4_da_write_begin+0x3d4/0x518
1012// Profile Saver-5504 [000] ...1 175002.723873: ext4_da_write_end: dev 259,32 ino 1311176 pos 8 len 5 copied 5
1013// Profile Saver-5504 [000] ...1 175002.723877: ext4_journal_start: dev 259,32 blocks, 2 rsv_blocks, 0 caller ext4_dirty_inode+0x30/0x68
1014// Profile Saver-5504 [000] ...1 175002.723879: ext4_mark_inode_dirty: dev 259,32 ino 1311176 caller ext4_dirty_inode+0x48/0x68
1015// Profile Saver-5504 [000] ...1 175002.726857: ext4_journal_start: dev 259,32 blocks, 2 rsv_blocks, 0 caller ext4_dirty_inode+0x30/0x68
1016// Profile Saver-5504 [000] ...1 175002.726867: ext4_mark_inode_dirty: dev 259,32 ino 1311176 caller ext4_dirty_inode+0x48/0x68
1017// Profile Saver-5504 [000] ...1 175002.726881: ext4_da_write_begin: dev 259,32 ino 1311176 pos 13 len 4 flags 0
1018// Profile Saver-5504 [000] ...1 175002.726883: ext4_journal_start: dev 259,32 blocks, 1 rsv_blocks, 0 caller ext4_da_write_begin+0x3d4/0x518
1019// Profile Saver-5504 [000] ...1 175002.726890: ext4_da_write_end: dev 259,32 ino 1311176 pos 13 len 4 copied 4
1020// Profile Saver-5504 [000] ...1 175002.726892: ext4_journal_start: dev 259,32 blocks, 2 rsv_blocks, 0 caller ext4_dirty_inode+0x30/0x68
1021// Profile Saver-5504 [000] ...1 175002.726892: ext4_mark_inode_dirty: dev 259,32 ino 1311176 caller ext4_dirty_inode+0x48/0x68
1022// Profile Saver-5504 [000] ...1 175002.726900: ext4_da_write_begin: dev 259,32 ino 1311176 pos 17 len 4079 flags 0
1023// Profile Saver-5504 [000] ...1 175002.726901: ext4_journal_start: dev 259,32 blocks, 1 rsv_blocks, 0 caller ext4_da_write_begin+0x3d4/0x518
1024// Profile Saver-5504 [000] ...1 175002.726904: ext4_da_write_end: dev 259,32 ino 1311176 pos 17 len 4079 copied 4079
1025// Profile Saver-5504 [000] ...1 175002.726905: ext4_journal_start: dev 259,32 blocks, 2 rsv_blocks, 0 caller ext4_dirty_inode+0x30/0x68
1026// Profile Saver-5504 [000] ...1 175002.726906: ext4_mark_inode_dirty: dev 259,32 ino 1311176 caller ext4_dirty_inode+0x48/0x68
1027// Profile Saver-5504 [000] ...1 175002.726908: ext4_da_write_begin: dev 259,32 ino 1311176 pos 4096 len 2780 flags 0
1028// Profile Saver-5504 [000] ...1 175002.726916: ext4_journal_start: dev 259,32 blocks, 1 rsv_blocks, 0 caller ext4_da_write_begin+0x3d4/0x518
1029// Profile Saver-5504 [000] ...1 175002.726921: ext4_es_lookup_extent_enter: dev 259,32 ino 1311176 lblk 1
1030// Profile Saver-5504 [000] ...1 175002.726924: ext4_es_lookup_extent_exit: dev 259,32 ino 1311176 found 1 [1/4294967294) 576460752303423487 H0x10
1031// Profile Saver-5504 [000] ...2 175002.726931: ext4_da_reserve_space: dev 259,32 ino 1311176 mode 0100600 i_blocks 8 reserved_data_blocks 2 reserved_meta_blocks 0
1032// Profile Saver-5504 [000] ...1 175002.726933: ext4_es_insert_extent: dev 259,32 ino 1311176 es [1/1) mapped 576460752303423487 status D
1033// Profile Saver-5504 [000] ...1 175002.726940: ext4_da_write_end: dev 259,32 ino 1311176 pos 4096 len 2780 copied 2780
1034// Profile Saver-5504 [000] ...1 175002.726941: ext4_journal_start: dev 259,32 blocks, 2 rsv_blocks, 0 caller ext4_dirty_inode+0x30/0x68
1035// Profile Saver-5504 [000] ...1 175002.726942: ext4_mark_inode_dirty: dev 259,32 ino 1311176 caller ext4_dirty_inode+0x48/0x68
1036// d.process.acor-27885 [000] ...1 175018.227675: ext4_journal_start: dev 259,32 blocks, 2 rsv_blocks, 0 caller ext4_dirty_inode+0x30/0x68
1037// d.process.acor-27885 [000] ...1 175018.227699: ext4_mark_inode_dirty: dev 259,32 ino 3278189 caller ext4_dirty_inode+0x48/0x68
1038// d.process.acor-27885 [000] ...1 175018.227839: ext4_sync_file_enter: dev 259,32 ino 3278183 parent 3277001 datasync 1
1039// d.process.acor-27885 [000] ...1 175018.227847: ext4_writepages: dev 259,32 ino 3278183 nr_to_write 9223372036854775807 pages_skipped 0 range_start 0 range_end 9223372036854775807 sync_mode 1 for_kupdate 0 range_cyclic 0 writeback_index 2
1040// d.process.acor-27885 [000] ...1 175018.227852: ext4_writepages_result: dev 259,32 ino 3278183 ret 0 pages_written 0 pages_skipped 0 sync_mode 1 writeback_index 2
1041// clang-format on
Hector Dearmanbc8368e2018-01-25 17:34:11 +00001042
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001043static ExamplePage g_full_page_sched_switch{
Hector Dearmanbc8368e2018-01-25 17:34:11 +00001044 "synthetic",
1045 R"(
104600000000: 31f2 7622 1a00 0000 b40f 0000 0000 0000 1.v"............
104700000010: 1e00 0000 0000 0000 1000 0000 2f00 0103 ............/...
104800000020: 140d 0000 4a69 7420 7468 7265 6164 2070 ....Jit thread p
104900000030: 6f6f 6c00 140d 0000 8100 0000 0008 0000 ool.............
105000000040: 0000 0000 4576 656e 7454 6872 6561 6400 ....EventThread.
105100000050: 6572 0000 7002 0000 6100 0000 f057 0e00 er..p...a....W..
105200000060: 2f00 0103 7002 0000 4576 656e 7454 6872 /...p...EventThr
105300000070: 6561 6400 6572 0000 7002 0000 6100 0000 ead.er..p...a...
105400000080: 0100 0000 0000 0000 4a69 7420 7468 7265 ........Jit thre
105500000090: 6164 2070 6f6f 6c00 140d 0000 8100 0000 ad pool.........
Anna Zappone74b1f2a2018-02-16 15:51:49 +00001056000000a0: 50c2 0910 2f00 0103 140d 0000 4a69 7420 P.../.......Jit
Hector Dearmanbc8368e2018-01-25 17:34:11 +00001057000000b0: 7468 7265 6164 2070 6f6f 6c00 140d 0000 thread pool.....
1058000000c0: 8100 0000 0100 0000 0000 0000 7377 6170 ............swap
1059000000d0: 7065 722f 3000 0000 0000 0000 0000 0000 per/0...........
1060000000e0: 7800 0000 901a c80e 2f00 0103 0000 0000 x......./.......
1061000000f0: 7377 6170 7065 722f 3000 0000 0000 0000 swapper/0.......
106200000100: 0000 0000 7800 0000 0000 0000 0000 0000 ....x...........
106300000110: 4469 7370 5379 6e63 0069 6e67 6572 0000 DispSync.inger..
106400000120: 6f02 0000 6100 0000 1064 1e00 2f00 0103 o...a....d../...
106500000130: 6f02 0000 4469 7370 5379 6e63 0069 6e67 o...DispSync.ing
106600000140: 6572 0000 6f02 0000 6100 0000 0100 0000 er..o...a.......
106700000150: 0000 0000 7377 6170 7065 722f 3000 0000 ....swapper/0...
106800000160: 0000 0000 0000 0000 7800 0000 9074 8600 ........x....t..
106900000170: 2f00 0103 0000 0000 7377 6170 7065 722f /.......swapper/
107000000180: 3000 0000 0000 0000 0000 0000 7800 0000 0...........x...
107100000190: 0000 0000 0000 0000 4576 656e 7454 6872 ........EventThr
1072000001a0: 6561 6400 6572 0000 7002 0000 6100 0000 ead.er..p...a...
1073000001b0: d071 0b00 2f00 0103 7002 0000 4576 656e .q../...p...Even
1074000001c0: 7454 6872 6561 6400 6572 0000 7002 0000 tThread.er..p...
1075000001d0: 6100 0000 0100 0000 0000 0000 7377 6170 a...........swap
1076000001e0: 7065 722f 3000 0000 0000 0000 0000 0000 per/0...........
1077000001f0: 7800 0000 10cd 4504 2f00 0103 0000 0000 x.....E./.......
107800000200: 7377 6170 7065 722f 3000 0000 0000 0000 swapper/0.......
107900000210: 0000 0000 7800 0000 0000 0000 0000 0000 ....x...........
108000000220: 7375 676f 763a 3000 0000 0000 0000 0000 sugov:0.........
108100000230: 3802 0000 3100 0000 30d6 1300 2f00 0103 8...1...0.../...
108200000240: 3802 0000 7375 676f 763a 3000 0000 0000 8...sugov:0.....
108300000250: 0000 0000 3802 0000 3100 0000 0100 0000 ....8...1.......
108400000260: 0000 0000 7377 6170 7065 722f 3000 0000 ....swapper/0...
108500000270: 0000 0000 0000 0000 7800 0000 3049 a202 ........x...0I..
108600000280: 2f00 0103 0000 0000 7377 6170 7065 722f /.......swapper/
108700000290: 3000 0000 0000 0000 0000 0000 7800 0000 0...........x...
1088000002a0: 0000 0000 0000 0000 4469 7370 5379 6e63 ........DispSync
1089000002b0: 0069 6e67 6572 0000 6f02 0000 6100 0000 .inger..o...a...
1090000002c0: d07a 1000 2f00 0103 6f02 0000 4469 7370 .z../...o...Disp
1091000002d0: 5379 6e63 0069 6e67 6572 0000 6f02 0000 Sync.inger..o...
1092000002e0: 6100 0000 0100 0000 0000 0000 7377 6170 a...........swap
1093000002f0: 7065 722f 3000 0000 0000 0000 0000 0000 per/0...........
109400000300: 7800 0000 d085 1100 2f00 0103 0000 0000 x......./.......
109500000310: 7377 6170 7065 722f 3000 0000 0000 0000 swapper/0.......
109600000320: 0000 0000 7800 0000 0000 0000 0000 0000 ....x...........
109700000330: 7375 7266 6163 6566 6c69 6e67 6572 0000 surfaceflinger..
109800000340: 4b02 0000 6200 0000 907a f000 2f00 0103 K...b....z../...
109900000350: 4b02 0000 7375 7266 6163 6566 6c69 6e67 K...surfacefling
110000000360: 6572 0000 4b02 0000 6200 0000 0100 0000 er..K...b.......
110100000370: 0000 0000 7377 6170 7065 722f 3000 0000 ....swapper/0...
110200000380: 0000 0000 0000 0000 7800 0000 305a 6400 ........x...0Zd.
110300000390: 2f00 0103 0000 0000 7377 6170 7065 722f /.......swapper/
1104000003a0: 3000 0000 0000 0000 0000 0000 7800 0000 0...........x...
1105000003b0: 0000 0000 0000 0000 6d64 7373 5f66 6230 ........mdss_fb0
1106000003c0: 0000 0000 0000 0000 5714 0000 5300 0000 ........W...S...
1107000003d0: 10b1 9e03 2f00 0103 5714 0000 6d64 7373 ..../...W...mdss
1108000003e0: 5f66 6230 0000 0000 0000 0000 5714 0000 _fb0........W...
1109000003f0: 5300 0000 0200 0000 0000 0000 6b73 6f66 S...........ksof
111000000400: 7469 7271 642f 3000 0000 0000 0300 0000 tirqd/0.........
111100000410: 7800 0000 90bb 9900 2f00 0103 0300 0000 x......./.......
111200000420: 6b73 6f66 7469 7271 642f 3000 0000 0000 ksoftirqd/0.....
111300000430: 0300 0000 7800 0000 0100 0000 0000 0000 ....x...........
111400000440: 7377 6170 7065 722f 3000 0000 0000 0000 swapper/0.......
111500000450: 0000 0000 7800 0000 701e 5305 2f00 0103 ....x...p.S./...
111600000460: 0000 0000 7377 6170 7065 722f 3000 0000 ....swapper/0...
111700000470: 0000 0000 0000 0000 7800 0000 0000 0000 ........x.......
111800000480: 0000 0000 6b77 6f72 6b65 722f 7531 363a ....kworker/u16:
111900000490: 3600 0000 6401 0000 7800 0000 90a1 2900 6...d...x.....).
1120000004a0: 2f00 0103 6401 0000 6b77 6f72 6b65 722f /...d...kworker/
1121000004b0: 7531 363a 3600 0000 6401 0000 7800 0000 u16:6...d...x...
1122000004c0: 0200 0000 0000 0000 7377 6170 7065 722f ........swapper/
1123000004d0: 3000 0000 0000 0000 0000 0000 7800 0000 0...........x...
1124000004e0: b0e5 4f04 2f00 0103 0000 0000 7377 6170 ..O./.......swap
1125000004f0: 7065 722f 3000 0000 0000 0000 0000 0000 per/0...........
112600000500: 7800 0000 0000 0000 0000 0000 4269 6e64 x...........Bind
112700000510: 6572 3a32 3136 385f 3135 0000 e614 0000 er:2168_15......
112800000520: 7800 0000 b0bd 7c00 2f00 0103 e614 0000 x.....|./.......
112900000530: 4269 6e64 6572 3a32 3136 385f 3135 0000 Binder:2168_15..
113000000540: e614 0000 7800 0000 0100 0000 0000 0000 ....x...........
113100000550: 7377 6170 7065 722f 3000 0000 0000 0000 swapper/0.......
113200000560: 0000 0000 7800 0000 d0bd 7e01 2f00 0103 ....x.....~./...
113300000570: 0000 0000 7377 6170 7065 722f 3000 0000 ....swapper/0...
113400000580: 0000 0000 0000 0000 7800 0000 0000 0000 ........x.......
113500000590: 0000 0000 6b77 6f72 6b65 722f 7531 363a ....kworker/u16:
1136000005a0: 3900 0000 e204 0000 7800 0000 7016 0800 9.......x...p...
1137000005b0: 2f00 0103 e204 0000 6b77 6f72 6b65 722f /.......kworker/
1138000005c0: 7531 363a 3900 0000 e204 0000 7800 0000 u16:9.......x...
1139000005d0: 0100 0000 0000 0000 7377 6170 7065 722f ........swapper/
1140000005e0: 3000 0000 0000 0000 0000 0000 7800 0000 0...........x...
1141000005f0: 1004 5200 2f00 0103 0000 0000 7377 6170 ..R./.......swap
114200000600: 7065 722f 3000 0000 0000 0000 0000 0000 per/0...........
114300000610: 7800 0000 0000 0000 0000 0000 6b77 6f72 x...........kwor
114400000620: 6b65 722f 7531 363a 3900 0000 e204 0000 ker/u16:9.......
114500000630: 7800 0000 d0db 0700 2f00 0103 e204 0000 x......./.......
114600000640: 6b77 6f72 6b65 722f 7531 363a 3900 0000 kworker/u16:9...
114700000650: e204 0000 7800 0000 0100 0000 0000 0000 ....x...........
114800000660: 7377 6170 7065 722f 3000 0000 0000 0000 swapper/0.......
114900000670: 0000 0000 7800 0000 b0a2 8c00 2f00 0103 ....x......./...
115000000680: 0000 0000 7377 6170 7065 722f 3000 0000 ....swapper/0...
115100000690: 0000 0000 0000 0000 7800 0000 0000 0000 ........x.......
1152000006a0: 0000 0000 6b77 6f72 6b65 722f 7531 363a ....kworker/u16:
1153000006b0: 3900 0000 e204 0000 7800 0000 d02b 0400 9.......x....+..
1154000006c0: 2f00 0103 e204 0000 6b77 6f72 6b65 722f /.......kworker/
1155000006d0: 7531 363a 3900 0000 e204 0000 7800 0000 u16:9.......x...
1156000006e0: 0100 0000 0000 0000 7377 6170 7065 722f ........swapper/
1157000006f0: 3000 0000 0000 0000 0000 0000 7800 0000 0...........x...
115800000700: d064 ef05 2f00 0103 0000 0000 7377 6170 .d../.......swap
115900000710: 7065 722f 3000 0000 0000 0000 0000 0000 per/0...........
116000000720: 7800 0000 0000 0000 0000 0000 4469 7370 x...........Disp
116100000730: 5379 6e63 0069 6e67 6572 0000 6f02 0000 Sync.inger..o...
116200000740: 6100 0000 f07d 1b00 2f00 0103 6f02 0000 a....}../...o...
116300000750: 4469 7370 5379 6e63 0069 6e67 6572 0000 DispSync.inger..
116400000760: 6f02 0000 6100 0000 0100 0000 0000 0000 o...a...........
116500000770: 6b73 6f66 7469 7271 642f 3000 0000 0000 ksoftirqd/0.....
116600000780: 0300 0000 7800 0000 304c 2000 2f00 0103 ....x...0L ./...
116700000790: 0300 0000 6b73 6f66 7469 7271 642f 3000 ....ksoftirqd/0.
1168000007a0: 0000 0000 0300 0000 7800 0000 0100 0000 ........x.......
1169000007b0: 0000 0000 6465 7832 6f61 7400 3935 5f33 ....dex2oat.95_3
1170000007c0: 0000 0000 341f 0000 8200 0000 700b 0700 ....4.......p...
1171000007d0: 2f00 0103 341f 0000 6465 7832 6f61 7400 /...4...dex2oat.
1172000007e0: 3935 5f33 0000 0000 341f 0000 8200 0000 95_3....4.......
1173000007f0: 0000 0000 0000 0000 7375 676f 763a 3000 ........sugov:0.
117400000800: 0000 0000 0000 0000 3802 0000 3100 0000 ........8...1...
117500000810: 50b0 0600 2f00 0103 3802 0000 7375 676f P.../...8...sugo
117600000820: 763a 3000 0000 0000 0000 0000 3802 0000 v:0.........8...
117700000830: 3100 0000 0008 0000 0000 0000 6d69 6772 1...........migr
117800000840: 6174 696f 6e2f 3000 0000 0000 0d00 0000 ation/0.........
117900000850: 0000 0000 d09c 0600 2f00 0103 0d00 0000 ......../.......
118000000860: 6d69 6772 6174 696f 6e2f 3000 0000 0000 migration/0.....
118100000870: 0d00 0000 0000 0000 0100 0000 0000 0000 ................
118200000880: 7375 676f 763a 3000 0000 0000 0000 0000 sugov:0.........
118300000890: 3802 0000 3100 0000 7061 1900 2f00 0103 8...1...pa../...
1184000008a0: 3802 0000 7375 676f 763a 3000 0000 0000 8...sugov:0.....
1185000008b0: 0000 0000 3802 0000 3100 0000 0100 0000 ....8...1.......
1186000008c0: 0000 0000 6465 7832 6f61 7400 3935 5f33 ....dex2oat.95_3
1187000008d0: 0000 0000 341f 0000 8200 0000 f03c 5600 ....4........<V.
1188000008e0: 2f00 0103 341f 0000 6465 7832 6f61 7400 /...4...dex2oat.
1189000008f0: 3935 5f33 0000 0000 341f 0000 8200 0000 95_3....4.......
119000000900: 0200 0000 0000 0000 7377 6170 7065 722f ........swapper/
119100000910: 3000 0000 0000 0000 0000 0000 7800 0000 0...........x...
119200000920: 5013 c400 2f00 0103 0000 0000 7377 6170 P.../.......swap
119300000930: 7065 722f 3000 0000 0000 0000 0000 0000 per/0...........
119400000940: 7800 0000 0000 0000 0000 0000 616e 6472 x...........andr
119500000950: 6f69 642e 6861 7264 7761 7200 d20a 0000 oid.hardwar.....
119600000960: 7800 0000 30c9 1300 2f00 0103 d20a 0000 x...0.../.......
119700000970: 616e 6472 6f69 642e 6861 7264 7761 7200 android.hardwar.
119800000980: d20a 0000 7800 0000 0100 0000 0000 0000 ....x...........
119900000990: 7377 6170 7065 722f 3000 0000 0000 0000 swapper/0.......
1200000009a0: 0000 0000 7800 0000 7097 c000 2f00 0103 ....x...p.../...
1201000009b0: 0000 0000 7377 6170 7065 722f 3000 0000 ....swapper/0...
1202000009c0: 0000 0000 0000 0000 7800 0000 0000 0000 ........x.......
1203000009d0: 0000 0000 616e 6472 6f69 642e 6861 7264 ....android.hard
1204000009e0: 7761 7200 d20a 0000 7800 0000 305c 0c00 war.....x...0\..
1205000009f0: 2f00 0103 d20a 0000 616e 6472 6f69 642e /.......android.
120600000a00: 6861 7264 7761 7200 d20a 0000 7800 0000 hardwar.....x...
120700000a10: 0100 0000 0000 0000 7377 6170 7065 722f ........swapper/
120800000a20: 3000 0000 0000 0000 0000 0000 7800 0000 0...........x...
120900000a30: d0aa 1401 2f00 0103 0000 0000 7377 6170 ..../.......swap
121000000a40: 7065 722f 3000 0000 0000 0000 0000 0000 per/0...........
121100000a50: 7800 0000 0000 0000 0000 0000 616e 6472 x...........andr
121200000a60: 6f69 642e 6861 7264 7761 7200 d20a 0000 oid.hardwar.....
121300000a70: 7800 0000 903b 0c00 2f00 0103 d20a 0000 x....;../.......
121400000a80: 616e 6472 6f69 642e 6861 7264 7761 7200 android.hardwar.
121500000a90: d20a 0000 7800 0000 0100 0000 0000 0000 ....x...........
121600000aa0: 7377 6170 7065 722f 3000 0000 0000 0000 swapper/0.......
121700000ab0: 0000 0000 7800 0000 f024 5401 2f00 0103 ....x....$T./...
121800000ac0: 0000 0000 7377 6170 7065 722f 3000 0000 ....swapper/0...
121900000ad0: 0000 0000 0000 0000 7800 0000 0000 0000 ........x.......
122000000ae0: 0000 0000 616e 6472 6f69 642e 6861 7264 ....android.hard
122100000af0: 7761 7200 d20a 0000 7800 0000 f0f3 0b00 war.....x.......
122200000b00: 2f00 0103 d20a 0000 616e 6472 6f69 642e /.......android.
122300000b10: 6861 7264 7761 7200 d20a 0000 7800 0000 hardwar.....x...
122400000b20: 0100 0000 0000 0000 7377 6170 7065 722f ........swapper/
122500000b30: 3000 0000 0000 0000 0000 0000 7800 0000 0...........x...
122600000b40: d0b5 bf02 2f00 0103 0000 0000 7377 6170 ..../.......swap
122700000b50: 7065 722f 3000 0000 0000 0000 0000 0000 per/0...........
122800000b60: 7800 0000 0000 0000 0000 0000 4469 7370 x...........Disp
122900000b70: 5379 6e63 0069 6e67 6572 0000 6f02 0000 Sync.inger..o...
123000000b80: 6100 0000 90cd 1400 2f00 0103 6f02 0000 a......./...o...
123100000b90: 4469 7370 5379 6e63 0069 6e67 6572 0000 DispSync.inger..
123200000ba0: 6f02 0000 6100 0000 0100 0000 0000 0000 o...a...........
123300000bb0: 7377 6170 7065 722f 3000 0000 0000 0000 swapper/0.......
123400000bc0: 0000 0000 7800 0000 50a6 1100 2f00 0103 ....x...P.../...
123500000bd0: 0000 0000 7377 6170 7065 722f 3000 0000 ....swapper/0...
123600000be0: 0000 0000 0000 0000 7800 0000 0000 0000 ........x.......
123700000bf0: 0000 0000 7375 7266 6163 6566 6c69 6e67 ....surfacefling
123800000c00: 6572 0000 4b02 0000 6200 0000 b04c 4200 er..K...b....LB.
123900000c10: 2f00 0103 4b02 0000 7375 7266 6163 6566 /...K...surfacef
124000000c20: 6c69 6e67 6572 0000 4b02 0000 6200 0000 linger..K...b...
124100000c30: 0100 0000 0000 0000 7377 6170 7065 722f ........swapper/
124200000c40: 3000 0000 0000 0000 0000 0000 7800 0000 0...........x...
124300000c50: b025 060a 2f00 0103 0000 0000 7377 6170 .%../.......swap
124400000c60: 7065 722f 3000 0000 0000 0000 0000 0000 per/0...........
124500000c70: 7800 0000 0000 0000 0000 0000 6b77 6f72 x...........kwor
124600000c80: 6b65 722f 7531 363a 3600 0000 6401 0000 ker/u16:6...d...
124700000c90: 7800 0000 d0b6 0600 2f00 0103 6401 0000 x......./...d...
124800000ca0: 6b77 6f72 6b65 722f 7531 363a 3600 0000 kworker/u16:6...
124900000cb0: 6401 0000 7800 0000 0100 0000 0000 0000 d...x...........
125000000cc0: 7377 6170 7065 722f 3000 0000 0000 0000 swapper/0.......
125100000cd0: 0000 0000 7800 0000 f0a0 5800 2f00 0103 ....x.....X./...
125200000ce0: 0000 0000 7377 6170 7065 722f 3000 0000 ....swapper/0...
125300000cf0: 0000 0000 0000 0000 7800 0000 0000 0000 ........x.......
125400000d00: 0000 0000 6b77 6f72 6b65 722f 7531 363a ....kworker/u16:
125500000d10: 3600 0000 6401 0000 7800 0000 f07a 1300 6...d...x....z..
125600000d20: 2f00 0103 6401 0000 6b77 6f72 6b65 722f /...d...kworker/
125700000d30: 7531 363a 3600 0000 6401 0000 7800 0000 u16:6...d...x...
125800000d40: 0100 0000 0000 0000 7377 6170 7065 722f ........swapper/
125900000d50: 3000 0000 0000 0000 0000 0000 7800 0000 0...........x...
126000000d60: b080 b101 2f00 0103 0000 0000 7377 6170 ..../.......swap
126100000d70: 7065 722f 3000 0000 0000 0000 0000 0000 per/0...........
126200000d80: 7800 0000 0000 0000 0000 0000 6b77 6f72 x...........kwor
126300000d90: 6b65 722f 7531 363a 3600 0000 6401 0000 ker/u16:6...d...
126400000da0: 7800 0000 103c 1200 2f00 0103 6401 0000 x....<../...d...
126500000db0: 6b77 6f72 6b65 722f 7531 363a 3600 0000 kworker/u16:6...
126600000dc0: 6401 0000 7800 0000 0100 0000 0000 0000 d...x...........
126700000dd0: 7377 6170 7065 722f 3000 0000 0000 0000 swapper/0.......
126800000de0: 0000 0000 7800 0000 50ea 3800 2f00 0103 ....x...P.8./...
126900000df0: 0000 0000 7377 6170 7065 722f 3000 0000 ....swapper/0...
127000000e00: 0000 0000 0000 0000 7800 0000 0000 0000 ........x.......
127100000e10: 0000 0000 6b77 6f72 6b65 722f 7531 363a ....kworker/u16:
127200000e20: 3600 0000 6401 0000 7800 0000 5032 0400 6...d...x...P2..
127300000e30: 2f00 0103 6401 0000 6b77 6f72 6b65 722f /...d...kworker/
127400000e40: 7531 363a 3600 0000 6401 0000 7800 0000 u16:6...d...x...
127500000e50: 0100 0000 0000 0000 7377 6170 7065 722f ........swapper/
127600000e60: 3000 0000 0000 0000 0000 0000 7800 0000 0...........x...
127700000e70: 70f5 9000 2f00 0103 0000 0000 7377 6170 p.../.......swap
127800000e80: 7065 722f 3000 0000 0000 0000 0000 0000 per/0...........
127900000e90: 7800 0000 0000 0000 0000 0000 6b77 6f72 x...........kwor
128000000ea0: 6b65 722f 7531 363a 3600 0000 6401 0000 ker/u16:6...d...
128100000eb0: 7800 0000 10d7 0300 2f00 0103 6401 0000 x......./...d...
128200000ec0: 6b77 6f72 6b65 722f 7531 363a 3600 0000 kworker/u16:6...
128300000ed0: 6401 0000 7800 0000 0100 0000 0000 0000 d...x...........
128400000ee0: 7377 6170 7065 722f 3000 0000 0000 0000 swapper/0.......
128500000ef0: 0000 0000 7800 0000 907c 0900 2f00 0103 ....x....|../...
128600000f00: 0000 0000 7377 6170 7065 722f 3000 0000 ....swapper/0...
128700000f10: 0000 0000 0000 0000 7800 0000 0000 0000 ........x.......
128800000f20: 0000 0000 6b77 6f72 6b65 722f 7531 363a ....kworker/u16:
128900000f30: 3600 0000 6401 0000 7800 0000 7082 0300 6...d...x...p...
129000000f40: 2f00 0103 6401 0000 6b77 6f72 6b65 722f /...d...kworker/
129100000f50: 7531 363a 3600 0000 6401 0000 7800 0000 u16:6...d...x...
129200000f60: 0100 0000 0000 0000 7377 6170 7065 722f ........swapper/
129300000f70: 3000 0000 0000 0000 0000 0000 7800 0000 0...........x...
129400000f80: f0ec 2100 2f00 0103 0000 0000 7377 6170 ..!./.......swap
129500000f90: 7065 722f 3000 0000 0000 0000 0000 0000 per/0...........
129600000fa0: 7800 0000 0000 0000 0000 0000 6b77 6f72 x...........kwor
129700000fb0: 6b65 722f 7531 363a 3600 0000 6401 0000 ker/u16:6...d...
129800000fc0: 7800 0000 0000 0000 0000 0000 0000 0000 x...............
129900000fd0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
130000000fe0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
130100000ff0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
1302 )",
1303};
1304
1305TEST(CpuReaderTest, ParseFullPageSchedSwitch) {
1306 const ExamplePage* test_case = &g_full_page_sched_switch;
1307
1308 BundleProvider bundle_provider(base::kPageSize);
1309 ProtoTranslationTable* table = GetTable(test_case->name);
1310 auto page = PageFromXxd(test_case->data);
1311
Hector Dearman7391c0f2018-02-02 14:20:09 +00001312 EventFilter filter(*table, {"sched_switch"});
Hector Dearmanbc8368e2018-01-25 17:34:11 +00001313
Hector Dearmanc8488032018-03-02 13:12:01 +00001314 FtraceMetadata metadata{};
Hector Dearman1f14b622018-02-27 11:17:37 +00001315 ASSERT_TRUE(CpuReader::ParsePage(page.get(), &filter,
Hector Dearmanc8488032018-03-02 13:12:01 +00001316 bundle_provider.writer(), table, &metadata));
Hector Dearmanbc8368e2018-01-25 17:34:11 +00001317
1318 auto bundle = bundle_provider.ParseProto();
1319 ASSERT_TRUE(bundle);
Hector Dearmanc8488032018-03-02 13:12:01 +00001320 EXPECT_EQ(metadata.overwrite_count, 0ul);
Hector Dearmanbc8368e2018-01-25 17:34:11 +00001321 EXPECT_EQ(bundle->event().size(), 59);
1322}
1323
Hector Dearman639651c2018-03-09 19:00:40 +00001324// clang-format off
Hector Dearman1f14b622018-02-27 11:17:37 +00001325// # tracer: nop
1326// #
1327// # entries-in-buffer/entries-written: 1041/238740 #P:8
1328// #
1329// # _-----=> irqs-off
1330// # / _----=> need-resched
1331// # | / _---=> hardirq/softirq
1332// # || / _--=> preempt-depth
1333// # ||| / delay
1334// # TASK-PID CPU# |||| TIMESTAMP FUNCTION
1335// # | | | |||| | |
Hector Dearman639651c2018-03-09 19:00:40 +00001336// android.bg-1668 [000] ...1 174991.234105: ext4_journal_start: dev 259,32 blocks, 2 rsv_blocks, 0 caller ext4_dirty_inode+0x30/0x68
1337// android.bg-1668 [000] ...1 174991.234108: ext4_mark_inode_dirty: dev 259,32 ino 2883605 caller ext4_dirty_inode+0x48/0x68
1338// android.bg-1668 [000] ...1 174991.234118: ext4_da_write_begin: dev 259,32 ino 2883605 pos 20480 len 4096 flags 0
1339// android.bg-1668 [000] ...1 174991.234126: ext4_journal_start: dev 259,32 blocks, 1 rsv_blocks, 0 caller ext4_da_write_begin+0x3d4/0x518
1340// android.bg-1668 [000] ...1 174991.234133: ext4_es_lookup_extent_enter: dev 259,32 ino 2883605 lblk 5
1341// android.bg-1668 [000] ...1 174991.234135: ext4_es_lookup_extent_exit: dev 259,32 ino 2883605 found 1 [5/4294967290) 576460752303423487 H0x10
1342// android.bg-1668 [000] ...2 174991.234140: ext4_da_reserve_space: dev 259,32 ino 2883605 mode 0100600 i_blocks 8 reserved_data_blocks 6 reserved_meta_blocks 0
1343// android.bg-1668 [000] ...1 174991.234142: ext4_es_insert_extent: dev 259,32 ino 2883605 es [5/1) mapped 576460752303423487 status D
1344// android.bg-1668 [000] ...1 174991.234153: ext4_da_write_end: dev 259,32 ino 2883605 pos 20480 len 4096 copied 4096
1345// android.bg-1668 [000] ...1 174991.234158: ext4_journal_start: dev 259,32 blocks, 2 rsv_blocks, 0 caller ext4_dirty_inode+0x30/0x68
1346// android.bg-1668 [000] ...1 174991.234160: ext4_mark_inode_dirty: dev 259,32 ino 2883605 caller ext4_dirty_inode+0x48/0x68
1347// android.bg-1668 [000] ...1 174991.234170: ext4_da_write_begin: dev 259,32 ino 2883605 pos 24576 len 2968 flags 0
1348// android.bg-1668 [000] ...1 174991.234178: ext4_journal_start: dev 259,32 blocks, 1 rsv_blocks, 0 caller ext4_da_write_begin+0x3d4/0x518
1349// android.bg-1668 [000] ...1 174991.234184: ext4_es_lookup_extent_enter: dev 259,32 ino 2883605 lblk 6
1350// android.bg-1668 [000] ...1 174991.234187: ext4_es_lookup_extent_exit: dev 259,32 ino 2883605 found 1 [6/4294967289) 576460752303423487 H0x10
1351// android.bg-1668 [000] ...2 174991.234191: ext4_da_reserve_space: dev 259,32 ino 2883605 mode 0100600 i_blocks 8 reserved_data_blocks 7 reserved_meta_blocks 0
1352// android.bg-1668 [000] ...1 174991.234193: ext4_es_insert_extent: dev 259,32 ino 2883605 es [6/1) mapped 576460752303423487 status D
1353// android.bg-1668 [000] ...1 174991.234203: ext4_da_write_end: dev 259,32 ino 2883605 pos 24576 len 2968 copied 2968
1354// android.bg-1668 [000] ...1 174991.234209: ext4_journal_start: dev 259,32 blocks, 2 rsv_blocks, 0 caller ext4_dirty_inode+0x30/0x68
1355// android.bg-1668 [000] ...1 174991.234211: ext4_mark_inode_dirty: dev 259,32 ino 2883605 caller ext4_dirty_inode+0x48/0x68
1356// android.bg-1668 [000] ...1 174991.234262: ext4_sync_file_enter: dev 259,32 ino 2883605 parent 2883592 datasync 0
1357// android.bg-1668 [000] ...1 174991.234270: ext4_writepages: dev 259,32 ino 2883605 nr_to_write 9223372036854775807 pages_skipped 0 range_start 0 range_end 9223372036854775807 sync_mode 1 for_kupdate 0 range_cyclic 0 writeback_index 0
1358// android.bg-1668 [000] ...1 174991.234287: ext4_journal_start: dev 259,32 blocks, 10 rsv_blocks, 0 caller ext4_writepages+0x6a4/0x119c
1359// android.bg-1668 [000] ...1 174991.234294: ext4_da_write_pages: dev 259,32 ino 2883605 first_page 0 nr_to_write 9223372036854775807 sync_mode 1
1360// android.bg-1668 [000] ...1 174991.234319: ext4_da_write_pages_extent: dev 259,32 ino 2883605 lblk 0 len 7 flags 0x200
1361// android.bg-1668 [000] ...1 174991.234322: ext4_es_lookup_extent_enter: dev 259,32 ino 2883605 lblk 0
1362// android.bg-1668 [000] ...1 174991.234324: ext4_es_lookup_extent_exit: dev 259,32 ino 2883605 found 1 [0/7) 576460752303423487 D0x10
1363// android.bg-1668 [000] ...1 174991.234328: ext4_ext_map_blocks_enter: dev 259,32 ino 2883605 lblk 0 len 7 flags CREATE|DELALLOC|METADATA_NOFAIL
1364// android.bg-1668 [000] ...1 174991.234341: ext4_request_blocks: dev 259,32 ino 2883605 flags HINT_DATA|DELALLOC_RESV|USE_RESV len 7 lblk 0 goal 11567104 lleft 0 lright 0 pleft 0 pright 0
1365// android.bg-1668 [000] ...1 174991.234394: ext4_mballoc_prealloc: dev 259,32 inode 2883605 orig 353/0/7@0 result 65/25551/7@0
1366// android.bg-1668 [000] ...1 174991.234400: ext4_allocate_blocks: dev 259,32 ino 2883605 flags HINT_DATA|DELALLOC_RESV|USE_RESV len 7 block 2155471 lblk 0 goal 11567104 lleft 0 lright 0 pleft 0 pright 0
1367// android.bg-1668 [000] ...1 174991.234409: ext4_mark_inode_dirty: dev 259,32 ino 2883605 caller __ext4_ext_dirty+0x104/0x170
1368// android.bg-1668 [000] ...1 174991.234420: ext4_get_reserved_cluster_alloc: dev 259,32 ino 2883605 lblk 0 len 7
1369// android.bg-1668 [000] ...2 174991.234426: ext4_da_update_reserve_space: dev 259,32 ino 2883605 mode 0100600 i_blocks 8 used_blocks 7 reserved_data_blocks 7 reserved_meta_blocks 0 allocated_meta_blocks 0 quota_claim 1
1370// android.bg-1668 [000] ...1 174991.234434: ext4_journal_start: dev 259,32 blocks, 1 rsv_blocks, 0 caller ext4_mark_dquot_dirty+0x80/0xd4
1371// android.bg-1668 [000] ...1 174991.234441: ext4_es_lookup_extent_enter: dev 259,32 ino 3 lblk 1
1372// android.bg-1668 [000] ...1 174991.234445: ext4_es_lookup_extent_exit: dev 259,32 ino 3 found 1 [0/2) 9255 W0x10
1373// android.bg-1668 [000] ...1 174991.234456: ext4_journal_start: dev 259,32 blocks, 1 rsv_blocks, 0 caller ext4_mark_dquot_dirty+0x80/0xd4
1374// android.bg-1668 [000] ...1 174991.234460: ext4_es_lookup_extent_enter: dev 259,32 ino 4 lblk 1
1375// android.bg-1668 [000] ...1 174991.234463: ext4_es_lookup_extent_exit: dev 259,32 ino 4 found 1 [0/2) 9257 W0x10
1376// android.bg-1668 [000] ...1 174991.234471: ext4_journal_start: dev 259,32 blocks, 2 rsv_blocks, 0 caller ext4_dirty_inode+0x30/0x68
1377// android.bg-1668 [000] ...1 174991.234474: ext4_mark_inode_dirty: dev 259,32 ino 2883605 caller ext4_dirty_inode+0x48/0x68
1378// android.bg-1668 [000] ...1 174991.234481: ext4_ext_map_blocks_exit: dev 259,32 ino 2883605 flags CREATE|DELALLOC|METADATA_NOFAIL lblk 0 pblk 2155471 len 7 mflags NM ret 7
1379// android.bg-1668 [000] ...1 174991.234484: ext4_es_insert_extent: dev 259,32 ino 2883605 es [0/7) mapped 2155471 status W
1380// android.bg-1668 [000] ...1 174991.234547: ext4_mark_inode_dirty: dev 259,32 ino 2883605 caller ext4_writepages+0xdc0/0x119c
1381// android.bg-1668 [000] ...1 174991.234604: ext4_journal_start: dev 259,32 blocks, 10 rsv_blocks, 0 caller ext4_writepages+0x6a4/0x119c
1382// android.bg-1668 [000] ...1 174991.234609: ext4_da_write_pages: dev 259,32 ino 2883605 first_page 7 nr_to_write 9223372036854775800 sync_mode 1
1383// android.bg-1668 [000] ...1 174991.234876: ext4_writepages_result: dev 259,32 ino 2883605 ret 0 pages_written 7 pages_skipped 0 sync_mode 1 writeback_index 7
1384// Profile Saver-5504 [000] ...1 175002.711928: ext4_discard_preallocations: dev 259,32 ino 1311176
1385// Profile Saver-5504 [000] ...1 175002.714165: ext4_begin_ordered_truncate: dev 259,32 ino 1311176 new_size 0
1386// Profile Saver-5504 [000] ...1 175002.714172: ext4_journal_start: dev 259,32 blocks, 3 rsv_blocks, 0 caller ext4_setattr+0x5b4/0x788
1387// Profile Saver-5504 [000] ...1 175002.714218: ext4_mark_inode_dirty: dev 259,32 ino 1311176 caller ext4_setattr+0x65c/0x788
1388// Profile Saver-5504 [000] ...1 175002.714277: ext4_invalidatepage: dev 259,32 ino 1311176 page_index 0 offset 0 length 4096
1389// Profile Saver-5504 [000] ...1 175002.714281: ext4_releasepage: dev 259,32 ino 1311176 page_index 0
1390// Profile Saver-5504 [000] ...1 175002.714295: ext4_invalidatepage: dev 259,32 ino 1311176 page_index 1 offset 0 length 4096
1391// Profile Saver-5504 [000] ...1 175002.714296: ext4_releasepage: dev 259,32 ino 1311176 page_index 1
1392// Profile Saver-5504 [000] ...1 175002.714315: ext4_truncate_enter: dev 259,32 ino 1311176 blocks 24
1393// Profile Saver-5504 [000] ...1 175002.714318: ext4_journal_start: dev 259,32 blocks, 10 rsv_blocks, 0 caller ext4_truncate+0x258/0x4b8
1394// Profile Saver-5504 [000] ...1 175002.714322: ext4_discard_preallocations: dev 259,32 ino 1311176
1395// Profile Saver-5504 [000] ...1 175002.714324: ext4_mark_inode_dirty: dev 259,32 ino 1311176 caller ext4_ext_truncate+0x24/0xc8
1396// Profile Saver-5504 [000] ...1 175002.714328: ext4_es_remove_extent: dev 259,32 ino 1311176 es [0/4294967295)
1397// Profile Saver-5504 [000] ...1 175002.714335: ext4_journal_start: dev 259,32 blocks, 1 rsv_blocks, 0 caller ext4_ext_remove_space+0x60/0x1180
1398// Profile Saver-5504 [000] ...1 175002.714338: ext4_ext_remove_space: dev 259,32 ino 1311176 since 0 end 4294967294 depth 0
1399// Profile Saver-5504 [000] ...1 175002.714347: ext4_ext_rm_leaf: dev 259,32 ino 1311176 start_lblk 0 last_extent [0(5276994), 2]partial_cluster 0
1400// Profile Saver-5504 [000] ...1 175002.714351: ext4_remove_blocks: dev 259,32 ino 1311176 extent [0(5276994), 2]from 0 to 1 partial_cluster 0
1401// Profile Saver-5504 [000] ...1 175002.714354: ext4_free_blocks: dev 259,32 ino 1311176 mode 0100600 block 5276994 count 2 flags 1ST_CLUSTER
1402// Profile Saver-5504 [000] ...1 175002.714365: ext4_mballoc_free: dev 259,32 inode 1311176 extent 161/1346/2
1403// Profile Saver-5504 [000] ...1 175002.714382: ext4_journal_start: dev 259,32 blocks, 1 rsv_blocks, 0 caller ext4_mark_dquot_dirty+0x80/0xd4
1404// Profile Saver-5504 [000] ...1 175002.714391: ext4_es_lookup_extent_enter: dev 259,32 ino 3 lblk 4
1405// Profile Saver-5504 [000] ...1 175002.714394: ext4_es_lookup_extent_exit: dev 259,32 ino 3 found 1 [4/1) 557094 W0x10
1406// Profile Saver-5504 [000] ...1 175002.714402: ext4_journal_start: dev 259,32 blocks, 1 rsv_blocks, 0 caller ext4_mark_dquot_dirty+0x80/0xd4
1407// Profile Saver-5504 [000] ...1 175002.714404: ext4_es_lookup_extent_enter: dev 259,32 ino 4 lblk 8
1408// Profile Saver-5504 [000] ...1 175002.714406: ext4_es_lookup_extent_exit: dev 259,32 ino 4 found 1 [8/3) 7376914 W0x10
1409// Profile Saver-5504 [000] ...1 175002.714413: ext4_journal_start: dev 259,32 blocks, 2 rsv_blocks, 0 caller ext4_dirty_inode+0x30/0x68
1410// Profile Saver-5504 [000] ...1 175002.714414: ext4_mark_inode_dirty: dev 259,32 ino 1311176 caller ext4_dirty_inode+0x48/0x68
1411// Profile Saver-5504 [000] ...1 175002.714420: ext4_mark_inode_dirty: dev 259,32 ino 1311176 caller __ext4_ext_dirty+0x104/0x170
1412// Profile Saver-5504 [000] ...1 175002.714423: ext4_ext_remove_space_done: dev 259,32 ino 1311176 since 0 end 4294967294 depth 0 partial 0 remaining_entries 0
1413// Profile Saver-5504 [000] ...1 175002.714425: ext4_mark_inode_dirty: dev 259,32 ino 1311176 caller __ext4_ext_dirty+0x104/0x170
1414// Profile Saver-5504 [000] ...1 175002.714433: ext4_mark_inode_dirty: dev 259,32 ino 1311176 caller ext4_truncate+0x3c4/0x4b8
1415// Profile Saver-5504 [000] ...1 175002.714436: ext4_truncate_exit: dev 259,32 ino 1311176 blocks 8
1416// Profile Saver-5504 [000] ...1 175002.714437: ext4_journal_start: dev 259,32 blocks, 2 rsv_blocks, 0 caller ext4_dirty_inode+0x30/0x68
1417// Profile Saver-5504 [000] ...1 175002.714438: ext4_mark_inode_dirty: dev 259,32 ino 1311176 caller ext4_dirty_inode+0x48/0x68
1418// Profile Saver-5504 [000] ...1 175002.714462: ext4_da_write_begin: dev 259,32 ino 1311176 pos 0 len 4 flags 0
1419// Profile Saver-5504 [000] ...1 175002.714472: ext4_journal_start: dev 259,32 blocks, 1 rsv_blocks, 0 caller ext4_da_write_begin+0x3d4/0x518
1420// Profile Saver-5504 [000] ...1 175002.714477: ext4_es_lookup_extent_enter: dev 259,32 ino 1311176 lblk 0
1421// Profile Saver-5504 [000] ...1 175002.714477: ext4_es_lookup_extent_exit: dev 259,32 ino 1311176 found 0 [0/0) 0
1422// Profile Saver-5504 [000] ...1 175002.714480: ext4_ext_map_blocks_enter: dev 259,32 ino 1311176 lblk 0 len 1 flags
1423// Profile Saver-5504 [000] ...1 175002.714485: ext4_es_find_delayed_extent_range_enter: dev 259,32 ino 1311176 lblk 0
1424// Profile Saver-5504 [000] ...1 175002.714488: ext4_es_find_delayed_extent_range_exit: dev 259,32 ino 1311176 es [0/0) mapped 0 status
1425// Profile Saver-5504 [000] ...1 175002.714490: ext4_es_insert_extent: dev 259,32 ino 1311176 es [0/4294967295) mapped 576460752303423487 status H
1426// Profile Saver-5504 [000] ...1 175002.714495: ext4_ext_map_blocks_exit: dev 259,32 ino 1311176 flags lblk 0 pblk 4294967296 len 1 mflags ret 0
1427// Profile Saver-5504 [000] ...2 175002.714501: ext4_da_reserve_space: dev 259,32 ino 1311176 mode 0100600 i_blocks 8 reserved_data_blocks 1 reserved_meta_blocks 0
1428// Profile Saver-5504 [000] ...1 175002.714505: ext4_es_insert_extent: dev 259,32 ino 1311176 es [0/1) mapped 576460752303423487 status D
1429// Profile Saver-5504 [000] ...1 175002.714513: ext4_da_write_end: dev 259,32 ino 1311176 pos 0 len 4 copied 4
1430// Profile Saver-5504 [000] ...1 175002.714519: ext4_journal_start: dev 259,32 blocks, 2 rsv_blocks, 0 caller ext4_dirty_inode+0x30/0x68
1431// Profile Saver-5504 [000] ...1 175002.714520: ext4_mark_inode_dirty: dev 259,32 ino 1311176 caller ext4_dirty_inode+0x48/0x68
1432// Profile Saver-5504 [000] ...1 175002.714527: ext4_da_write_begin: dev 259,32 ino 1311176 pos 4 len 4 flags 0
1433// Profile Saver-5504 [000] ...1 175002.714529: ext4_journal_start: dev 259,32 blocks, 1 rsv_blocks, 0 caller ext4_da_write_begin+0x3d4/0x518
1434// Profile Saver-5504 [000] ...1 175002.714531: ext4_da_write_end: dev 259,32 ino 1311176 pos 4 len 4 copied 4
1435// Profile Saver-5504 [000] ...1 175002.714532: ext4_journal_start: dev 259,32 blocks, 2 rsv_blocks, 0 caller ext4_dirty_inode+0x30/0x68
1436// Profile Saver-5504 [000] ...1 175002.714532: ext4_mark_inode_dirty: dev 259,32 ino 1311176 caller ext4_dirty_inode+0x48/0x68
1437// Profile Saver-5504 [000] ...1 175002.715313: ext4_journal_start: dev 259,32 blocks, 2 rsv_blocks, 0 caller ext4_dirty_inode+0x30/0x68
1438// Profile Saver-5504 [000] ...1 175002.715322: ext4_mark_inode_dirty: dev 259,32 ino 1311176 caller ext4_dirty_inode+0x48/0x68
1439// Profile Saver-5504 [000] ...1 175002.723849: ext4_da_write_begin: dev 259,32 ino 1311176 pos 8 len 5 flags 0
1440// Profile Saver-5504 [000] ...1 175002.723862: ext4_journal_start: dev 259,32 blocks, 1 rsv_blocks, 0 caller ext4_da_write_begin+0x3d4/0x518
1441// Profile Saver-5504 [000] ...1 175002.723873: ext4_da_write_end: dev 259,32 ino 1311176 pos 8 len 5 copied 5
1442// Profile Saver-5504 [000] ...1 175002.723877: ext4_journal_start: dev 259,32 blocks, 2 rsv_blocks, 0 caller ext4_dirty_inode+0x30/0x68
1443// Profile Saver-5504 [000] ...1 175002.723879: ext4_mark_inode_dirty: dev 259,32 ino 1311176 caller ext4_dirty_inode+0x48/0x68
1444// Profile Saver-5504 [000] ...1 175002.726857: ext4_journal_start: dev 259,32 blocks, 2 rsv_blocks, 0 caller ext4_dirty_inode+0x30/0x68
1445// Profile Saver-5504 [000] ...1 175002.726867: ext4_mark_inode_dirty: dev 259,32 ino 1311176 caller ext4_dirty_inode+0x48/0x68
1446// Profile Saver-5504 [000] ...1 175002.726881: ext4_da_write_begin: dev 259,32 ino 1311176 pos 13 len 4 flags 0
1447// Profile Saver-5504 [000] ...1 175002.726883: ext4_journal_start: dev 259,32 blocks, 1 rsv_blocks, 0 caller ext4_da_write_begin+0x3d4/0x518
1448// Profile Saver-5504 [000] ...1 175002.726890: ext4_da_write_end: dev 259,32 ino 1311176 pos 13 len 4 copied 4
1449// Profile Saver-5504 [000] ...1 175002.726892: ext4_journal_start: dev 259,32 blocks, 2 rsv_blocks, 0 caller ext4_dirty_inode+0x30/0x68
1450// Profile Saver-5504 [000] ...1 175002.726892: ext4_mark_inode_dirty: dev 259,32 ino 1311176 caller ext4_dirty_inode+0x48/0x68
1451// Profile Saver-5504 [000] ...1 175002.726900: ext4_da_write_begin: dev 259,32 ino 1311176 pos 17 len 4079 flags 0
1452// Profile Saver-5504 [000] ...1 175002.726901: ext4_journal_start: dev 259,32 blocks, 1 rsv_blocks, 0 caller ext4_da_write_begin+0x3d4/0x518
1453// Profile Saver-5504 [000] ...1 175002.726904: ext4_da_write_end: dev 259,32 ino 1311176 pos 17 len 4079 copied 4079
1454// Profile Saver-5504 [000] ...1 175002.726905: ext4_journal_start: dev 259,32 blocks, 2 rsv_blocks, 0 caller ext4_dirty_inode+0x30/0x68
1455// Profile Saver-5504 [000] ...1 175002.726906: ext4_mark_inode_dirty: dev 259,32 ino 1311176 caller ext4_dirty_inode+0x48/0x68
1456// Profile Saver-5504 [000] ...1 175002.726908: ext4_da_write_begin: dev 259,32 ino 1311176 pos 4096 len 2780 flags 0
1457// Profile Saver-5504 [000] ...1 175002.726916: ext4_journal_start: dev 259,32 blocks, 1 rsv_blocks, 0 caller ext4_da_write_begin+0x3d4/0x518
1458// Profile Saver-5504 [000] ...1 175002.726921: ext4_es_lookup_extent_enter: dev 259,32 ino 1311176 lblk 1
1459// Profile Saver-5504 [000] ...1 175002.726924: ext4_es_lookup_extent_exit: dev 259,32 ino 1311176 found 1 [1/4294967294) 576460752303423487 H0x10
1460// Profile Saver-5504 [000] ...2 175002.726931: ext4_da_reserve_space: dev 259,32 ino 1311176 mode 0100600 i_blocks 8 reserved_data_blocks 2 reserved_meta_blocks 0
1461// Profile Saver-5504 [000] ...1 175002.726933: ext4_es_insert_extent: dev 259,32 ino 1311176 es [1/1) mapped 576460752303423487 status D
1462// Profile Saver-5504 [000] ...1 175002.726940: ext4_da_write_end: dev 259,32 ino 1311176 pos 4096 len 2780 copied 2780
1463// Profile Saver-5504 [000] ...1 175002.726941: ext4_journal_start: dev 259,32 blocks, 2 rsv_blocks, 0 caller ext4_dirty_inode+0x30/0x68
1464// Profile Saver-5504 [000] ...1 175002.726942: ext4_mark_inode_dirty: dev 259,32 ino 1311176 caller ext4_dirty_inode+0x48/0x68
1465// d.process.acor-27885 [000] ...1 175018.227675: ext4_journal_start: dev 259,32 blocks, 2 rsv_blocks, 0 caller ext4_dirty_inode+0x30/0x68
1466// d.process.acor-27885 [000] ...1 175018.227699: ext4_mark_inode_dirty: dev 259,32 ino 3278189 caller ext4_dirty_inode+0x48/0x68
1467// d.process.acor-27885 [000] ...1 175018.227839: ext4_sync_file_enter: dev 259,32 ino 3278183 parent 3277001 datasync 1
1468// d.process.acor-27885 [000] ...1 175018.227847: ext4_writepages: dev 259,32 ino 3278183 nr_to_write 9223372036854775807 pages_skipped 0 range_start 0 range_end 9223372036854775807 sync_mode 1 for_kupdate 0 range_cyclic 0 writeback_index 2
1469// d.process.acor-27885 [000] ...1 175018.227852: ext4_writepages_result: dev 259,32 ino 3278183 ret 0 pages_written 0 pages_skipped 0 sync_mode 1 writeback_index 2
1470// clang-format on
Hector Dearman1f14b622018-02-27 11:17:37 +00001471
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001472static ExamplePage g_full_page_ext4{
Hector Dearman1f14b622018-02-27 11:17:37 +00001473 "synthetic",
1474 R"(
147500000000: 50fe 5852 279f 0000 c80f 00c0 ffff ffff P.XR'...........
147600000010: 0800 0000 5701 0001 8406 0000 2000 3010 ....W....... .0.
147700000020: 566b 0000 8829 e86a 91ff ffff 0200 0000 Vk...).j........
147800000030: 0000 0000 2873 0100 1b01 0001 8406 0000 ....(s..........
147900000040: 2000 3010 9200 0000 1500 2c00 0000 0000 .0.......,.....
148000000050: a029 e86a 91ff ffff 0ac8 0400 1e01 0001 .).j............
148100000060: 8406 0000 2000 3010 2866 0100 1500 2c00 .... .0.(f....,.
148200000070: 0000 0000 0050 0000 0000 0000 0010 0000 .....P..........
148300000080: 0000 0000 a804 0400 5701 0001 8406 0000 ........W.......
148400000090: 2000 3010 91ff ffff 586f e86a 91ff ffff .0.....Xo.j....
1485000000a0: 0100 0000 0000 0000 c83a 0300 6c01 0001 .........:..l...
1486000000b0: 8406 0000 2000 3010 0000 0000 1500 2c00 .... .0.......,.
1487000000c0: 0000 0000 0500 0000 5701 0001 ac6c 0100 ........W....l..
1488000000d0: 6d01 0001 8406 0000 2000 3010 91ff ffff m....... .0.....
1489000000e0: 1500 2c00 0000 0000 0500 0000 faff ffff ..,.............
1490000000f0: ffff ffff ffff ff07 184e 0000 0100 0000 .........N......
149100000100: ec08 0200 3f01 0002 8406 0000 2000 3010 ....?....... .0.
149200000110: 0000 0000 1500 2c00 0000 0000 0800 0000 ......,.........
149300000120: 0000 0000 0600 0000 0000 0000 8081 0000 ................
149400000130: 0000 0000 ec24 0100 6701 0001 8406 0000 .....$..g.......
149500000140: 2000 3010 0000 0000 1500 2c00 0000 0000 .0.......,.....
149600000150: 0500 0000 0100 0000 ffff ffff ffff ff07 ................
149700000160: 0400 0000 7b04 3200 2a30 0500 2101 0001 ....{.2.*0..!...
149800000170: 8406 0000 2000 3010 0000 0000 1500 2c00 .... .0.......,.
149900000180: 0000 0000 0050 0000 0000 0000 0010 0000 .....P..........
150000000190: 0010 0000 288b 0200 5701 0001 8406 0000 ....(...W.......
1501000001a0: 2000 3010 0000 0000 8829 e86a 91ff ffff .0......).j....
1502000001b0: 0200 0000 0000 0000 0832 0100 1b01 0001 .........2......
1503000001c0: 8406 0000 2000 3010 566b 0000 1500 2c00 .... .0.Vk....,.
1504000001d0: 0000 0000 a029 e86a 91ff ffff eaa0 0400 .....).j........
1505000001e0: 1e01 0001 8406 0000 2000 3010 280b 0400 ........ .0.(...
1506000001f0: 1500 2c00 0000 0000 0060 0000 0000 0000 ..,......`......
150700000200: 980b 0000 0000 0000 88d0 0300 5701 0001 ............W...
150800000210: 8406 0000 2000 3010 566b 0000 586f e86a .... .0.Vk..Xo.j
150900000220: 91ff ffff 0100 0000 0000 0000 c813 0300 ................
151000000230: 6c01 0001 8406 0000 2000 3010 566b 0000 l....... .0.Vk..
151100000240: 1500 2c00 0000 0000 0600 0000 0000 0000 ..,.............
151200000250: ac5f 0100 6d01 0001 8406 0000 2000 3010 ._..m....... .0.
151300000260: 1100 3010 1500 2c00 0000 0000 0600 0000 ..0...,.........
151400000270: f9ff ffff ffff ffff ffff ff07 185a ea6a .............Z.j
151500000280: 0100 0000 4c02 0200 3f01 0002 8406 0000 ....L...?.......
151600000290: 2000 3010 566b 0000 1500 2c00 0000 0000 .0.Vk....,.....
1517000002a0: 0800 0000 0000 0000 0700 0000 0000 0000 ................
1518000002b0: 8081 0000 6d01 0001 0c0b 0100 6701 0001 ....m.......g...
1519000002c0: 8406 0000 2000 3010 0000 0000 1500 2c00 .... .0.......,.
1520000002d0: 0000 0000 0600 0000 0100 0000 ffff ffff ................
1521000002e0: ffff ff07 049a 0100 5701 0001 aa1c 0500 ........W.......
1522000002f0: 2101 0001 8406 0000 2000 3010 91ff ffff !....... .0.....
152300000300: 1500 2c00 0000 0000 0060 0000 0000 0000 ..,......`......
152400000310: 980b 0000 980b 0000 889e 0200 5701 0001 ............W...
152500000320: 8406 0000 2000 3010 91ff ffff 8829 e86a .... .0......).j
152600000330: 91ff ffff 0200 0000 0000 0000 8838 0100 .............8..
152700000340: 1b01 0001 8406 0000 2000 3010 91ff ffff ........ .0.....
152800000350: 1500 2c00 0000 0000 a029 e86a 91ff ffff ..,......).j....
152900000360: 2ab8 1800 3501 0001 8406 0000 2000 3010 *...5....... .0.
153000000370: feff ffff 1500 2c00 0000 0000 0800 2c00 ......,.......,.
153100000380: 0000 0000 0000 0000 2000 3010 32fe 0300 ........ .0.2...
153200000390: 2201 0001 8406 0000 2000 3010 0000 0000 "....... .0.....
1533000003a0: 1500 2c00 0000 0000 ffff ffff ffff ff7f ..,.............
1534000003b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
1535000003c0: ffff ffff ffff ff7f 0000 0000 0000 0000 ................
1536000003d0: 0100 0000 0000 0000 887e 0800 5701 0001 .........~..W...
1537000003e0: 8406 0000 2000 3010 7b04 3200 7c3f e86a .... .0.{.2.|?.j
1538000003f0: 91ff ffff 0a00 0000 0000 0000 ec2d 0300 .............-..
153900000400: 2301 0001 8406 0000 2000 3010 7b04 3200 #....... .0.{.2.
154000000410: 1500 2c00 0000 0000 0000 0000 0000 0000 ..,.............
154100000420: ffff ffff ffff ff7f 0100 0000 3c01 0001 ............<...
154200000430: 0a42 0c00 2401 0001 8406 0000 2000 3010 .B..$....... .0.
154300000440: 0800 0000 1500 2c00 0000 0000 0000 0000 ......,.........
154400000450: 0000 0000 0700 0000 0002 0000 885f 0100 ............._..
154500000460: 6c01 0001 8406 0000 2000 3010 0100 0000 l....... .0.....
154600000470: 1500 2c00 0000 0000 0000 0000 566b 0000 ..,.........Vk..
154700000480: 0c25 0100 6d01 0001 8406 0000 2000 3010 .%..m....... .0.
154800000490: 0400 0000 1500 2c00 0000 0000 0000 0000 ......,.........
1549000004a0: 0700 0000 ffff ffff ffff ff07 1400 0000 ................
1550000004b0: 0100 0000 caee 0100 5101 0001 8406 0000 ........Q.......
1551000004c0: 2000 3010 1100 0000 1500 2c00 0000 0000 .0.......,.....
1552000004d0: 0000 0000 0700 0000 2500 0000 2000 3010 ........%... .0.
1553000004e0: 323b 0600 3201 0001 8406 0000 2000 3010 2;..2....... .0.
1554000004f0: c86e 0000 1500 2c00 0000 0000 0700 0000 .n....,.........
155500000500: 0000 0000 0000 0000 0000 0000 0080 b000 ................
155600000510: 0000 0000 0000 0000 0000 0000 0000 0000 ................
155700000520: 0000 0000 2024 0000 0400 0000 ae0a 1a00 .... $..........
155800000530: 3a01 0001 8406 0000 2000 3010 0000 0000 :....... .0.....
155900000540: 1500 2c00 0000 0000 0000 0000 0000 0000 ..,.............
156000000550: 6101 0000 0700 0000 0000 0000 cf63 0000 a............c..
156100000560: 4100 0000 0700 0000 b4c5 0200 3301 0001 A...........3...
156200000570: 8406 0000 2000 3010 2000 3010 1500 2c00 .... .0. .0...,.
156300000580: 0000 0000 cfe3 2000 0000 0000 0700 0000 ...... .........
156400000590: 0000 0000 0000 0000 0000 0000 0080 b000 ................
1565000005a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
1566000005b0: 0000 0000 2024 0000 6c01 0001 4859 0400 .... $..l...HY..
1567000005c0: 1b01 0001 8406 0000 2000 3010 0000 0000 ........ .0.....
1568000005d0: 1500 2c00 0000 0000 9c99 ea6a 91ff ffff ..,........j....
1569000005e0: c850 0500 6001 0001 8406 0000 2000 3010 .P..`....... .0.
1570000005f0: 0000 0000 1500 2c00 0000 0000 0000 0000 ......,.........
157100000600: 0700 0000 2ee6 0200 3e01 0002 8406 0000 ........>.......
157200000610: 2000 3010 566b 0000 1500 2c00 0000 0000 .0.Vk....,.....
157300000620: 0800 0000 0000 0000 0700 0000 0700 0000 ................
157400000630: 0000 0000 0000 0000 0100 0000 8081 3010 ..............0.
157500000640: a804 0400 5701 0001 8406 0000 2000 3010 ....W....... .0.
157600000650: cb07 3200 885a ea6a 91ff ffff 0100 0000 ..2..Z.j........
157700000660: 0000 0000 8875 0300 6c01 0001 8406 0000 .....u..l.......
157800000670: 2000 3010 0300 0000 0300 0000 0000 0000 .0.............
157900000680: 0100 0000 0100 0000 ccd4 0100 6d01 0001 ............m...
158000000690: 8406 0000 2000 3010 cb07 3200 0300 0000 .... .0...2.....
1581000006a0: 0000 0000 0000 0000 0200 0000 2724 0000 ............'$..
1582000006b0: 0000 0000 1100 3010 0100 0000 a850 0500 ......0......P..
1583000006c0: 5701 0001 8406 0000 2000 3010 0000 0000 W....... .0.....
1584000006d0: 885a ea6a 91ff ffff 0100 0000 0000 0000 .Z.j............
1585000006e0: 680f 0200 6c01 0001 8406 0000 2000 3010 h...l....... .0.
1586000006f0: 0000 0000 0400 0000 0000 0000 0100 0000 ................
158700000700: 6d01 0001 ac79 0100 6d01 0001 8406 0000 m....y..m.......
158800000710: 2000 3010 0000 0000 0400 0000 0000 0000 .0.............
158900000720: 0000 0000 0200 0000 2924 0000 0000 0000 ........)$......
159000000730: 1143 0200 0100 0000 2818 0400 5701 0001 .C......(...W...
159100000740: 8406 0000 2000 3010 0000 0000 8829 e86a .... .0......).j
159200000750: 91ff ffff 0200 0000 0000 0000 8838 0100 .............8..
159300000760: 1b01 0001 8406 0000 2000 3010 0400 0000 ........ .0.....
159400000770: 1500 2c00 0000 0000 a029 e86a 91ff ffff ..,......).j....
159500000780: 0e89 0300 5301 0001 8406 0000 2000 3010 ....S....... .0.
159600000790: e128 0000 1500 2c00 0000 0000 2500 0000 .(....,.....%...
1597000007a0: 0000 0000 cfe3 2000 0000 0000 0000 0000 ...... .........
1598000007b0: 0700 0000 6000 0000 0700 0000 aca0 0100 ....`...........
1599000007c0: 6701 0001 8406 0000 2000 3010 e128 0000 g....... .0..(..
1600000007d0: 1500 2c00 0000 0000 0000 0000 0700 0000 ..,.............
1601000007e0: cfe3 2000 0000 0000 01a2 0800 0000 0000 .. .............
1602000007f0: 28b2 1e00 1b01 0001 8406 0000 2000 3010 (........... .0.
160300000800: e128 0000 1500 2c00 0000 0000 9846 e86a .(....,......F.j
160400000810: 91ff ffff 68d2 1b00 5701 0001 8406 0000 ....h...W.......
160500000820: 2000 3010 e128 0000 7c3f e86a 91ff ffff .0..(..|?.j....
160600000830: 0a00 0000 0000 0000 0c57 0200 2301 0001 .........W..#...
160700000840: 8406 0000 2000 3010 006c 0000 1500 2c00 .... .0..l....,.
160800000850: 0000 0000 0700 0000 0000 0000 f8ff ffff ................
160900000860: ffff ff7f 0100 0000 0000 0000 6e69 8200 ............ni..
161000000870: 2501 0001 8406 0000 2000 3010 ca6e 0000 %....... .0..n..
161100000880: 1500 2c00 0000 0000 0000 0000 0700 0000 ..,.............
161200000890: 0000 0000 0000 0000 0700 0000 0000 0000 ................
1613000008a0: 0100 0000 0200 3010 3e13 bd82 5500 0000 ......0.>...U...
1614000008b0: 0600 0000 3001 0001 8015 0000 2000 3010 ....0....... .0.
1615000008c0: 0000 0000 c801 1400 0000 0000 8860 4404 .............`D.
1616000008d0: 1c01 0001 8015 0000 2000 3010 2000 0000 ........ .0. ...
1617000008e0: c801 1400 0000 0000 0000 0000 0000 0000 ................
1618000008f0: 88a9 0300 5701 0001 8015 0000 2000 3010 ....W....... .0.
161900000900: 0400 0000 1c1e e86a 91ff ffff 0300 0000 .......j........
162000000910: 0000 0000 a85a 1600 1b01 0001 8015 0000 .....Z..........
162100000920: 2000 3010 2000 3010 c801 1400 0000 0000 .0. .0.........
162200000930: c41e e86a 91ff ffff ca95 1c00 2901 0001 ...j........)...
162300000940: 8015 0000 2000 3010 2000 3010 c801 1400 .... .0. .0.....
162400000950: 0000 0000 0000 0000 0000 0000 0000 0000 ................
162500000960: 0010 0000 c8fb 0100 2801 0001 8015 0000 ........(.......
162600000970: 2000 3010 5101 0001 c801 1400 0000 0000 .0.Q...........
162700000980: 0000 0000 0000 0000 6af1 0600 2901 0001 ........j...)...
162800000990: 8015 0000 2000 3010 0000 0000 c801 1400 .... .0.........
1629000009a0: 0000 0000 0100 0000 0000 0000 0000 0000 ................
1630000009b0: 0010 0000 488f 0000 2801 0001 8015 0000 ....H...(.......
1631000009c0: 2000 3010 0200 ffff c801 1400 0000 0000 .0.............
1632000009d0: 0100 0000 0000 0000 483b 0900 4d01 0001 ........H;..M...
1633000009e0: 8015 0000 2000 3010 0000 0000 c801 1400 .... .0.........
1634000009f0: 0000 0000 1800 0000 0000 0000 8852 0100 .............R..
163500000a00: 5701 0001 8015 0000 2000 3010 e128 0000 W....... .0..(..
163600000a10: 9ce9 e76a 91ff ffff 0a00 0000 0000 0000 ...j............
163700000a20: e615 0200 3001 0001 8015 0000 2000 3010 ....0....... .0.
163800000a30: 0155 0000 c801 1400 0000 0000 68d0 0000 .U..........h...
163900000a40: 1b01 0001 8015 0000 2000 3010 6606 3200 ........ .0.f.2.
164000000a50: c801 1400 0000 0000 acfa ea6a 91ff ffff ...........j....
164100000a60: 6a0f 0200 6901 0001 8015 0000 2000 3010 j...i....... .0.
164200000a70: 7106 3200 c801 1400 0000 0000 0000 0000 q.2.............
164300000a80: 0000 0000 ffff ffff 0000 0000 e895 0300 ................
164400000a90: 5701 0001 8015 0000 2000 3010 0300 0000 W....... .0.....
164500000aa0: acbe ea6a 91ff ffff 0100 0000 0000 0000 ...j............
164600000ab0: 8a38 0100 6501 0001 8015 0000 2000 3010 .8..e....... .0.
164700000ac0: c41e e86a c801 1400 0000 0000 0000 0000 ...j............
164800000ad0: feff ffff 0000 0000 0000 0000 ee86 0400 ................
164900000ae0: 6301 0001 8015 0000 2000 3010 0000 0000 c....... .0.....
165000000af0: c801 1400 0000 0000 0000 0000 0000 0000 ................
165100000b00: 0000 0000 0000 0000 4285 5000 0000 0000 ........B.P.....
165200000b10: 0200 0000 0000 0000 8e36 0200 6201 0001 .........6..b...
165300000b20: 8015 0000 2000 3010 7d55 0000 c801 1400 .... .0.}U......
165400000b30: 0000 0000 0000 0000 0100 0000 0000 0000 ................
165500000b40: 0000 0000 4285 5000 0000 0000 0000 0000 ....B.P.........
165600000b50: 0200 3010 8c5f 0100 3401 0001 8015 0000 ..0.._..4.......
165700000b60: 2000 3010 0000 0000 c801 1400 0000 0000 .0.............
165800000b70: 4285 5000 0000 0000 0200 0000 0000 0000 B.P.............
165900000b80: 1000 0000 8081 0000 aa43 0500 3c01 0001 .........C..<...
166000000b90: 8015 0000 2000 3010 2801 0001 c801 1400 .... .0.(.......
166100000ba0: 0000 0000 4205 0000 a100 0000 0200 0000 ....B...........
166200000bb0: 0200 0000 8871 0800 5701 0001 8015 0000 .....q..W.......
166300000bc0: 2000 3010 2000 3010 885a ea6a 91ff ffff .0. .0..Z.j....
166400000bd0: 0100 0000 0000 0000 4825 0400 6c01 0001 ........H%..l...
166500000be0: 8015 0000 2000 3010 2801 0001 0300 0000 .... .0.(.......
166600000bf0: 0000 0000 0400 0000 7106 3200 0c73 0100 ........q.2..s..
166700000c00: 6d01 0001 8015 0000 2000 3010 2901 0001 m....... .0.)...
166800000c10: 0300 0000 0000 0000 0400 0000 0100 0000 ................
166900000c20: 2680 0800 0000 0000 1100 0000 0100 0000 &...............
167000000c30: c845 0400 5701 0001 8015 0000 2000 3010 .E..W....... .0.
167100000c40: 2000 3010 885a ea6a 91ff ffff 0100 0000 .0..Z.j........
167200000c50: 0000 0000 e8c9 0000 6c01 0001 8015 0000 ........l.......
167300000c60: 2000 3010 2000 3010 0400 0000 0000 0000 .0. .0.........
167400000c70: 0800 0000 0500 0000 6cdd 0000 6d01 0001 ........l...m...
167500000c80: 8015 0000 2000 3010 2801 0001 0400 0000 .... .0.(.......
167600000c90: 0000 0000 0800 0000 0300 0000 1290 7000 ..............p.
167700000ca0: 0000 0000 1100 0000 0100 0000 6875 0300 ............hu..
167800000cb0: 5701 0001 8015 0000 2000 3010 7106 3200 W....... .0.q.2.
167900000cc0: 8829 e86a 91ff ffff 0200 0000 0000 0000 .).j............
168000000cd0: a847 0000 1b01 0001 8015 0000 2000 3010 .G.......... .0.
168100000ce0: 9ce9 e76a c801 1400 0000 0000 a029 e86a ...j.........).j
168200000cf0: 91ff ffff e83a 0300 1b01 0001 8015 0000 .....:..........
168300000d00: 2000 3010 7106 3200 c801 1400 0000 0000 .0.q.2.........
168400000d10: 9c99 ea6a 91ff ffff ae93 0100 6601 0001 ...j........f...
168500000d20: 8015 0000 2000 3010 acfa ea6a c801 1400 .... .0....j....
168600000d30: 0000 0000 0000 0000 feff ffff 0000 0000 ................
168700000d40: 2000 3010 0000 0000 0000 0000 0000 0000 .0.............
168800000d50: 0000 0000 48b6 0000 1b01 0001 8015 0000 ....H...........
168900000d60: 2000 3010 e128 0000 c801 1400 0000 0000 .0..(..........
169000000d70: 9c99 ea6a 91ff ffff a8ea 0300 1b01 0001 ...j............
169100000d80: 8015 0000 2000 3010 e128 0000 c801 1400 .... .0..(......
169200000d90: 0000 0000 08eb e76a 91ff ffff 885f 0100 .......j....._..
169300000da0: 4e01 0001 8015 0000 2000 3010 2efe 0300 N....... .0.....
169400000db0: c801 1400 0000 0000 0800 0000 0000 0000 ................
169500000dc0: e8bc 0000 5701 0001 8015 0000 2000 3010 ....W....... .0.
169600000dd0: 0000 0000 8829 e86a 91ff ffff 0200 0000 .....).j........
169700000de0: 0000 0000 c895 0000 1b01 0001 8015 0000 ................
169800000df0: 2000 3010 2000 3010 c801 1400 0000 0000 .0. .0.........
169900000e00: a029 e86a 91ff ffff cab2 0b00 1e01 0001 .).j............
170000000e10: 8015 0000 2000 3010 0000 0000 c801 1400 .... .0.........
170100000e20: 0000 0000 0000 0000 0000 0000 0400 0000 ................
170200000e30: 0000 0000 689a 0400 5701 0001 8015 0000 ....h...W.......
170300000e40: 2000 3010 0000 0000 586f e86a 91ff ffff .0.....Xo.j....
170400000e50: 0100 0000 0000 0000 8884 0200 6c01 0001 ............l...
170500000e60: 8015 0000 2000 3010 8829 e86a c801 1400 .... .0..).j....
170600000e70: 0000 0000 0000 0000 4100 0000 ac47 0000 ........A....G..
170700000e80: 6d01 0001 8015 0000 2000 3010 e128 0000 m....... .0..(..
170800000e90: c801 1400 0000 0000 0000 0000 0000 0000 ................
170900000ea0: 0000 0000 0000 0000 001c 0200 0000 0000 ................
171000000eb0: 2a66 0100 5101 0001 8015 0000 2000 3010 *f..Q....... .0.
171100000ec0: 0000 0000 c801 1400 0000 0000 0000 0000 ................
171200000ed0: 0100 0000 0000 0000 2000 3010 087e 0200 ........ .0..~..
171300000ee0: 6a01 0001 8015 0000 2000 3010 0100 0000 j....... .0.....
171400000ef0: c801 1400 0000 0000 0000 0000 0100 0000 ................
171500000f00: 8c11 0100 6b01 0001 8015 0000 2000 3010 ....k....... .0.
171600000f10: 1b01 0001 c801 1400 0000 0000 0000 0000 ................
171700000f20: 0000 0000 0000 0000 0000 0000 0028 0000 .............(..
171800000f30: 2000 3010 8c5f 0100 6701 0001 8015 0000 .0.._..g.......
171900000f40: 2000 3010 0000 0000 c801 1400 0000 0000 .0.............
172000000f50: 0000 0000 ffff ffff ffff ffff ffff ff07 ................
172100000f60: 0800 0000 0700 0000 6e02 0200 5301 0001 ........n...S...
172200000f70: 8015 0000 2000 3010 0100 0000 c801 1400 .... .0.........
172300000f80: 0000 0000 0000 0000 2000 3010 0000 0000 ........ .0.....
172400000f90: 0100 0000 0000 0000 0100 0000 0000 0000 ................
172500000fa0: 0000 0000 cc3a 0300 3f01 0002 8015 0000 .....:..?.......
172600000fb0: 2000 3010 7106 3200 c801 1400 0000 0000 .0.q.2.........
172700000fc0: 0800 0000 0000 0000 0100 0000 0000 0000 ................
172800000fd0: 8081 3010 3d00 0000 f542 0000 0000 0000 ..0.=....B......
172900000fe0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
173000000ff0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
1731 )",
1732};
1733
1734TEST(CpuReaderTest, ParseExt4WithOverwrite) {
1735 const ExamplePage* test_case = &g_full_page_ext4;
1736
1737 BundleProvider bundle_provider(base::kPageSize);
1738 ProtoTranslationTable* table = GetTable(test_case->name);
1739 auto page = PageFromXxd(test_case->data);
1740
1741 EventFilter filter(*table, {"sched_switch"});
1742
Hector Dearmanc8488032018-03-02 13:12:01 +00001743 FtraceMetadata metadata{};
Hector Dearman1f14b622018-02-27 11:17:37 +00001744 ASSERT_TRUE(CpuReader::ParsePage(page.get(), &filter,
Hector Dearmanc8488032018-03-02 13:12:01 +00001745 bundle_provider.writer(), table, &metadata));
Hector Dearman1f14b622018-02-27 11:17:37 +00001746
1747 auto bundle = bundle_provider.ParseProto();
1748 ASSERT_TRUE(bundle);
Hector Dearmanc8488032018-03-02 13:12:01 +00001749 EXPECT_EQ(metadata.overwrite_count, 192ul);
Hector Dearman1f14b622018-02-27 11:17:37 +00001750}
1751
Primiano Tucci4f9b6d72017-12-05 20:59:16 +00001752} // namespace perfetto