Remove extra header file, change to c test, change new/delete

pull/19358/head
Yunjia Wang 6 years ago
parent 491d4a8d93
commit a68e7bc461
  1. 4
      BUILD
  2. 76
      CMakeLists.txt
  3. 84
      Makefile
  4. 21
      build.yaml
  5. 12
      src/core/lib/iomgr/executor/mpmcqueue.cc
  6. 4
      src/core/lib/iomgr/executor/mpmcqueue.h
  7. 35
      test/core/iomgr/mpmcqueue_test.cc
  8. 34
      tools/run_tests/generated/sources_and_headers.json
  9. 48
      tools/run_tests/generated/tests.json

@ -782,6 +782,7 @@ grpc_cc_library(
"src/core/lib/iomgr/ev_windows.cc",
"src/core/lib/iomgr/exec_ctx.cc",
"src/core/lib/iomgr/executor.cc",
"src/core/lib/iomgr/executor/mpmcqueue.cc",
"src/core/lib/iomgr/fork_posix.cc",
"src/core/lib/iomgr/fork_windows.cc",
"src/core/lib/iomgr/gethostname_fallback.cc",
@ -837,7 +838,6 @@ grpc_cc_library(
"src/core/lib/iomgr/tcp_server_windows.cc",
"src/core/lib/iomgr/tcp_uv.cc",
"src/core/lib/iomgr/tcp_windows.cc",
"src/core/lib/iomgr/executor/mpmcqueue.cc",
"src/core/lib/iomgr/time_averaged_stats.cc",
"src/core/lib/iomgr/timer.cc",
"src/core/lib/iomgr/timer_custom.cc",
@ -940,6 +940,7 @@ grpc_cc_library(
"src/core/lib/iomgr/ev_posix.h",
"src/core/lib/iomgr/exec_ctx.h",
"src/core/lib/iomgr/executor.h",
"src/core/lib/iomgr/executor/mpmcqueue.h",
"src/core/lib/iomgr/gethostname.h",
"src/core/lib/iomgr/gevent_util.h",
"src/core/lib/iomgr/grpc_if_nametoindex.h",
@ -983,7 +984,6 @@ grpc_cc_library(
"src/core/lib/iomgr/tcp_server.h",
"src/core/lib/iomgr/tcp_server_utils_posix.h",
"src/core/lib/iomgr/tcp_windows.h",
"src/core/lib/iomgr/executor/mpmcqueue.h",
"src/core/lib/iomgr/time_averaged_stats.h",
"src/core/lib/iomgr/timer.h",
"src/core/lib/iomgr/timer_custom.h",

@ -378,6 +378,7 @@ add_dependencies(buildtests_c memory_usage_test)
endif()
add_dependencies(buildtests_c message_compress_test)
add_dependencies(buildtests_c minimal_stack_is_minimal_test)
add_dependencies(buildtests_c mpmcqueue_test)
add_dependencies(buildtests_c multiple_server_queues_test)
add_dependencies(buildtests_c murmur_hash_test)
add_dependencies(buildtests_c no_server_test)
@ -663,7 +664,6 @@ add_dependencies(buildtests_cxx memory_test)
add_dependencies(buildtests_cxx message_allocator_end2end_test)
add_dependencies(buildtests_cxx metrics_client)
add_dependencies(buildtests_cxx mock_test)
add_dependencies(buildtests_cxx mpmcqueue_test)
add_dependencies(buildtests_cxx nonblocking_test)
add_dependencies(buildtests_cxx noop-benchmark)
add_dependencies(buildtests_cxx optional_test)
@ -9364,6 +9364,40 @@ target_link_libraries(minimal_stack_is_minimal_test
endif (gRPC_BUILD_TESTS)
if (gRPC_BUILD_TESTS)
add_executable(mpmcqueue_test
test/core/iomgr/mpmcqueue_test.cc
)
target_include_directories(mpmcqueue_test
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include
PRIVATE ${_gRPC_SSL_INCLUDE_DIR}
PRIVATE ${_gRPC_PROTOBUF_INCLUDE_DIR}
PRIVATE ${_gRPC_ZLIB_INCLUDE_DIR}
PRIVATE ${_gRPC_BENCHMARK_INCLUDE_DIR}
PRIVATE ${_gRPC_CARES_INCLUDE_DIR}
PRIVATE ${_gRPC_GFLAGS_INCLUDE_DIR}
PRIVATE ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}
PRIVATE ${_gRPC_NANOPB_INCLUDE_DIR}
)
target_link_libraries(mpmcqueue_test
${_gRPC_ALLTARGETS_LIBRARIES}
grpc_test_util
grpc
gpr
)
# avoid dependency on libstdc++
if (_gRPC_CORE_NOSTDCXX_FLAGS)
set_target_properties(mpmcqueue_test PROPERTIES LINKER_LANGUAGE C)
target_compile_options(mpmcqueue_test PRIVATE $<$<COMPILE_LANGUAGE:CXX>:${_gRPC_CORE_NOSTDCXX_FLAGS}>)
endif()
endif (gRPC_BUILD_TESTS)
if (gRPC_BUILD_TESTS)
add_executable(multiple_server_queues_test
test/core/end2end/multiple_server_queues_test.cc
)
@ -15003,46 +15037,6 @@ target_link_libraries(mock_test
)
endif (gRPC_BUILD_TESTS)
if (gRPC_BUILD_TESTS)
add_executable(mpmcqueue_test
test/core/iomgr/mpmcqueue_test.cc
third_party/googletest/googletest/src/gtest-all.cc
third_party/googletest/googlemock/src/gmock-all.cc
)
target_include_directories(mpmcqueue_test
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include
PRIVATE ${_gRPC_SSL_INCLUDE_DIR}
PRIVATE ${_gRPC_PROTOBUF_INCLUDE_DIR}
PRIVATE ${_gRPC_ZLIB_INCLUDE_DIR}
PRIVATE ${_gRPC_BENCHMARK_INCLUDE_DIR}
PRIVATE ${_gRPC_CARES_INCLUDE_DIR}
PRIVATE ${_gRPC_GFLAGS_INCLUDE_DIR}
PRIVATE ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}
PRIVATE ${_gRPC_NANOPB_INCLUDE_DIR}
PRIVATE third_party/googletest/googletest/include
PRIVATE third_party/googletest/googletest
PRIVATE third_party/googletest/googlemock/include
PRIVATE third_party/googletest/googlemock
PRIVATE ${_gRPC_PROTO_GENS_DIR}
)
target_link_libraries(mpmcqueue_test
${_gRPC_PROTOBUF_LIBRARIES}
${_gRPC_ALLTARGETS_LIBRARIES}
grpc++_test_util
grpc_test_util
grpc++
grpc
gpr
${_gRPC_GFLAGS_LIBRARIES}
)
endif (gRPC_BUILD_TESTS)
if (gRPC_BUILD_TESTS)

@ -1092,6 +1092,7 @@ memory_usage_server: $(BINDIR)/$(CONFIG)/memory_usage_server
memory_usage_test: $(BINDIR)/$(CONFIG)/memory_usage_test
message_compress_test: $(BINDIR)/$(CONFIG)/message_compress_test
minimal_stack_is_minimal_test: $(BINDIR)/$(CONFIG)/minimal_stack_is_minimal_test
mpmcqueue_test: $(BINDIR)/$(CONFIG)/mpmcqueue_test
multiple_server_queues_test: $(BINDIR)/$(CONFIG)/multiple_server_queues_test
murmur_hash_test: $(BINDIR)/$(CONFIG)/murmur_hash_test
nanopb_fuzzer_response_test: $(BINDIR)/$(CONFIG)/nanopb_fuzzer_response_test
@ -1240,7 +1241,6 @@ memory_test: $(BINDIR)/$(CONFIG)/memory_test
message_allocator_end2end_test: $(BINDIR)/$(CONFIG)/message_allocator_end2end_test
metrics_client: $(BINDIR)/$(CONFIG)/metrics_client
mock_test: $(BINDIR)/$(CONFIG)/mock_test
mpmcqueue_test: $(BINDIR)/$(CONFIG)/mpmcqueue_test
nonblocking_test: $(BINDIR)/$(CONFIG)/nonblocking_test
noop-benchmark: $(BINDIR)/$(CONFIG)/noop-benchmark
optional_test: $(BINDIR)/$(CONFIG)/optional_test
@ -1516,6 +1516,7 @@ buildtests_c: privatelibs_c \
$(BINDIR)/$(CONFIG)/memory_usage_test \
$(BINDIR)/$(CONFIG)/message_compress_test \
$(BINDIR)/$(CONFIG)/minimal_stack_is_minimal_test \
$(BINDIR)/$(CONFIG)/mpmcqueue_test \
$(BINDIR)/$(CONFIG)/multiple_server_queues_test \
$(BINDIR)/$(CONFIG)/murmur_hash_test \
$(BINDIR)/$(CONFIG)/no_server_test \
@ -1707,7 +1708,6 @@ buildtests_cxx: privatelibs_cxx \
$(BINDIR)/$(CONFIG)/message_allocator_end2end_test \
$(BINDIR)/$(CONFIG)/metrics_client \
$(BINDIR)/$(CONFIG)/mock_test \
$(BINDIR)/$(CONFIG)/mpmcqueue_test \
$(BINDIR)/$(CONFIG)/nonblocking_test \
$(BINDIR)/$(CONFIG)/noop-benchmark \
$(BINDIR)/$(CONFIG)/optional_test \
@ -1871,7 +1871,6 @@ buildtests_cxx: privatelibs_cxx \
$(BINDIR)/$(CONFIG)/message_allocator_end2end_test \
$(BINDIR)/$(CONFIG)/metrics_client \
$(BINDIR)/$(CONFIG)/mock_test \
$(BINDIR)/$(CONFIG)/mpmcqueue_test \
$(BINDIR)/$(CONFIG)/nonblocking_test \
$(BINDIR)/$(CONFIG)/noop-benchmark \
$(BINDIR)/$(CONFIG)/optional_test \
@ -2112,6 +2111,8 @@ test_c: buildtests_c
$(Q) $(BINDIR)/$(CONFIG)/message_compress_test || ( echo test message_compress_test failed ; exit 1 )
$(E) "[RUN] Testing minimal_stack_is_minimal_test"
$(Q) $(BINDIR)/$(CONFIG)/minimal_stack_is_minimal_test || ( echo test minimal_stack_is_minimal_test failed ; exit 1 )
$(E) "[RUN] Testing mpmcqueue_test"
$(Q) $(BINDIR)/$(CONFIG)/mpmcqueue_test || ( echo test mpmcqueue_test failed ; exit 1 )
$(E) "[RUN] Testing multiple_server_queues_test"
$(Q) $(BINDIR)/$(CONFIG)/multiple_server_queues_test || ( echo test multiple_server_queues_test failed ; exit 1 )
$(E) "[RUN] Testing murmur_hash_test"
@ -2374,8 +2375,6 @@ test_cxx: buildtests_cxx
$(Q) $(BINDIR)/$(CONFIG)/message_allocator_end2end_test || ( echo test message_allocator_end2end_test failed ; exit 1 )
$(E) "[RUN] Testing mock_test"
$(Q) $(BINDIR)/$(CONFIG)/mock_test || ( echo test mock_test failed ; exit 1 )
$(E) "[RUN] Testing mpmcqueue_test"
$(Q) $(BINDIR)/$(CONFIG)/mpmcqueue_test || ( echo test mpmcqueue_test failed ; exit 1 )
$(E) "[RUN] Testing nonblocking_test"
$(Q) $(BINDIR)/$(CONFIG)/nonblocking_test || ( echo test nonblocking_test failed ; exit 1 )
$(E) "[RUN] Testing noop-benchmark"
@ -12131,6 +12130,38 @@ endif
endif
MPMCQUEUE_TEST_SRC = \
test/core/iomgr/mpmcqueue_test.cc \
MPMCQUEUE_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(MPMCQUEUE_TEST_SRC))))
ifeq ($(NO_SECURE),true)
# You can't build secure targets if you don't have OpenSSL.
$(BINDIR)/$(CONFIG)/mpmcqueue_test: openssl_dep_error
else
$(BINDIR)/$(CONFIG)/mpmcqueue_test: $(MPMCQUEUE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a
$(E) "[LD] Linking $@"
$(Q) mkdir -p `dirname $@`
$(Q) $(LD) $(LDFLAGS) $(MPMCQUEUE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/mpmcqueue_test
endif
$(OBJDIR)/$(CONFIG)/test/core/iomgr/mpmcqueue_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a
deps_mpmcqueue_test: $(MPMCQUEUE_TEST_OBJS:.o=.dep)
ifneq ($(NO_SECURE),true)
ifneq ($(NO_DEPS),true)
-include $(MPMCQUEUE_TEST_OBJS:.o=.dep)
endif
endif
MULTIPLE_SERVER_QUEUES_TEST_SRC = \
test/core/end2end/multiple_server_queues_test.cc \
@ -17973,49 +18004,6 @@ endif
endif
MPMCQUEUE_TEST_SRC = \
test/core/iomgr/mpmcqueue_test.cc \
MPMCQUEUE_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(MPMCQUEUE_TEST_SRC))))
ifeq ($(NO_SECURE),true)
# You can't build secure targets if you don't have OpenSSL.
$(BINDIR)/$(CONFIG)/mpmcqueue_test: openssl_dep_error
else
ifeq ($(NO_PROTOBUF),true)
# You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+.
$(BINDIR)/$(CONFIG)/mpmcqueue_test: protobuf_dep_error
else
$(BINDIR)/$(CONFIG)/mpmcqueue_test: $(PROTOBUF_DEP) $(MPMCQUEUE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a
$(E) "[LD] Linking $@"
$(Q) mkdir -p `dirname $@`
$(Q) $(LDXX) $(LDFLAGS) $(MPMCQUEUE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/mpmcqueue_test
endif
endif
$(OBJDIR)/$(CONFIG)/test/core/iomgr/mpmcqueue_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a
deps_mpmcqueue_test: $(MPMCQUEUE_TEST_OBJS:.o=.dep)
ifneq ($(NO_SECURE),true)
ifneq ($(NO_DEPS),true)
-include $(MPMCQUEUE_TEST_OBJS:.o=.dep)
endif
endif
NONBLOCKING_TEST_SRC = \
test/cpp/end2end/nonblocking_test.cc \

@ -3268,6 +3268,16 @@ targets:
- grpc
- gpr
uses_polling: false
- name: mpmcqueue_test
build: test
language: c
src:
- test/core/iomgr/mpmcqueue_test.cc
deps:
- grpc_test_util
- grpc
- gpr
uses_polling: false
- name: multiple_server_queues_test
build: test
language: c
@ -5230,17 +5240,6 @@ targets:
- grpc++
- grpc
- gpr
- name: mpmcqueue_test
build: test
language: c++
src:
- test/core/iomgr/mpmcqueue_test.cc
deps:
- grpc++_test_util
- grpc_test_util
- grpc++
- grpc
- gpr
- name: nonblocking_test
gtest: true
build: test

@ -20,18 +20,6 @@
#include "src/core/lib/iomgr/executor/mpmcqueue.h"
#include <grpc/support/alloc.h>
#include <grpc/support/cpu.h>
#include <grpc/support/log.h>
#include <grpc/support/sync.h>
#include <grpc/support/time.h>
#include <inttypes.h>
#include <string.h>
#include "src/core/lib/debug/stats.h"
#include "src/core/lib/gprpp/memory.h"
#include "src/core/lib/gprpp/sync.h"
namespace grpc_core {
DebugOnlyTraceFlag thread_pool(false, "thread_pool_trace");

@ -21,9 +21,6 @@
#include <grpc/support/port_platform.h>
#include <grpc/support/alloc.h>
#include <grpc/support/time.h>
#include "src/core/lib/debug/stats.h"
#include "src/core/lib/gprpp/abstract.h"
#include "src/core/lib/gprpp/atomic.h"
@ -80,6 +77,7 @@ class InfLenFIFOQueue : public MPMCQueueInterface {
// For Internal Use Only.
// Removes the oldest element from the queue and returns it. This routine
// will NOT check whether queue is empty, and it will NOT acquire mutex.
// Caller should do the check and acquire mutex before callling.
void* PopFront();
struct Node {

@ -19,10 +19,7 @@
#include "src/core/lib/iomgr/executor/mpmcqueue.h"
#include <grpc/grpc.h>
#include <grpc/support/alloc.h>
#include <grpc/support/log.h>
#include "src/core/lib/gpr/useful.h"
#include "src/core/lib/gprpp/thd.h"
#include "test/core/util/test_config.h"
@ -51,9 +48,9 @@ class ProducerThread {
~ProducerThread() {
for (int i = 0; i < num_items_; ++i) {
GPR_ASSERT(items_[i]->done);
delete items_[i];
grpc_core::Delete(items_[i]);
}
delete[] items_;
gpr_free(items_);
}
void Start() { thd_.Start(); }
@ -61,9 +58,9 @@ class ProducerThread {
private:
void Run() {
items_ = new WorkItem*[num_items_];
items_ = static_cast<WorkItem**>(gpr_zalloc(num_items_));
for (int i = 0; i < num_items_; ++i) {
items_[i] = new WorkItem(start_index_ + i);
items_[i] = grpc_core::New<WorkItem>(start_index_ + i);
queue_->Put(items_[i]);
}
}
@ -105,9 +102,10 @@ static void test_get_empty(void) {
thds[i].Start();
}
WorkItem** items = new WorkItem*[THREAD_LARGE_ITERATION];
WorkItem** items =
static_cast<WorkItem**>(gpr_zalloc(THREAD_SMALL_ITERATION));
for (int i = 0; i < THREAD_LARGE_ITERATION; ++i) {
items[i] = new WorkItem(i);
items[i] = grpc_core::New<WorkItem>(i);
queue.Put(static_cast<void*>(items[i]));
}
@ -121,9 +119,9 @@ static void test_get_empty(void) {
gpr_log(GPR_DEBUG, "Checking and Cleaning Up...");
for (int i = 0; i < THREAD_LARGE_ITERATION; ++i) {
GPR_ASSERT(items[i]->done);
delete items[i];
grpc_core::Delete(items[i]);
}
delete[] items;
gpr_free(items);
gpr_log(GPR_DEBUG, "Done.");
}
@ -131,13 +129,13 @@ static void test_FIFO(void) {
gpr_log(GPR_INFO, "test_FIFO");
grpc_core::InfLenFIFOQueue large_queue;
for (int i = 0; i < THREAD_LARGE_ITERATION; ++i) {
large_queue.Put(static_cast<void*>(new WorkItem(i)));
large_queue.Put(static_cast<void*>(grpc_core::New<WorkItem>(i)));
}
GPR_ASSERT(large_queue.count() == THREAD_LARGE_ITERATION);
for (int i = 0; i < THREAD_LARGE_ITERATION; ++i) {
WorkItem* item = static_cast<WorkItem*>(large_queue.Get());
GPR_ASSERT(i == item->index);
delete item;
grpc_core::Delete(item);
}
}
@ -146,13 +144,14 @@ static void test_many_thread(void) {
const int num_work_thd = 10;
const int num_get_thd = 20;
grpc_core::InfLenFIFOQueue queue;
ProducerThread** work_thds = new ProducerThread*[num_work_thd];
ProducerThread** work_thds =
static_cast<ProducerThread**>(gpr_zalloc(num_work_thd));
grpc_core::Thread get_thds[num_get_thd];
gpr_log(GPR_DEBUG, "Fork ProducerThread...");
for (int i = 0; i < num_work_thd; ++i) {
work_thds[i] = new ProducerThread(&queue, i * THREAD_LARGE_ITERATION,
THREAD_LARGE_ITERATION);
work_thds[i] = grpc_core::New<ProducerThread>(
&queue, i * THREAD_LARGE_ITERATION, THREAD_LARGE_ITERATION);
work_thds[i]->Start();
}
gpr_log(GPR_DEBUG, "ProducerThread Started.");
@ -178,9 +177,9 @@ static void test_many_thread(void) {
gpr_log(GPR_DEBUG, "All Getter Thread Terminated.");
gpr_log(GPR_DEBUG, "Checking WorkItems and Cleaning Up...");
for (int i = 0; i < num_work_thd; ++i) {
delete work_thds[i];
grpc_core::Delete(work_thds[i]);
}
delete[] work_thds;
gpr_free(work_thds);
gpr_log(GPR_DEBUG, "Done.");
}

@ -1626,6 +1626,22 @@
"third_party": false,
"type": "target"
},
{
"deps": [
"gpr",
"grpc",
"grpc_test_util"
],
"headers": [],
"is_filegroup": false,
"language": "c",
"name": "mpmcqueue_test",
"src": [
"test/core/iomgr/mpmcqueue_test.cc"
],
"third_party": false,
"type": "target"
},
{
"deps": [
"gpr",
@ -4295,24 +4311,6 @@
"third_party": false,
"type": "target"
},
{
"deps": [
"gpr",
"grpc",
"grpc++",
"grpc++_test_util",
"grpc_test_util"
],
"headers": [],
"is_filegroup": false,
"language": "c++",
"name": "mpmcqueue_test",
"src": [
"test/core/iomgr/mpmcqueue_test.cc"
],
"third_party": false,
"type": "target"
},
{
"deps": [
"gpr",

@ -1959,6 +1959,30 @@
],
"uses_polling": false
},
{
"args": [],
"benchmark": false,
"ci_platforms": [
"linux",
"mac",
"posix",
"windows"
],
"cpu_cost": 1.0,
"exclude_configs": [],
"exclude_iomgrs": [],
"flaky": false,
"gtest": false,
"language": "c",
"name": "mpmcqueue_test",
"platforms": [
"linux",
"mac",
"posix",
"windows"
],
"uses_polling": false
},
{
"args": [],
"benchmark": false,
@ -4997,30 +5021,6 @@
],
"uses_polling": true
},
{
"args": [],
"benchmark": false,
"ci_platforms": [
"linux",
"mac",
"posix",
"windows"
],
"cpu_cost": 1.0,
"exclude_configs": [],
"exclude_iomgrs": [],
"flaky": false,
"gtest": false,
"language": "c++",
"name": "mpmcqueue_test",
"platforms": [
"linux",
"mac",
"posix",
"windows"
],
"uses_polling": true
},
{
"args": [],
"benchmark": false,

Loading…
Cancel
Save