You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
2.7 KiB
84 lines
2.7 KiB
#include "ScheduleTest.h" |
|
#include <pthread.h> |
|
#include <iomanip> |
|
#include <iostream> |
|
|
|
using namespace std; |
|
|
|
#define ASSERT(cond) \ |
|
do { \ |
|
if (!(cond)) { \ |
|
cerr << __func__ << ":" << __LINE__ << " condition:" << #cond \ |
|
<< " failed\n" \ |
|
<< endl; \ |
|
exit(EXIT_FAILURE); \ |
|
} \ |
|
} while (0) |
|
|
|
static int threadPri() { |
|
struct sched_param param; |
|
int policy; |
|
ASSERT(!pthread_getschedparam(pthread_self(), &policy, ¶m)); |
|
return param.sched_priority; |
|
} |
|
|
|
static void threadDump(const char* prefix, int verbose) { |
|
struct sched_param param; |
|
int policy; |
|
if (!verbose) return; |
|
cout << "--------------------------------------------------" << endl; |
|
cout << setw(12) << left << prefix << " pid: " << getpid() |
|
<< " tid: " << gettid() << " cpu: " << sched_getcpu() << endl; |
|
ASSERT(!pthread_getschedparam(pthread_self(), &policy, ¶m)); |
|
string s = (policy == SCHED_OTHER) |
|
? "SCHED_OTHER" |
|
: (policy == SCHED_FIFO) |
|
? "SCHED_FIFO" |
|
: (policy == SCHED_RR) ? "SCHED_RR" : "???"; |
|
cout << setw(12) << left << s << param.sched_priority << endl; |
|
return; |
|
} |
|
|
|
namespace android { |
|
namespace hardware { |
|
namespace tests { |
|
namespace libhwbinder { |
|
namespace V1_0 { |
|
namespace implementation { |
|
|
|
// Methods from ::android::hardware::tests::libhwbinder::V1_0::IScheduleTest |
|
// follow. |
|
Return<uint32_t> ScheduleTest::send(uint32_t cfg, uint32_t callerSta) { |
|
// TODO implement |
|
int priority = threadPri(); |
|
int priority_caller = (callerSta >> 16) & 0xffff; |
|
int verbose = cfg & 1; |
|
threadDump("hwbinder", verbose); |
|
uint32_t h = 0, s = 0; |
|
if (priority_caller != priority) { |
|
h++; |
|
if (verbose) { |
|
cout << "err priority_caller:" << priority_caller |
|
<< ", priority:" << priority << endl; |
|
} |
|
} |
|
int cpu = sched_getcpu(); |
|
int cpu_caller = (callerSta)&0xffff; |
|
if (cpu != cpu_caller) { |
|
s++; |
|
} |
|
return (h << 16) | (s & 0xffff); |
|
} |
|
|
|
// Methods from ::android::hidl::base::V1_0::IBase follow. |
|
|
|
IScheduleTest* HIDL_FETCH_IScheduleTest(const char* /* name */) { |
|
return new ScheduleTest(); |
|
} |
|
|
|
} // namespace implementation |
|
} // namespace V1_0 |
|
} // namespace libhwbinder |
|
} // namespace tests |
|
} // namespace hardware |
|
} // namespace android
|
|
|