// Copyright (c) 2012 The Chromium OS 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 CHROMIUMOS_WIDE_PROFILING_PERF_PROTOBUF_IO_H_
#define CHROMIUMOS_WIDE_PROFILING_PERF_PROTOBUF_IO_H_

#include "chromiumos-wide-profiling/compat/proto.h"
#include "chromiumos-wide-profiling/compat/string.h"
#include "chromiumos-wide-profiling/perf_parser.h"
#include "chromiumos-wide-profiling/perf_reader.h"

namespace quipper {

// Convert a raw perf data file to a PerfDataProto protobuf. Uses PerfParser to
// to process the data before writing it to the protobuf.
bool SerializeFromFile(const string& filename, PerfDataProto* proto);

// Same as SerializeFromFile(), but passes the given PerfParserOptions to
// PerfParser.
bool SerializeFromFileWithOptions(const string& filename,
                                  const PerfParserOptions& options,
                                  PerfDataProto* proto);

// Convert a PerfDataProto to raw perf data, storing it in a file.
bool DeserializeToFile(const PerfDataProto& proto, const string& filename);

// Writes PerfDataProto object to a file as serialized protobuf data.
bool WriteProtobufToFile(const quipper::PerfDataProto& perf_data_proto,
                         const string& filename);

// Read from a file containing serialized PerfDataProto data into a
// PerfDataProto object.
bool ReadProtobufFromFile(quipper::PerfDataProto* perf_data_proto,
                          const string& filename);

}  // namespace quipper

#endif  // CHROMIUMOS_WIDE_PROFILING_PERF_PROTOBUF_IO_H_
