blob: 5b7d0225a6566bb2dedee002418ce50a83047579 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef TRACE_READER_FILE_READER_H_
#define TRACE_READER_FILE_READER_H_
#include <lib/trace-engine/fields.h>
#include <stdio.h>
#include <array>
#include <memory>
#include <trace-reader/reader.h>
namespace trace {
// Read records from a file, in fxt file format.
class FileReader : public TraceReader {
public:
static bool Create(const char* file_path, RecordConsumer record_consumer,
ErrorHandler error_handler, std::unique_ptr<FileReader>* out_reader);
void ReadFile();
private:
// Note: Buffer needs to be big enough to store records of maximum size.
static constexpr size_t kReadBufferSize = trace::RecordFields::kMaxRecordSizeBytes * 4;
explicit FileReader(FILE* file, RecordConsumer record_consumer, ErrorHandler error_handler);
FILE* const file_;
RecordConsumer const record_consumer_;
ErrorHandler const error_handler_;
// We don't use a vector here to avoid the housekeeping necessary to keep
// checkers happy (e.g., asan). We use this buffer in an atypical way.
std::array<uint8_t, kReadBufferSize> buffer_;
// The amount of space in use in |buffer_|.
size_t buffer_end_ = 0u;
DISALLOW_COPY_AND_ASSIGN_ALLOW_MOVE(FileReader);
};
} // namespace trace
#endif // TRACE_READER_FILE_READER_H_