本文整理汇总了C++中RelayRace类的典型用法代码示例。如果您正苦于以下问题:C++ RelayRace类的具体用法?C++ RelayRace怎么用?C++ RelayRace使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了RelayRace类的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: mainLoop
static void
mainLoop() {
addCallbacks(retracer);
long long startTime = 0;
frameNo = 0;
startTime = os::getTime();
if (singleThread) {
trace::Call *call;
while ((call = parser->parse_call())) {
retraceCall(call);
delete call;
}
} else {
RelayRace race;
race.run();
}
finishRendering();
long long endTime = os::getTime();
float timeInterval = (endTime - startTime) * (1.0 / os::timeFrequency);
if ((retrace::verbosity >= -1) || (retrace::profiling)) {
std::cout <<
"Rendered " << frameNo << " frames"
" in " << timeInterval << " secs,"
" average of " << (frameNo/timeInterval) << " fps\n";
}
if (waitOnFinish) {
waitForInput();
} else {
return;
}
}
示例2: mainLoop
static void
mainLoop() {
addCallbacks(retracer);
long long startTime = 0;
frameNo = 0;
startTime = os::getTime();
if (singleThread) {
trace::Call *call;
while ((call = parser.parse_call())) {
retraceCall(call);
delete call;
};
} else {
RelayRace race;
race.run();
}
finishRendering();
long long endTime = os::getTime();
float timeInterval = (endTime - startTime) * (1.0 / os::timeFrequency);
if ((retrace::verbosity >= -1) || (retrace::profiling)) {
std::cout <<
"Rendered " << frameNo << " frames"
" in " << timeInterval << " secs,"
" average of " << (frameNo/timeInterval) << " fps\n";
std::cout << std::endl;
std::cout <<
"Total number of calls: " << nCalls.tot() << std::endl;
std::cout <<
"Average number of calls: " << nCalls.avg() << std::endl;
std::cout <<
"Minimum number of calls: " << nCalls.min() << std::endl;
std::cout <<
"Maximum number of calls: " << nCalls.max() << std::endl;
std::cout << std::endl;
std::cout <<
"Total number of render calls: " << nRenderCalls.tot() << std::endl;
std::cout <<
"Average number of render calls: " << nRenderCalls.avg() << std::endl;
std::cout <<
"Minimum number of render calls: " << nRenderCalls.min() << std::endl;
std::cout <<
"Maximum number of render calls: " << nRenderCalls.max() << std::endl;
std::cout << std::endl;
std::cout <<
"Total texel uploads: " << texUploads.tot() << std::endl;
std::cout <<
"Average texel uploads: " << texUploads.avg() << std::endl;
std::cout <<
"Minimum texel uploads: " << texUploads.min() << std::endl;
std::cout <<
"Maximum texel uploads: " << texUploads.max() << std::endl;
std::cout << std::endl;
std::cout <<
"Total number of triangles: " << nTriangles.tot() << std::endl;
std::cout <<
"Average number of triangles: " << nTriangles.avg() << std::endl;
std::cout <<
"Minimum number of triangles: " << nTriangles.min() << std::endl;
std::cout <<
"Maximum number of triangles: " << nTriangles.max() << std::endl;
std::cout << std::endl;
std::cout <<
"Total number of vertices: " << nVertices.tot() << std::endl;
std::cout <<
"Average number of vertices: " << nVertices.avg() << std::endl;
std::cout <<
"Minimum number of vertices: " << nVertices.min() << std::endl;
std::cout <<
"Maximum number of vertices: " << nVertices.max() << std::endl;
}
if (waitOnFinish) {
waitForInput();
} else {
return;
}
}
示例3: runLeg
/**
* Interpret successive calls.
*/
void
runLeg(trace::Call *call) {
/* Consume successive calls for this thread. */
do {
assert(call);
assert(call->thread_id == leg);
retraceCall(call);
delete call;
call = parser->parse_call();
} while (call && call->thread_id == leg);
if (call) {
/* Pass the baton */
assert(call->thread_id != leg);
flushRendering();
race->passBaton(call);
} else {
/* Reached the finish line */
if (0) std::cerr << "finished on leg " << leg << "\n";
if (leg) {
/* Notify the fore runner */
race->finishLine();
} else {
/* We are the fore runner */
finished = true;
}
}
}
示例4: runLeg
/**
* Interpret successive calls.
*/
void
runLeg(trace::Call *call) {
/* Consume successive calls for this thread. */
do {
bool callEndsFrame = false;
static trace::ParseBookmark frameStart;
assert(call);
assert(call->thread_id == leg);
if (loopCount && call->flags & trace::CALL_FLAG_END_FRAME) {
callEndsFrame = true;
parser.getBookmark(frameStart);
}
retraceCall(call);
delete call;
call = parser.parse_call();
/* Restart last frame if looping is requested. */
if (loopCount) {
if (!call) {
parser.setBookmark(lastFrameStart);
call = parser.parse_call();
if (loopCount > 0) {
--loopCount;
}
} else if (callEndsFrame) {
lastFrameStart = frameStart;
}
}
} while (call && call->thread_id == leg);
if (call) {
/* Pass the baton */
assert(call->thread_id != leg);
flushRendering();
race->passBaton(call);
} else {
/* Reached the finish line */
if (0) std::cerr << "finished on leg " << leg << "\n";
if (leg) {
/* Notify the fore runner */
race->finishLine();
} else {
/* We are the fore runner */
finished = true;
}
}
}
示例5: runRace
/**
* Thread main loop.
*/
void
runRace(void) {
os::unique_lock<os::mutex> lock(mutex);
while (1) {
while (!finished && !baton) {
wake_cond.wait(lock);
}
if (finished) {
break;
}
assert(baton);
trace::Call *call = baton;
baton = 0;
runLeg(call);
}
if (0) std::cerr << "leg " << leg << " actually finishing\n";
if (leg == 0) {
race->stopRunners();
}
}