/*
* Copyright 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#pragma once
#include "uploadthread.h"
#include "prong.h"
#include "histogram.h"
#include "pb_encode.h"
#include "nano/tuningfork.pb.h"
#include "nano/tuningfork_clearcut_log.pb.h"
namespace tuningfork {
typedef logs_proto_tuningfork_TuningForkLogEvent TuningForkLogEvent;
typedef logs_proto_tuningfork_TuningForkHistogram ClearcutHistogram;
typedef logs_proto_tuningfork_DeviceInfo DeviceInfo;
class ClearcutSerializer {
public:
static void SerializeEvent(const ProngCache& t,
const ProtobufSerialization& fidelity_params,
const ExtraUploadInfo& device_info,
ProtobufSerialization& evt_ser);
// Fill in the event histograms
static void FillHistograms(const ProngCache& pc, TuningForkLogEvent &evt);
// Fill in the annotation, etc, then the histogram
static void Fill(const Prong& p, ClearcutHistogram& h);
// Fill in the histogram data
static void Fill(const Histogram& h, ClearcutHistogram& ch);
// Fill in the device info
static void Fill(const ExtraUploadInfo& p, DeviceInfo& di);
// Fill in the other experiment, session and apk info
static void FillExtras(const ExtraUploadInfo& p, TuningForkLogEvent& evt);
// Callbacks needed by nanopb
static bool writeCountArray(pb_ostream_t *stream, const pb_field_t *field, void *const *arg);
static bool writeAnnotation(pb_ostream_t* stream, const pb_field_t *field, void *const *arg);
static bool writeHistograms(pb_ostream_t* stream, const pb_field_t *field, void *const *arg);
static bool writeFidelityParams(pb_ostream_t* stream, const pb_field_t *field, void *const *arg);
static bool writeString(pb_ostream_t *stream, const pb_field_t *field, void *const *arg);
static bool writeDeviceInfo(pb_ostream_t* stream, const pb_field_t *field, void *const *arg);
static bool writeCpuFreqs(pb_ostream_t *stream, const pb_field_t *field, void *const *arg);
};
} //namespace tuningfork