mirror of
https://github.com/status-im/react-native.git
synced 2025-02-28 17:10:50 +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.
|
* @return the MessageQueueThread that owns the current Thread.
|
||||||
*/
|
*/
|
||||||
|
@DoNotStrip
|
||||||
public static MessageQueueThread myMessageQueueThread() {
|
public static MessageQueueThread myMessageQueueThread() {
|
||||||
return Assertions.assertNotNull(
|
return Assertions.assertNotNull(
|
||||||
sMyMessageQueueThread.get(),
|
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