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