// Copyright 2015 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_SAMPLE_INFO_READER_H_
#define CHROMIUMOS_WIDE_PROFILING_SAMPLE_INFO_READER_H_

#include <stdint.h>

#include "chromiumos-wide-profiling/kernel/perf_event.h"

namespace quipper {

// Forward declarations of structures.
union perf_event;
typedef perf_event event_t;
struct perf_sample;

class SampleInfoReader {
 public:
  SampleInfoReader(struct perf_event_attr event_attr, bool read_cross_endian)
    : event_attr_(event_attr),
      read_cross_endian_(read_cross_endian) {}

  bool ReadPerfSampleInfo(const event_t& event,
                          struct perf_sample* sample) const;
  bool WritePerfSampleInfo(const perf_sample& sample,
                           event_t* event) const;

  // Given a general perf sample format |sample_type|, return the fields of that
  // format that are present in a sample for an event of type |event_type|.
  //
  // e.g. FORK and EXIT events have the fields {time, pid/tid, cpu, id}.
  // Given a sample type with fields {ip, time, pid/tid, and period}, return
  // the intersection of these two field sets: {time, pid/tid}.
  //
  // All field formats are bitfields, as defined by enum
  // perf_event_sample_format in kernel/perf_event.h.
  static uint64_t GetSampleFieldsForEventType(uint32_t event_type,
                                              uint64_t sample_type);

  // Returns the offset in bytes within a perf event structure at which the raw
  // perf sample data is located.
  static uint64_t GetPerfSampleDataOffset(const event_t& event);

 private:
  // Event attribute info, which determines the contents of some perf_sample
  // data.
  struct perf_event_attr event_attr_;

  // Set this flag if values (uint32s and uint64s) should be endian-swapped
  // during reads.
  bool read_cross_endian_;
};

}  // namespace quipper

#endif  // CHROMIUMOS_WIDE_PROFILING_SAMPLE_INFO_READER_H_
