2 * Copyright (C) ARM Limited 2013-2014. All rights reserved.
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
13 #include <semaphore.h>
15 #include "k/perf_event.h"
21 FRAME_BLOCK_COUNTER = 5,
23 FRAME_PERF_ATTRS = 11,
29 static const size_t MAXSIZE_PACK32 = 5;
30 static const size_t MAXSIZE_PACK64 = 10;
32 Buffer(int32_t core, int32_t buftype, const int size, sem_t *const readerSem);
35 void write(Sender *sender);
37 int bytesAvailable() const;
38 int contiguousSpaceAvailable() const;
39 void commit(const uint64_t time);
40 void check(const uint64_t time);
45 void summary(const int64_t timestamp, const int64_t uptime, const int64_t monotonicDelta, const char *const uname);
46 void coreName(const int core, const int cpuid, const char *const name);
48 // Block Counter messages
49 bool eventHeader(uint64_t curr_time);
50 bool eventTid(int tid);
51 void event(int32_t key, int32_t value);
52 void event64(int64_t key, int64_t value);
54 // Perf Attrs messages
55 void pea(const struct perf_event_attr *const pea, int key);
56 void keys(const int count, const __u64 *const ids, const int *const keys);
57 void format(const int length, const char *const format);
58 void maps(const int pid, const int tid, const char *const maps);
59 void comm(const int pid, const int tid, const char *const image, const char *const comm);
64 // Prefer a new member to using these functions if possible
65 char *getWritePos() { return mBuf + mWritePos; }
66 void advanceWrite(int bytes) { mWritePos = (mWritePos + bytes) & /*mask*/(mSize - 1); }
68 static void writeLEInt(unsigned char *buf, int v) {
69 buf[0] = (v >> 0) & 0xFF;
70 buf[1] = (v >> 8) & 0xFF;
71 buf[2] = (v >> 16) & 0xFF;
72 buf[3] = (v >> 24) & 0xFF;
76 bool commitReady() const;
77 bool checkSpace(int bytes);
79 void packInt(int32_t x);
80 void packInt64(int64_t x);
81 void writeBytes(const void *const data, size_t count);
82 void writeString(const char *const str);
85 const int32_t mBufType;
94 sem_t *const mReaderSem;
96 // Intentionally unimplemented
97 Buffer(const Buffer &);
98 Buffer &operator=(const Buffer &);