blob: 0c566fb423d66406c393b89dcff0031e26ebc4b8 [file] [log] [blame]
// 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.
#include "chromiumos-wide-profiling/perf_protobuf_io.h"
#include <vector>
#include "base/logging.h"
#include "chromiumos-wide-profiling/file_utils.h"
namespace quipper {
bool SerializeFromFile(const string& filename, PerfDataProto* perf_data_proto) {
return SerializeFromFileWithOptions(filename, PerfParserOptions(),
perf_data_proto);
}
bool SerializeFromFileWithOptions(const string& filename,
const PerfParserOptions& options,
PerfDataProto* perf_data_proto) {
PerfReader reader;
if (!reader.ReadFile(filename))
return false;
PerfParser parser(&reader, options);
if (!parser.ParseRawEvents())
return false;
if (!reader.Serialize(perf_data_proto))
return false;
// Append parser stats to protobuf.
PerfSerializer::SerializeParserStats(parser.stats(), perf_data_proto);
return true;
}
bool DeserializeToFile(const PerfDataProto& perf_data_proto,
const string& filename) {
PerfReader reader;
return reader.Deserialize(perf_data_proto) && reader.WriteFile(filename);
}
bool WriteProtobufToFile(const PerfDataProto& perf_data_proto,
const string& filename) {
string output;
perf_data_proto.SerializeToString(&output);
return BufferToFile(filename, output);
}
bool ReadProtobufFromFile(PerfDataProto* perf_data_proto,
const string& filename) {
std::vector<char> buffer;
if (!FileToBuffer(filename, &buffer))
return false;
bool ret = perf_data_proto->ParseFromArray(buffer.data(), buffer.size());
LOG(INFO) << "#events" << perf_data_proto->events_size();
return ret;
}
} // namespace quipper