1/* 2* Copyright 2016 Google Inc. 3* 4* Use of this source code is governed by a BSD-style license that can be 5* found in the LICENSE file. 6*/ 7 8#include <jni.h> 9#include <errno.h> 10 11#include <android_native_app_glue.h> 12 13#include "../Application.h" 14#include "Timer.h" 15 16using sk_app::Application; 17 18/** 19 * This is the main entry point of a native application that is using 20 * android_native_app_glue. It runs in its own thread, with its own 21 * event loop for receiving input events and doing other things. 22 */ 23void android_main(struct android_app* state) { 24 // Make sure glue isn't stripped. 25 app_dummy(); 26 27 static const char* gCmdLine[] = { 28 "viewer", 29 "--skps", 30 "/data/local/tmp/skps", 31 // TODO: figure out how to use am start with extra params to pass in additional arguments at 32 // runtime 33 // "--atrace", 34 }; 35 36 std::unique_ptr<Application> vkApp(Application::Create(SK_ARRAY_COUNT(gCmdLine), 37 const_cast<char**>(gCmdLine), 38 state)); 39 40 // loop waiting for stuff to do. 41 while (1) { 42 // Read all pending events. 43 int ident; 44 int events; 45 struct android_poll_source* source; 46 47 // block forever waiting for events. 48 while ((ident=ALooper_pollAll(-1, NULL, &events, 49 (void**)&source)) >= 0) { 50 51 // Process this event. 52 if (source != NULL) { 53 source->process(state, source); 54 } 55 56 // Check if we are exiting. 57 if (state->destroyRequested != 0) { 58 return; 59 } 60 61 vkApp->onIdle(); 62 } 63 } 64} 65//END_INCLUDE(all) 66