Home | History | Annotate | Download | only in quipper
      1 // Copyright (c) 2012 The Chromium OS 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 "perf_protobuf_io.h"
      6 
      7 #include <vector>
      8 
      9 #include "base/logging.h"
     10 
     11 #include "file_utils.h"
     12 
     13 namespace quipper {
     14 
     15 bool SerializeFromFile(const string& filename, PerfDataProto* perf_data_proto) {
     16   return SerializeFromFileWithOptions(filename, PerfParserOptions(),
     17                                       perf_data_proto);
     18 }
     19 
     20 bool SerializeFromFileWithOptions(const string& filename,
     21                                   const PerfParserOptions& options,
     22                                   PerfDataProto* perf_data_proto) {
     23   PerfReader reader;
     24   if (!reader.ReadFile(filename)) return false;
     25 
     26   PerfParser parser(&reader, options);
     27   if (!parser.ParseRawEvents()) return false;
     28 
     29   if (!reader.Serialize(perf_data_proto)) return false;
     30 
     31   // Append parser stats to protobuf.
     32   PerfSerializer::SerializeParserStats(parser.stats(), perf_data_proto);
     33   return true;
     34 }
     35 
     36 bool DeserializeToFile(const PerfDataProto& perf_data_proto,
     37                        const string& filename) {
     38   PerfReader reader;
     39   return reader.Deserialize(perf_data_proto) && reader.WriteFile(filename);
     40 }
     41 
     42 bool WriteProtobufToFile(const PerfDataProto& perf_data_proto,
     43                          const string& filename) {
     44   string output;
     45   perf_data_proto.SerializeToString(&output);
     46 
     47   return BufferToFile(filename, output);
     48 }
     49 
     50 bool ReadProtobufFromFile(PerfDataProto* perf_data_proto,
     51                           const string& filename) {
     52   std::vector<char> buffer;
     53   if (!FileToBuffer(filename, &buffer)) return false;
     54 
     55   bool ret = perf_data_proto->ParseFromArray(buffer.data(), buffer.size());
     56 
     57   LOG(INFO) << "#events" << perf_data_proto->events_size();
     58 
     59   return ret;
     60 }
     61 
     62 }  // namespace quipper
     63