MCPcopy Create free account
hub / github.com/emscripten-core/emscripten / main

Function main

test/pthread/test_pthread_mandelbrot.cpp:574–620  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

572}
573
574int main(int argc, char** argv)
575{
576 ENVIRONMENT_IS_WEB = EM_ASM_INT(return ENVIRONMENT_IS_WEB);
577
578#ifndef NO_SDL
579 if (ENVIRONMENT_IS_WEB) {
580 SDL_Init(SDL_INIT_VIDEO);
581 screen = SDL_SetVideoMode(W, H, 32, SDL_SWSURFACE);
582 }
583#endif
584 for(int i = 0; i < W*H; ++i)
585 outputImage[i] = 0x00000000;
586
587#ifndef SINGLETHREADED
588 maxThreadsRunning = emscripten_num_logical_cores() < MAX_NUM_THREADS ? emscripten_num_logical_cores() : MAX_NUM_THREADS;
589 for(int i = 0; i < maxThreadsRunning; ++i)
590 {
591 int rc = pthread_create(&thread[i], NULL, mandelbrot_thread, (void*)i);
592 assert(rc == 0);
593 }
594#endif
595
596#ifndef SINGLETHREADED
597 emscripten_set_thread_name(pthread_self(), "Mandelbrot main");
598#endif
599
600#ifndef NO_SDL
601 EM_ASM("SDL.defaults.copyOnLock = false; SDL.defaults.discardOnLock = true; SDL.defaults.opaqueFrontBuffer = false;");
602#endif
603
604 register_tasks();
605 if (ENVIRONMENT_IS_WEB) {
606 emscripten_set_main_loop(main_tick, 0, 0);
607 } else {
608 int numTotalFrames = EM_ASM_INT(return (programArgs && programArgs.length >= 2) ? parseInt(programArgs[1]) : 1000);
609 printf("Rendering %d frames of Mandelbrot. Invoke \"node|js mandelbrot.js numItersPerFrame numFrames\" to configure.\n", numTotalFrames);
610 double t0 = emscripten_get_now();
611 for(int i = 0; i < numTotalFrames; ++i) {
612 main_tick();
613 }
614 double t1 = emscripten_get_now();
615 printf("Rendered %d frames (%d total iterations) of Mandelbrot.\n", numTotalFrames, numItersDoneOnCanvas);
616 printf("Total time: %f seconds, or %f seconds/frame, or %f seconds/iteration.\n", (t1-t0)/1000.0, (t1-t0)/(1000.0*numTotalFrames), (t1-t0)/(1000.0*numItersDoneOnCanvas));
617 }
618
619 return 0;
620}

Callers

nothing calls this directly

Calls 8

register_tasksFunction · 0.85
printfFunction · 0.85
main_tickFunction · 0.70
assertFunction · 0.50
EM_ASMFunction · 0.50
emscripten_get_nowFunction · 0.50

Tested by

no test coverage detected