WebWorkers: New c++ interface for NativeRunnable

Reviewed By: mhorowitz, lexs

Differential Revision: D2779083

fb-gh-sync-id: dc36b71504b4e74b1671bb48f72d001c9c87721b
This commit is contained in:
Andy Street
2016-01-06 04:16:44 -08:00
committed by facebook-github-bot-3
parent 7d70b86a7b
commit cf350a69de
4 changed files with 80 additions and 8 deletions

View File

@@ -9,20 +9,19 @@
package com.facebook.react.bridge.queue;
import com.facebook.jni.Countable;
import com.facebook.jni.HybridData;
import com.facebook.proguard.annotations.DoNotStrip;
/**
* A Runnable that has a native run implementation.
*/
@DoNotStrip
public class NativeRunnable extends Countable implements Runnable {
public class NativeRunnable implements Runnable {
/**
* Should only be instantiated via native (JNI) code.
*/
@DoNotStrip
private NativeRunnable() {
private final HybridData mHybridData;
private NativeRunnable(HybridData hybridData) {
mHybridData = hybridData;
}
public native void run();

View File

@@ -0,0 +1,27 @@
/**
* Copyright (c) 2015-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
package com.facebook.react.bridge.queue;
import com.facebook.jni.Countable;
import com.facebook.jni.HybridData;
import com.facebook.proguard.annotations.DoNotStrip;
/**
* A Runnable that has a native run implementation.
*/
@DoNotStrip
public class NativeRunnableDeprecated extends Countable implements Runnable {
@DoNotStrip
private NativeRunnableDeprecated() {
}
public native void run();
}

View File

@@ -0,0 +1,44 @@
// Copyright 2004-present Facebook. All Rights Reserved.
#pragma once
#include <functional>
#include <jni.h>
using namespace facebook::jni;
namespace facebook {
namespace react {
class Runnable : public JavaClass<Runnable> {
public:
static constexpr auto kJavaDescriptor = "Ljava/lang/Runnable;";
};
/**
* The c++ interface for the Java NativeRunnable class
*/
class JNativeRunnable : public HybridClass<JNativeRunnable, Runnable> {
public:
static auto constexpr kJavaDescriptor = "Lcom/facebook/react/bridge/queue/NativeRunnable;";
void run() {
m_runnable();
}
static void registerNatives() {
javaClassStatic()->registerNatives({
makeNativeMethod("run", JNativeRunnable::run),
});
}
private:
friend HybridBase;
JNativeRunnable(std::function<void()> runnable)
: m_runnable(std::move(runnable)) {}
std::function<void()> m_runnable;
};
} }

View File

@@ -13,6 +13,7 @@
#include <react/Bridge.h>
#include <react/Executor.h>
#include <react/JSCExecutor.h>
#include "JNativeRunnable.h"
#include "JSLoader.h"
#include "ReadableNativeArray.h"
#include "ProxyExecutor.h"
@@ -780,6 +781,7 @@ extern "C" JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) {
NativeArray::registerNatives();
ReadableNativeArray::registerNatives();
WritableNativeArray::registerNatives();
JNativeRunnable::registerNatives();
registerNatives("com/facebook/react/bridge/NativeMap", {
makeNativeMethod("initialize", map::initialize),
@@ -861,7 +863,7 @@ extern "C" JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) {
});
jclass nativeRunnableClass = env->FindClass("com/facebook/react/bridge/queue/NativeRunnable");
jclass nativeRunnableClass = env->FindClass("com/facebook/react/bridge/queue/NativeRunnableDeprecated");
runnable::gNativeRunnableClass = (jclass)env->NewGlobalRef(nativeRunnableClass);
runnable::gNativeRunnableCtor = env->GetMethodID(nativeRunnableClass, "<init>", "()V");
wrap_alias(nativeRunnableClass)->registerNatives({