| Index: platform_tools/android/visualbench/jni/main.cpp
|
| diff --git a/platform_tools/android/visualbench/jni/main.cpp b/platform_tools/android/visualbench/jni/main.cpp
|
| index 293041ae8e9ed869495b8df6e72298d5877592fc..3d7ceab9eb63a6a7f5ca651c75a213a52ee64895 100644
|
| --- a/platform_tools/android/visualbench/jni/main.cpp
|
| +++ b/platform_tools/android/visualbench/jni/main.cpp
|
| @@ -14,11 +14,19 @@
|
| /**
|
| * Shared state for our app.
|
| */
|
| +enum State {
|
| + kInit_State,
|
| + kAnimate_State,
|
| + kDestroyRequested_State,
|
| + kFinished_State,
|
| +};
|
| +
|
| struct VisualBenchState {
|
| - VisualBenchState() : fApp(NULL), fWindow(NULL) {}
|
| + VisualBenchState() : fApp(NULL), fWindow(NULL), fState(kInit_State) {}
|
| struct android_app* fApp;
|
| SkOSWindow* fWindow;
|
| SkTArray<SkString> fFlags;
|
| + State fState;
|
| };
|
|
|
| static void handle_cmd(struct android_app* app, int32_t cmd) {
|
| @@ -26,12 +34,7 @@ static void handle_cmd(struct android_app* app, int32_t cmd) {
|
| switch (cmd) {
|
| case APP_CMD_INIT_WINDOW:
|
| // The window is being shown, get it ready.
|
| - if (state->fApp->window != NULL) {
|
| - if (state->fWindow) {
|
| - SkDELETE(state->fWindow);
|
| - application_term();
|
| - }
|
| -
|
| + if (state->fApp->window != NULL && kInit_State == state->fState) {
|
| // drain any events that occurred before |window| was assigned.
|
| while (SkEvent::ProcessEvent());
|
|
|
| @@ -48,12 +51,12 @@ static void handle_cmd(struct android_app* app, int32_t cmd) {
|
| state->fWindow = create_sk_window((void*)state->fApp->window,
|
| args.count(),
|
| const_cast<char**>(args.begin()));
|
| + state->fWindow->forceInvalAll();
|
| + state->fState = kAnimate_State;
|
| }
|
| break;
|
| case APP_CMD_TERM_WINDOW:
|
| - SkDELETE(state->fWindow);
|
| - state->fWindow = NULL;
|
| - application_term();
|
| + state->fState = kDestroyRequested_State;
|
| break;
|
| }
|
| }
|
| @@ -84,7 +87,7 @@ void android_main(struct android_app* state) {
|
| "(Ljava/lang/String;)Ljava/lang/String;");
|
|
|
| jstring jsParam1 = (jstring)env->CallObjectMethod(intent, gseid,
|
| - env->NewStringUTF("cmdLineArguments"));
|
| + env->NewStringUTF("cmdLineFlags"));
|
| if (jsParam1) {
|
| const char* flags = env->GetStringUTFChars(jsParam1, 0);
|
| SkTArray<SkString> flagEntries;
|
| @@ -108,21 +111,25 @@ void android_main(struct android_app* state) {
|
|
|
| // Check if we are exiting.
|
| if (state->destroyRequested != 0) {
|
| - SkDELETE(visualBenchState.fWindow);
|
| - application_term();
|
| return;
|
| }
|
| +
|
| }
|
|
|
| if (visualBenchState.fWindow) {
|
| if (visualBenchState.fWindow->destroyRequested()) {
|
| - SkDELETE(visualBenchState.fWindow);
|
| - visualBenchState.fWindow = NULL;
|
| - application_term();
|
| - break;
|
| + visualBenchState.fState = kDestroyRequested_State;
|
| + } else {
|
| + visualBenchState.fWindow->update(NULL);
|
| }
|
| - visualBenchState.fWindow->update(NULL);
|
| + }
|
| +
|
| + if (kDestroyRequested_State == visualBenchState.fState) {
|
| + SkDELETE(visualBenchState.fWindow);
|
| + visualBenchState.fWindow = NULL;
|
| + application_term();
|
| + ANativeActivity_finish(state->activity);
|
| + visualBenchState.fState = kFinished_State;
|
| }
|
| }
|
| - ANativeActivity_finish(state->activity);
|
| }
|
|
|