Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Smaller mutex scope + use new SDK android methods (Defold 1.2.188) #40

Merged
merged 1 commit into from Oct 28, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
18 changes: 10 additions & 8 deletions gpgs/src/gpgs_callback.cpp
Expand Up @@ -36,7 +36,7 @@ static void UnregisterCallback()
}
}

static void gpgs_invoke_callback(MESSAGE_ID type, char*json)
static void gpgs_invoke_callback(MESSAGE_ID type, const char* json)
{
GPGS_callback *cbk = &m_callback;
if(cbk->m_Callback == LUA_NOREF)
Expand Down Expand Up @@ -118,12 +118,11 @@ void gpgs_set_callback(lua_State* L, int pos)

void gpgs_add_to_queue(MESSAGE_ID msg, const char*json)
{
DM_MUTEX_SCOPED_LOCK(m_mutex);

CallbackData data;
data.msg = msg;
data.json = json ? strdup(json) : NULL;


DM_MUTEX_SCOPED_LOCK(m_mutex);
if(m_callbacksQueue.Full())
{
m_callbacksQueue.OffsetCapacity(1);
Expand All @@ -138,18 +137,21 @@ void gpgs_callback_update()
return;
}

DM_MUTEX_SCOPED_LOCK(m_mutex);
dmArray<CallbackData> tmp;
{
DM_MUTEX_SCOPED_LOCK(m_mutex);
tmp.Swap(m_callbacksQueue);
}
Comment on lines +140 to +144
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1


for(uint32_t i = 0; i != m_callbacksQueue.Size(); ++i)
for(uint32_t i = 0; i != tmp.Size(); ++i)
{
CallbackData* data = &m_callbacksQueue[i];
CallbackData* data = &tmp[i];
gpgs_invoke_callback(data->msg, data->json);
if(data->json)
{
free(data->json);
data->json = 0;
}
}
m_callbacksQueue.SetSize(0);
}
#endif
82 changes: 40 additions & 42 deletions gpgs/src/gpgs_extension.cpp
Expand Up @@ -8,8 +8,7 @@
#if defined(DM_PLATFORM_ANDROID)

#include <string.h>

#include "gpgs_jni.h"
#include <dmsdk/dlib/android.h>
#include "gpgs_extension.h"
#include "private_gpgs_callback.h"
#include "com_defold_gpgs_GpgsJNI.h"
Expand Down Expand Up @@ -163,8 +162,8 @@ static char* luaL_checktable_string(lua_State *L, int numArg, const char* field,
// void method(char*)
static void CallVoidMethodChar(jobject instance, jmethodID method, const char* cstr)
{
ThreadAttacher attacher;
JNIEnv *env = attacher.env;
dmAndroid::ThreadAttacher threadAttacher;
JNIEnv* env = threadAttacher.GetEnv();
jstring jstr = env->NewStringUTF(cstr);
env->CallVoidMethod(instance, method, jstr);
env->DeleteLocalRef(jstr);
Expand All @@ -173,8 +172,8 @@ static void CallVoidMethodChar(jobject instance, jmethodID method, const char* c
// void method(char*, int)
static void CallVoidMethodCharInt(jobject instance, jmethodID method, const char* cstr, int i)
{
ThreadAttacher attacher;
JNIEnv *env = attacher.env;
dmAndroid::ThreadAttacher threadAttacher;
JNIEnv* env = threadAttacher.GetEnv();
jstring jstr = env->NewStringUTF(cstr);
env->CallVoidMethod(instance, method, jstr, i);
env->DeleteLocalRef(jstr);
Expand All @@ -183,8 +182,8 @@ static void CallVoidMethodCharInt(jobject instance, jmethodID method, const char
// void method(char*, int, int)
static void CallVoidMethodCharIntInt(jobject instance, jmethodID method, const char* cstr, int i1, int i2)
{
ThreadAttacher attacher;
JNIEnv *env = attacher.env;
dmAndroid::ThreadAttacher threadAttacher;
JNIEnv* env = threadAttacher.GetEnv();
jstring jstr = env->NewStringUTF(cstr);
env->CallVoidMethod(instance, method, jstr, i1, i2);
env->DeleteLocalRef(jstr);
Expand All @@ -193,8 +192,8 @@ static void CallVoidMethodCharIntInt(jobject instance, jmethodID method, const c
// void method(char*, int, int, int)
static void CallVoidMethodCharIntIntInt(jobject instance, jmethodID method, const char* cstr, int i1, int i2, int i3)
{
ThreadAttacher attacher;
JNIEnv *env = attacher.env;
dmAndroid::ThreadAttacher threadAttacher;
JNIEnv* env = threadAttacher.GetEnv();
jstring jstr = env->NewStringUTF(cstr);
env->CallVoidMethod(instance, method, jstr, i1, i2, i3);
env->DeleteLocalRef(jstr);
Expand All @@ -203,8 +202,8 @@ static void CallVoidMethodCharIntIntInt(jobject instance, jmethodID method, cons
// void method(char*, double)
static void CallVoidMethodCharDouble(jobject instance, jmethodID method, const char* cstr, double d)
{
ThreadAttacher attacher;
JNIEnv *env = attacher.env;
dmAndroid::ThreadAttacher threadAttacher;
JNIEnv* env = threadAttacher.GetEnv();
jstring jstr = env->NewStringUTF(cstr);
env->CallVoidMethod(instance, method, jstr, d);
env->DeleteLocalRef(jstr);
Expand All @@ -213,16 +212,16 @@ static void CallVoidMethodCharDouble(jobject instance, jmethodID method, const c
// void method(int)
static void CallVoidMethodInt(jobject instance, jmethodID method, int i)
{
ThreadAttacher attacher;
JNIEnv *env = attacher.env;
dmAndroid::ThreadAttacher threadAttacher;
JNIEnv* env = threadAttacher.GetEnv();
env->CallVoidMethod(instance, method, i);
}

// void method()
static int CallVoidMethod(jobject instance, jmethodID method)
{
ThreadAttacher attacher;
JNIEnv *env = attacher.env;
dmAndroid::ThreadAttacher threadAttacher;
JNIEnv* env = threadAttacher.GetEnv();
env->CallVoidMethod(instance, method);
return 0;
}
Expand All @@ -231,8 +230,8 @@ static int CallVoidMethod(jobject instance, jmethodID method)
static int CallStringMethod(lua_State* L, jobject instance, jmethodID method)
{
DM_LUA_STACK_CHECK(L, 1);
ThreadAttacher attacher;
JNIEnv *env = attacher.env;
dmAndroid::ThreadAttacher threadAttacher;
JNIEnv* env = threadAttacher.GetEnv();
jstring return_value = (jstring)env->CallObjectMethod(instance, method);
if (return_value)
{
Expand All @@ -252,8 +251,8 @@ static int CallStringMethod(lua_State* L, jobject instance, jmethodID method)
static int CallBooleanMethod(lua_State* L, jobject instance, jmethodID method)
{
DM_LUA_STACK_CHECK(L, 1);
ThreadAttacher attacher;
JNIEnv *env = attacher.env;
dmAndroid::ThreadAttacher threadAttacher;
JNIEnv* env = threadAttacher.GetEnv();
jboolean return_value = (jboolean)env->CallBooleanMethod(instance, method);
lua_pushboolean(L, JNI_TRUE == return_value);
return 1;
Expand All @@ -263,8 +262,8 @@ static int CallBooleanMethod(lua_State* L, jobject instance, jmethodID method)
static int CallIntMethod(lua_State* L, jobject instance, jmethodID method)
{
DM_LUA_STACK_CHECK(L, 1);
ThreadAttacher attacher;
JNIEnv *env = attacher.env;
dmAndroid::ThreadAttacher threadAttacher;
JNIEnv* env = threadAttacher.GetEnv();
int return_value = (int)env->CallIntMethod(instance, method);
lua_pushnumber(L, return_value);
return 1;
Expand Down Expand Up @@ -368,8 +367,8 @@ static int GpgsDisk_SnapshotDisplaySaves(lua_State* L)

DM_LUA_STACK_CHECK(L, 0);

ThreadAttacher attacher;
JNIEnv *env = attacher.env;
dmAndroid::ThreadAttacher threadAttacher;
JNIEnv* env = threadAttacher.GetEnv();

const char* popupTitleDefault = "Game Saves";
char* popupTitle = luaL_checkstringd(L, 1, popupTitleDefault);
Expand All @@ -393,8 +392,8 @@ static int GpgsDisk_SnapshotOpen(lua_State* L)

DM_LUA_STACK_CHECK(L, 0);

ThreadAttacher attacher;
JNIEnv *env = attacher.env;
dmAndroid::ThreadAttacher threadAttacher;
JNIEnv* env = threadAttacher.GetEnv();

const char* saveName = luaL_checkstring(L, 1);
bool createIfNotFound = luaL_checkboold(L, 2, false);
Expand All @@ -416,8 +415,8 @@ static int GpgsDisk_SnapshotCommitAndClose(lua_State* L)

DM_LUA_STACK_CHECK(L, 0);

ThreadAttacher attacher;
JNIEnv *env = attacher.env;
dmAndroid::ThreadAttacher threadAttacher;
JNIEnv* env = threadAttacher.GetEnv();

long playedTime = luaL_checktable_number(L, 1, "playedTime", -1);
long progressValue = luaL_checktable_number(L, 1, "progressValue", -1);
Expand All @@ -436,7 +435,7 @@ static int GpgsDisk_SnapshotCommitAndClose(lua_State* L)
env->SetByteArrayRegion(jcoverImage, 0, length, (jbyte*)coverImage);
}

env->CallVoidMethod(g_gpgs.m_GpgsJNI, g_gpgs_disk.m_commitAndCloseSnapshot, (jlong)playedTime, (jlong)progressValue, jdescription, jcoverImage);
env->CallVoidMethod(g_gpgs.m_GpgsJNI, g_gpgs_disk.m_commitAndCloseSnapshot, playedTime, progressValue, jdescription, jcoverImage);

if (jdescription)
{
Expand All @@ -453,8 +452,8 @@ static int GpgsDisk_SnapshotGetData(lua_State* L)
return 0;
}

ThreadAttacher attacher;
JNIEnv *env = attacher.env;
dmAndroid::ThreadAttacher threadAttacher;
JNIEnv* env = threadAttacher.GetEnv();

int lenght = 0;
jbyte* snapshot = NULL;
Expand Down Expand Up @@ -486,8 +485,8 @@ static int GpgsDisk_SnapshotSetData(lua_State* L)

DM_LUA_STACK_CHECK(L, 2);

ThreadAttacher attacher;
JNIEnv *env = attacher.env;
dmAndroid::ThreadAttacher threadAttacher;
JNIEnv* env = threadAttacher.GetEnv();

size_t bytes_lenght;
const char* bytes = luaL_checklstring(L, 1, &bytes_lenght);
Expand Down Expand Up @@ -548,8 +547,8 @@ static int GpgsDisk_SnapshotGetConflictingData(lua_State* L)
return 0;
}

ThreadAttacher attacher;
JNIEnv *env = attacher.env;
dmAndroid::ThreadAttacher threadAttacher;
JNIEnv* env = threadAttacher.GetEnv();

int lenght = 0;
jbyte* snapshot = NULL;
Expand Down Expand Up @@ -735,8 +734,8 @@ static int GpgsEvent_Get(lua_State* L)

static void OnActivityResult(void *env, void* activity, int32_t request_code, int32_t result_code, void* result)
{
ThreadAttacher attacher;
JNIEnv *_env = attacher.env;
dmAndroid::ThreadAttacher threadAttacher;
JNIEnv* _env = threadAttacher.GetEnv();

_env->CallVoidMethod(g_gpgs.m_GpgsJNI, g_gpgs.m_activityResult, request_code, result_code, result);
}
Expand Down Expand Up @@ -941,17 +940,16 @@ static void InitializeJNI(const char* client_id, bool request_server_auth_code,
{
CheckInitializationParams(client_id, request_server_auth_code > 0, request_id_token > 0);

ThreadAttacher attacher;
JNIEnv *env = attacher.env;
ClassLoader class_loader = ClassLoader(env);
jclass cls = class_loader.load("com.defold.gpgs.GpgsJNI");
dmAndroid::ThreadAttacher threadAttacher;
JNIEnv* env = threadAttacher.GetEnv();
jclass cls = dmAndroid::LoadClass(env, "com.defold.gpgs.GpgsJNI");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice to see these in action!


InitJNIMethods(env, cls);

jmethodID jni_constructor = env->GetMethodID(cls, "<init>", "(Landroid/app/Activity;ZZZLjava/lang/String;)V");
jstring java_client_id = env->NewStringUTF(client_id);

g_gpgs.m_GpgsJNI = env->NewGlobalRef(env->NewObject(cls, jni_constructor, dmGraphics::GetNativeAndroidActivity(),
g_gpgs.m_GpgsJNI = env->NewGlobalRef(env->NewObject(cls, jni_constructor, threadAttacher.GetActivity()->clazz,
g_gpgs_disk.is_using, request_server_auth_code, request_id_token, java_client_id));

env->DeleteLocalRef(java_client_id);
Expand Down
54 changes: 0 additions & 54 deletions gpgs/src/gpgs_jni.h

This file was deleted.