blob: 63569534d721d8de21c23be0064617cc21af29b6 [file] [log] [blame]
Howard Chen812f5d32017-04-07 20:15:28 +08001#include "ScheduleTest.h"
2#include <pthread.h>
3#include <iomanip>
4#include <iostream>
5
6using namespace std;
7
8#define ASSERT(cond) \
9 do { \
10 if (!(cond)) { \
11 cerr << __func__ << ":" << __LINE__ << " condition:" << #cond \
12 << " failed\n" \
13 << endl; \
14 exit(EXIT_FAILURE); \
15 } \
16 } while (0)
17
18static int threadPri() {
19 struct sched_param param;
20 int policy;
21 ASSERT(!pthread_getschedparam(pthread_self(), &policy, &param));
22 return param.sched_priority;
23}
24
25static void threadDump(const char* prefix, int verbose) {
26 struct sched_param param;
27 int policy;
28 if (!verbose) return;
29 cout << "--------------------------------------------------" << endl;
30 cout << setw(12) << left << prefix << " pid: " << getpid()
31 << " tid: " << gettid() << " cpu: " << sched_getcpu() << endl;
32 ASSERT(!pthread_getschedparam(pthread_self(), &policy, &param));
33 string s = (policy == SCHED_OTHER)
34 ? "SCHED_OTHER"
35 : (policy == SCHED_FIFO)
36 ? "SCHED_FIFO"
37 : (policy == SCHED_RR) ? "SCHED_RR" : "???";
38 cout << setw(12) << left << s << param.sched_priority << endl;
39 return;
40}
41
42namespace android {
43namespace hardware {
44namespace tests {
45namespace libhwbinder {
46namespace V1_0 {
47namespace implementation {
48
49// Methods from ::android::hardware::tests::libhwbinder::V1_0::IScheduleTest
50// follow.
51Return<uint32_t> ScheduleTest::send(uint32_t cfg, uint32_t callerSta) {
52 // TODO implement
53 int priority = threadPri();
54 int priority_caller = (callerSta >> 16) & 0xffff;
55 int verbose = cfg & 1;
56 threadDump("hwbinder", verbose);
57 uint32_t h = 0, s = 0;
58 if (priority_caller != priority) {
59 h++;
60 if (verbose) {
61 cout << "err priority_caller:" << priority_caller
62 << ", priority:" << priority << endl;
63 }
64 }
65 int cpu = sched_getcpu();
66 int cpu_caller = (callerSta)&0xffff;
67 if (cpu != cpu_caller) {
68 s++;
69 }
70 return (h << 16) | (s & 0xffff);
71}
72
73// Methods from ::android::hidl::base::V1_0::IBase follow.
74
75IScheduleTest* HIDL_FETCH_IScheduleTest(const char* /* name */) {
76 return new ScheduleTest();
77}
78
79} // namespace implementation
80} // namespace V1_0
81} // namespace libhwbinder
82} // namespace tests
83} // namespace hardware
84} // namespace android