1 // Copyright 2018 The Fuchsia Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "trace-test-utils/read_records.h"
6
7 #include <stdio.h>
8
9 #include <utility>
10
11 #include <trace-reader/reader_internal.h>
12
13 namespace trace_testing {
14
ReadRecordsAndErrors(const uint8_t * buffer,size_t buffer_size,fbl::Vector<trace::Record> * out_records,fbl::Vector<fbl::String> * out_errors)15 bool ReadRecordsAndErrors(const uint8_t* buffer, size_t buffer_size,
16 fbl::Vector<trace::Record>* out_records,
17 fbl::Vector<fbl::String>* out_errors) {
18 trace::TraceReader reader(
19 [out_records](trace::Record record) {
20 out_records->push_back(std::move(record));
21 },
22 [out_errors](fbl::String error) {
23 out_errors->push_back(std::move(error));
24 });
25
26 trace::internal::TraceBufferReader buffer_reader(
27 [&reader](trace::Chunk chunk) {
28 if (!reader.ReadRecords(chunk)) {
29 // Nothing to do, error already recorded.
30 }
31 },
32 [out_errors](fbl::String error) {
33 out_errors->push_back(std::move(error));
34 });
35
36 return buffer_reader.ReadChunks(buffer, buffer_size);
37 }
38
ReadRecords(const uint8_t * buffer,size_t buffer_size,fbl::Vector<trace::Record> * out_records)39 bool ReadRecords(const uint8_t* buffer, size_t buffer_size,
40 fbl::Vector<trace::Record>* out_records) {
41 fbl::Vector<fbl::String> errors;
42 if (!ReadRecordsAndErrors(buffer, buffer_size, out_records, &errors)) {
43 fprintf(stderr, "Error reading buffer\n");
44 return false;
45 }
46
47 for (const auto& error : errors) {
48 fprintf(stderr, "error: %s\n", error.c_str());
49 }
50 if (errors.size() != 0) {
51 fprintf(stderr, "Errors encountered\n");
52 return false;
53 }
54
55 return true;
56 }
57
58 } // namespace trace_testing
59