#define VIDEO_WINMAIN_ARGS
#include <iostream>
#include "oneapi/tbb/tick_count.h"
#include "common/utility/get_default_num_threads.hpp"
#include "polyover.hpp"
#include "polymain.hpp"
#include "pover_video.hpp"
#ifndef _WIN32
#include <sys/time.h>
#include <unistd.h>
void rt_sleep(int msec) {
usleep(msec * 1000);
}
#else
#undef OLDUNIXTIME
#undef STDTIME
#include <windows.h>
void rt_sleep(int msec) {
Sleep(msec);
}
#endif
bool g_next_frame() {
if (++n_next_frame_calls >= frame_skips) { n_next_frame_calls = 0;
return gVideo->next_frame();
}
return gVideo->running;
}
bool g_last_frame() {
if (n_next_frame_calls)
return gVideo->next_frame();
return gVideo->running;
}
bool initializeVideo(int argc, char *argv[]) {
gVideo->init_console(); gVideo->title = g_windowTitle;
g_useGraphics = gVideo->init_window(g_xwinsize, g_ywinsize);
return true;
}
void pover_video::on_process() {
oneapi::tbb::tick_count t0, t1;
double naiveParallelTime, domainSplitParallelTime;
GenerateMap(
&gPolymap1, gMapXSize, gMapYSize, gNPolygons, 255, 0, 127);
GenerateMap(
&gPolymap2, gMapXSize, gMapYSize, gNPolygons, 0, 255, 127);
gDrawXOffset = map1XLoc;
gDrawYOffset = map1YLoc;
for (int i = 0; i < int(gPolymap1->size()); i++) {
(*gPolymap1)[i].drawPoly();
}
gDrawXOffset = map2XLoc;
gDrawYOffset = map2YLoc;
for (int i = 0; i < int(gPolymap2->size()); i++) {
(*gPolymap2)[i].drawPoly();
}
gDoDraw = true;
gDrawXOffset = maprXLoc;
gDrawYOffset = maprYLoc;
{
RPolygon *xp =
new RPolygon(0, 0, gMapXSize - 1, gMapYSize - 1, 0, 0, 0); delete xp;
t0 = oneapi::tbb::tick_count::now();
SerialOverlayMaps(&gResultMap, gPolymap1, gPolymap2);
t1 = oneapi::tbb::tick_count::now();
std::cout << "Serial overlay took " << (t1 - t0).seconds() * 1000 << " msec"
<< "\n";
gSerialTime = (t1 - t0).seconds() * 1000;
#if _DEBUG
CheckPolygonMap(gResultMap);
#else
delete gResultMap;
#endif
if (gCsvFile.is_open()) {
gCsvFile << "Serial Time," << gSerialTime << "\n";
gCsvFile << "Threads,";
if (gThreadsLow == THREADS_UNSET || gThreadsLow == utility::get_default_num_threads()) {
gCsvFile << "Threads,Automatic";
}
else {
for (int i = gThreadsLow; i <= gThreadsHigh; i++) {
gCsvFile << i;
if (i < gThreadsHigh)
gCsvFile << ",";
}
}
gCsvFile << "\n";
}
if (gIsGraphicalVersion)
rt_sleep(2000);
}
{
Polygon_map_t *resultMap;
if (gCsvFile.is_open()) {
gCsvFile << "Naive Time";
}
NaiveParallelOverlay(resultMap, *gPolymap1, *gPolymap2);
delete resultMap;
if (gIsGraphicalVersion)
rt_sleep(2000);
}
{
Polygon_map_t *resultMap;
if (gCsvFile.is_open()) {
gCsvFile << "Split Time";
}
SplitParallelOverlay(&resultMap, gPolymap1, gPolymap2);
delete resultMap;
if (gIsGraphicalVersion)
rt_sleep(2000);
}
{
concurrent_Polygon_map_t *cresultMap;
if (gCsvFile.is_open()) {
gCsvFile << "Split CV time";
}
SplitParallelOverlayCV(&cresultMap, gPolymap1, gPolymap2);
delete cresultMap;
if (gIsGraphicalVersion)
rt_sleep(2000);
}
{
ETS_Polygon_map_t *cresultMap;
if (gCsvFile.is_open()) {
gCsvFile << "Split ETS time";
}
SplitParallelOverlayETS(&cresultMap, gPolymap1, gPolymap2);
delete cresultMap;
if (gIsGraphicalVersion)
rt_sleep(2000);
}
if (gIsGraphicalVersion)
rt_sleep(8000);
delete gPolymap1;
delete gPolymap2;
#if _DEBUG
delete gResultMap;
#endif
}