1*6777b538SAndroid Build Coastguard Worker // Copyright 2014 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef COMPONENTS_METRICS_SERIALIZATION_SERIALIZATION_UTILS_H_ 6*6777b538SAndroid Build Coastguard Worker #define COMPONENTS_METRICS_SERIALIZATION_SERIALIZATION_UTILS_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <memory> 9*6777b538SAndroid Build Coastguard Worker #include <string> 10*6777b538SAndroid Build Coastguard Worker #include <vector> 11*6777b538SAndroid Build Coastguard Worker 12*6777b538SAndroid Build Coastguard Worker namespace metrics { 13*6777b538SAndroid Build Coastguard Worker 14*6777b538SAndroid Build Coastguard Worker class MetricSample; 15*6777b538SAndroid Build Coastguard Worker 16*6777b538SAndroid Build Coastguard Worker // Metrics helpers to serialize and deserialize metrics collected by 17*6777b538SAndroid Build Coastguard Worker // ChromeOS. 18*6777b538SAndroid Build Coastguard Worker namespace SerializationUtils { 19*6777b538SAndroid Build Coastguard Worker 20*6777b538SAndroid Build Coastguard Worker // If there are more than 100,000 messages in the file, discard the remaining 21*6777b538SAndroid Build Coastguard Worker // messages to avoid running out of memory. 22*6777b538SAndroid Build Coastguard Worker extern const int kMaxMessagesPerRead; 23*6777b538SAndroid Build Coastguard Worker 24*6777b538SAndroid Build Coastguard Worker // Deserializes a sample passed as a string and return a sample. 25*6777b538SAndroid Build Coastguard Worker // The return value will either be a scoped_ptr to a Metric sample (if the 26*6777b538SAndroid Build Coastguard Worker // deserialization was successful) or a nullptr scoped_ptr. 27*6777b538SAndroid Build Coastguard Worker std::unique_ptr<MetricSample> ParseSample(const std::string& sample); 28*6777b538SAndroid Build Coastguard Worker 29*6777b538SAndroid Build Coastguard Worker // Reads all samples from a file and truncates the file when done. 30*6777b538SAndroid Build Coastguard Worker void ReadAndTruncateMetricsFromFile( 31*6777b538SAndroid Build Coastguard Worker const std::string& filename, 32*6777b538SAndroid Build Coastguard Worker std::vector<std::unique_ptr<MetricSample>>* metrics); 33*6777b538SAndroid Build Coastguard Worker 34*6777b538SAndroid Build Coastguard Worker // Reads all samples from a file and deletes the file when done. 35*6777b538SAndroid Build Coastguard Worker void ReadAndDeleteMetricsFromFile( 36*6777b538SAndroid Build Coastguard Worker const std::string& filename, 37*6777b538SAndroid Build Coastguard Worker std::vector<std::unique_ptr<MetricSample>>* metrics); 38*6777b538SAndroid Build Coastguard Worker 39*6777b538SAndroid Build Coastguard Worker // Serializes a sample and write it to filename. 40*6777b538SAndroid Build Coastguard Worker // The format for the message is: 41*6777b538SAndroid Build Coastguard Worker // message_size, serialized_message 42*6777b538SAndroid Build Coastguard Worker // where 43*6777b538SAndroid Build Coastguard Worker // * message_size is the total length of the message (message_size + 44*6777b538SAndroid Build Coastguard Worker // serialized_message) on 4 bytes 45*6777b538SAndroid Build Coastguard Worker // * serialized_message is the serialized version of sample (using ToString) 46*6777b538SAndroid Build Coastguard Worker // 47*6777b538SAndroid Build Coastguard Worker // NB: the file will never leave the device so message_size will be written 48*6777b538SAndroid Build Coastguard Worker // with the architecture's endianness. 49*6777b538SAndroid Build Coastguard Worker bool WriteMetricToFile(const MetricSample& sample, const std::string& filename); 50*6777b538SAndroid Build Coastguard Worker 51*6777b538SAndroid Build Coastguard Worker // Maximum length of a serialized message 52*6777b538SAndroid Build Coastguard Worker static const size_t kMessageMaxLength = 1024; 53*6777b538SAndroid Build Coastguard Worker 54*6777b538SAndroid Build Coastguard Worker } // namespace SerializationUtils 55*6777b538SAndroid Build Coastguard Worker } // namespace metrics 56*6777b538SAndroid Build Coastguard Worker 57*6777b538SAndroid Build Coastguard Worker #endif // COMPONENTS_METRICS_SERIALIZATION_SERIALIZATION_UTILS_H_ 58