| 572 | } |
| 573 | |
| 574 | int 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 | } |
nothing calls this directly
no test coverage detected