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 "tools/sk_app/Application.h"
14 #include "tools/timer/Timer.h"
15
16 using 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 */
android_main(struct android_app * state)23 void 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(std::size(gCmdLine),
37 const_cast<char**>(gCmdLine),
38 state));
39
40 // loop waiting for stuff to do.
41 while (!state->destroyRequested) {
42 struct android_poll_source* source = nullptr;
43 auto result = ALooper_pollOnce(-1, nullptr, nullptr, (void**)&source);
44
45 if (result == ALOOPER_POLL_ERROR) {
46 SkDEBUGFAIL("ALooper_pollOnce returned an error");
47 }
48 if (source != nullptr) {
49 source->process(state, source);
50 }
51 vkApp->onIdle();
52 }
53 }
54 //END_INCLUDE(all)
55