Beatmup
callback_task.h
Go to the documentation of this file.
1 /*
2  Beatmup image and signal processing library
3  Copyright (C) 2020, lnstadrum
4 
5  This program is free software: you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published by
7  the Free Software Foundation, either version 3 of the License, or
8  (at your option) any later version.
9 
10  This program is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU General Public License for more details.
14 
15  You should have received a copy of the GNU General Public License
16  along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18 
19 #pragma once
20 
21 #include <jni.h>
22 #include <core/parallelism.h>
23 
24 namespace Beatmup {
25  /**
26  Task calling method of a Java object.
27  */
28  class CallbackTask : public AbstractTask {
29  private:
30  JavaVM *jvm;
31  jmethodID callbackMethodId;
33 
34  bool process(TaskThread& thread);
35 
38  }
39 
40  inline ThreadIndex getMaxThreads() const {
41  return 1;
42  }
43 
44  public:
45  static const char* JAVA_CLASS_NAME; //!< callback object java class name
46  static const char* JAVA_METHOD_NAME; //!< called method name
47 
48  CallbackTask(JNIEnv* jenv);
49 
50  ~CallbackTask();
51 
52  /**
53  Sets the object to be called.
54  The task calls a void method without parameters named JAVA_METHOD_NAME of a JAVA_CLASS_NAME class instance.
55  The object is protected from accidental garbage collection by a global reference until the task instance is destroyed.
56  \param jenv Java environment instance
57  \param obj The instance to be called
58  */
59  void setCallbackObject(JNIEnv* jenv, jobject obj);
60  };
61 }
Task: an operation that can be executed by multiple threads in parallel.
Definition: parallelism.h:90
TaskDeviceRequirement
Specifies which device (CPU and/or GPU) is used to run the task.
Definition: parallelism.h:95
@ CPU_ONLY
this task does not use GPU
Task calling method of a Java object.
Definition: callback_task.h:28
ThreadIndex getMaxThreads() const
Gives the upper limint on the number of threads the task may be performed by.
Definition: callback_task.h:40
static const char * JAVA_METHOD_NAME
called method name
Definition: callback_task.h:46
jmethodID callbackMethodId
Definition: callback_task.h:31
TaskDeviceRequirement getUsedDevices() const
Communicates devices (CPU and/or GPU) the task is run on.
Definition: callback_task.h:36
CallbackTask(JNIEnv *jenv)
static const char * JAVA_CLASS_NAME
callback object java class name
Definition: callback_task.h:45
bool process(TaskThread &thread)
Executes the task on CPU within a given thread.
void setCallbackObject(JNIEnv *jenv, jobject obj)
Sets the object to be called.
Thread executing tasks.
Definition: parallelism.h:154
unsigned char ThreadIndex
number of threads / thread index
Definition: parallelism.h:68
JNIEnv * jenv
JNIEnv jobject