Index: tools/vulkan/android/main_android.cpp |
diff --git a/tools/vulkan/android/main_android.cpp b/tools/vulkan/android/main_android.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..783cd1f7835f96749a61a182adda0e11a6c12ee7 |
--- /dev/null |
+++ b/tools/vulkan/android/main_android.cpp |
@@ -0,0 +1,67 @@ |
+/* |
+* Copyright 2016 Google Inc. |
+* |
+* Use of this source code is governed by a BSD-style license that can be |
+* found in the LICENSE file. |
+*/ |
+ |
+#include <jni.h> |
+#include <errno.h> |
+ |
+#include <android_native_app_glue.h> |
+ |
+#include "../Application.h" |
+#include "Timer.h" |
+ |
+static double now_ms() { return SkTime::GetNSecs() * 1e-6; } |
+ |
+/** |
+ * This is the main entry point of a native application that is using |
+ * android_native_app_glue. It runs in its own thread, with its own |
+ * event loop for receiving input events and doing other things. |
+ */ |
+void android_main(struct android_app* state) { |
+ // Make sure glue isn't stripped. |
+ app_dummy(); |
+ |
+ static const char* gCmdLine[] = { |
+ "vulkanviewer", |
+ "--skps", |
+ "/data/local/tmp/skp", |
+ }; |
+ |
+ std::unique_ptr<Application> vkApp(Application::Create(SK_ARRAY_COUNT(gCmdLine), |
+ const_cast<char**>(gCmdLine), |
+ state)); |
+ |
+ double currentTime = 0.0; |
+ double previousTime = 0.0; |
+ |
+ // loop waiting for stuff to do. |
+ while (1) { |
+ // Read all pending events. |
+ int ident; |
+ int events; |
+ struct android_poll_source* source; |
+ |
+ // block forever waiting for events. |
+ while ((ident=ALooper_pollAll(-1, NULL, &events, |
+ (void**)&source)) >= 0) { |
+ |
+ // Process this event. |
+ if (source != NULL) { |
+ source->process(state, source); |
+ } |
+ |
+ // Check if we are exiting. |
+ if (state->destroyRequested != 0) { |
+ return; |
+ } |
+ |
+ previousTime = currentTime; |
+ currentTime = now_ms(); |
+ vkApp->onIdle(currentTime - previousTime); |
+ } |
+ } |
+} |
+//END_INCLUDE(all) |