mirror of
https://github.com/status-im/react-native.git
synced 2025-02-28 00:50:43 +00:00
WebWorkers: Add c++ API for working with MessageQueueThread
Summary: public Adds a fbjni API similar to JNativeRunnable so that you can post ##std::function<void()>## to MessageQueueThreads. Reviewed By: lexs Differential Revision: D2779094 fb-gh-sync-id: 8f873fc93fb6b817268e9422c0b6f85c3e453676
This commit is contained in:
parent
5fb1966509
commit
dd60964736
@ -29,6 +29,7 @@ public class MessageQueueThreadRegistry {
|
||||
/**
|
||||
* @return the MessageQueueThread that owns the current Thread.
|
||||
*/
|
||||
@DoNotStrip
|
||||
public static MessageQueueThread myMessageQueueThread() {
|
||||
return Assertions.assertNotNull(
|
||||
sMyMessageQueueThread.get(),
|
||||
|
32
ReactAndroid/src/main/jni/react/jni/JMessageQueueThread.cpp
Normal file
32
ReactAndroid/src/main/jni/react/jni/JMessageQueueThread.cpp
Normal file
@ -0,0 +1,32 @@
|
||||
// Copyright 2004-present Facebook. All Rights Reserved.
|
||||
|
||||
#include "JMessageQueueThread.h"
|
||||
|
||||
#include <fb/log.h>
|
||||
#include <folly/Memory.h>
|
||||
#include <jni/fbjni.h>
|
||||
|
||||
#include "JNativeRunnable.h"
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
JMessageQueueThread::JMessageQueueThread(alias_ref<MessageQueueThread::javaobject> jobj) :
|
||||
m_jobj(make_global(jobj)) {
|
||||
}
|
||||
|
||||
void JMessageQueueThread::runOnQueue(std::function<void()>&& runnable) {
|
||||
static auto method = MessageQueueThread::javaClassStatic()->
|
||||
getMethod<void(Runnable::javaobject)>("runOnQueue");
|
||||
method(m_jobj, JNativeRunnable::newObjectCxxArgs(runnable).get());
|
||||
}
|
||||
|
||||
/* static */
|
||||
std::unique_ptr<JMessageQueueThread> JMessageQueueThread::currentMessageQueueThread() {
|
||||
static auto method = MessageQueueThreadRegistry::javaClassStatic()->
|
||||
getStaticMethod<MessageQueueThread::javaobject()>("myMessageQueueThread");
|
||||
return folly::make_unique<JMessageQueueThread>(method(MessageQueueThreadRegistry::javaClassStatic()));
|
||||
}
|
||||
|
||||
} }
|
||||
|
41
ReactAndroid/src/main/jni/react/jni/JMessageQueueThread.h
Normal file
41
ReactAndroid/src/main/jni/react/jni/JMessageQueueThread.h
Normal file
@ -0,0 +1,41 @@
|
||||
// Copyright 2004-present Facebook. All Rights Reserved.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <functional>
|
||||
|
||||
#include <jni/fbjni.h>
|
||||
|
||||
using namespace facebook::jni;
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
class MessageQueueThread : public jni::JavaClass<MessageQueueThread> {
|
||||
public:
|
||||
static constexpr auto kJavaDescriptor = "Lcom/facebook/react/bridge/queue/MessageQueueThread;";
|
||||
};
|
||||
|
||||
class JMessageQueueThread {
|
||||
public:
|
||||
JMessageQueueThread(alias_ref<MessageQueueThread::javaobject> jobj);
|
||||
|
||||
/**
|
||||
* Enqueues the given function to run on this MessageQueueThread.
|
||||
*/
|
||||
void runOnQueue(std::function<void()>&& runnable);
|
||||
|
||||
/**
|
||||
* Returns the current MessageQueueThread that owns this thread.
|
||||
*/
|
||||
static std::unique_ptr<JMessageQueueThread> currentMessageQueueThread();
|
||||
private:
|
||||
global_ref<MessageQueueThread::javaobject> m_jobj;
|
||||
};
|
||||
|
||||
class MessageQueueThreadRegistry : public jni::JavaClass<MessageQueueThreadRegistry> {
|
||||
public:
|
||||
static constexpr auto kJavaDescriptor = "Lcom/facebook/react/bridge/queue/MessageQueueThreadRegistry;";
|
||||
};
|
||||
|
||||
} }
|
Loading…
x
Reference in New Issue
Block a user