Skip to content

Commit

Permalink
WebWorkers: New c++ interface for NativeRunnable
Browse files Browse the repository at this point in the history
Reviewed By: mhorowitz, lexs

Differential Revision: D2779083

fb-gh-sync-id: dc36b71504b4e74b1671bb48f72d001c9c87721b
  • Loading branch information
astreet authored and facebook-github-bot-3 committed Jan 6, 2016
1 parent 7d70b86 commit cf350a6
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
Original file line number Diff line number Diff line change
@@ -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();
}
44 changes: 44 additions & 0 deletions ReactAndroid/src/main/jni/react/jni/JNativeRunnable.h
Original file line number Diff line number Diff line change
@@ -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;
};

} }
4 changes: 3 additions & 1 deletion ReactAndroid/src/main/jni/react/jni/OnLoad.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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),
Expand Down Expand Up @@ -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({
Expand Down

0 comments on commit cf350a6

Please sign in to comment.