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.
85 lines
2.7 KiB
85 lines
2.7 KiB
4 months ago
|
#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
|