summaryrefslogtreecommitdiff
path: root/chromium/gin
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/gin')
-rw-r--r--chromium/gin/array_buffer.cc5
-rw-r--r--chromium/gin/converter.h4
-rw-r--r--chromium/gin/data_object_builder.h2
-rw-r--r--chromium/gin/data_object_builder_unittest.cc1
-rw-r--r--chromium/gin/function_template.h2
-rw-r--r--chromium/gin/handle.h2
-rw-r--r--chromium/gin/per_context_data.cc3
-rw-r--r--chromium/gin/public/v8_platform.h3
-rw-r--r--chromium/gin/shell/gin_main.cc1
-rw-r--r--chromium/gin/v8_isolate_memory_dump_provider.cc1
-rw-r--r--chromium/gin/v8_platform.cc73
-rw-r--r--chromium/gin/v8_platform_unittest.cc25
12 files changed, 112 insertions, 10 deletions
diff --git a/chromium/gin/array_buffer.cc b/chromium/gin/array_buffer.cc
index 891a2e316f6..124c2f72a5c 100644
--- a/chromium/gin/array_buffer.cc
+++ b/chromium/gin/array_buffer.cc
@@ -151,10 +151,7 @@ void ArrayBuffer::Private::SecondWeakCallback(
// ArrayBuffer ----------------------------------------------------------------
-ArrayBuffer::ArrayBuffer()
- : bytes_(0),
- num_bytes_(0) {
-}
+ArrayBuffer::ArrayBuffer() : bytes_(nullptr), num_bytes_(0) {}
ArrayBuffer::ArrayBuffer(v8::Isolate* isolate,
v8::Local<v8::ArrayBuffer> array) {
diff --git a/chromium/gin/converter.h b/chromium/gin/converter.h
index 27b4d0acd01..9e9db93e347 100644
--- a/chromium/gin/converter.h
+++ b/chromium/gin/converter.h
@@ -7,11 +7,13 @@
#include <stdint.h>
+#include <ostream>
#include <string>
#include <type_traits>
#include <vector>
-#include "base/logging.h"
+#include "base/check.h"
+#include "base/notreached.h"
#include "base/strings/string16.h"
#include "base/strings/string_piece.h"
#include "gin/gin_export.h"
diff --git a/chromium/gin/data_object_builder.h b/chromium/gin/data_object_builder.h
index 7e7f7c97cd5..a85ff584fc8 100644
--- a/chromium/gin/data_object_builder.h
+++ b/chromium/gin/data_object_builder.h
@@ -7,7 +7,7 @@
#include <utility>
-#include "base/logging.h"
+#include "base/check.h"
#include "base/macros.h"
#include "base/strings/string_piece.h"
#include "gin/converter.h"
diff --git a/chromium/gin/data_object_builder_unittest.cc b/chromium/gin/data_object_builder_unittest.cc
index 758b1191c93..74762741edc 100644
--- a/chromium/gin/data_object_builder_unittest.cc
+++ b/chromium/gin/data_object_builder_unittest.cc
@@ -5,6 +5,7 @@
#include "gin/data_object_builder.h"
#include "base/bind.h"
+#include "base/logging.h"
#include "gin/dictionary.h"
#include "gin/public/isolate_holder.h"
#include "gin/test/v8_test.h"
diff --git a/chromium/gin/function_template.h b/chromium/gin/function_template.h
index 8c641d934fd..3f6a1ddfead 100644
--- a/chromium/gin/function_template.h
+++ b/chromium/gin/function_template.h
@@ -9,7 +9,7 @@
#include <utility>
#include "base/callback.h"
-#include "base/logging.h"
+#include "base/check.h"
#include "base/macros.h"
#include "base/strings/strcat.h"
#include "gin/arguments.h"
diff --git a/chromium/gin/handle.h b/chromium/gin/handle.h
index 938e00f8ae1..8a27f91e002 100644
--- a/chromium/gin/handle.h
+++ b/chromium/gin/handle.h
@@ -16,7 +16,7 @@ namespace gin {
template<typename T>
class Handle {
public:
- Handle() : object_(NULL) {}
+ Handle() : object_(nullptr) {}
Handle(v8::Local<v8::Value> wrapper, T* object)
: wrapper_(wrapper),
diff --git a/chromium/gin/per_context_data.cc b/chromium/gin/per_context_data.cc
index c4e83e5495e..6c6eda507e4 100644
--- a/chromium/gin/per_context_data.cc
+++ b/chromium/gin/per_context_data.cc
@@ -11,8 +11,7 @@ namespace gin {
PerContextData::PerContextData(ContextHolder* context_holder,
v8::Local<v8::Context> context)
- : context_holder_(context_holder),
- runner_(NULL) {
+ : context_holder_(context_holder), runner_(nullptr) {
context->SetAlignedPointerInEmbedderData(
kPerContextDataStartIndex + kEmbedderNativeGin, this);
}
diff --git a/chromium/gin/public/v8_platform.h b/chromium/gin/public/v8_platform.h
index 8a3d30358e4..da2aeb2f2da 100644
--- a/chromium/gin/public/v8_platform.h
+++ b/chromium/gin/public/v8_platform.h
@@ -34,6 +34,9 @@ class GIN_EXPORT V8Platform : public v8::Platform {
std::unique_ptr<v8::Task> task) override;
void CallDelayedOnWorkerThread(std::unique_ptr<v8::Task> task,
double delay_in_seconds) override;
+ std::unique_ptr<v8::JobHandle> PostJob(
+ v8::TaskPriority priority,
+ std::unique_ptr<v8::JobTask> job_task) override;
bool IdleTasksEnabled(v8::Isolate* isolate) override;
double MonotonicallyIncreasingTime() override;
double CurrentClockTimeMillis() override;
diff --git a/chromium/gin/shell/gin_main.cc b/chromium/gin/shell/gin_main.cc
index 1b9e5aa8425..cdab5740ef3 100644
--- a/chromium/gin/shell/gin_main.cc
+++ b/chromium/gin/shell/gin_main.cc
@@ -9,6 +9,7 @@
#include "base/files/file_util.h"
#include "base/i18n/icu_util.h"
#include "base/location.h"
+#include "base/logging.h"
#include "base/macros.h"
#include "base/memory/ptr_util.h"
#include "base/run_loop.h"
diff --git a/chromium/gin/v8_isolate_memory_dump_provider.cc b/chromium/gin/v8_isolate_memory_dump_provider.cc
index 010bf88c6fc..e80b8d4173b 100644
--- a/chromium/gin/v8_isolate_memory_dump_provider.cc
+++ b/chromium/gin/v8_isolate_memory_dump_provider.cc
@@ -7,6 +7,7 @@
#include <inttypes.h>
#include <stddef.h>
+#include "base/logging.h"
#include "base/strings/stringprintf.h"
#include "base/trace_event/memory_dump_manager.h"
#include "base/trace_event/process_memory_dump.h"
diff --git a/chromium/gin/v8_platform.cc b/chromium/gin/v8_platform.cc
index a81289baf57..bf6a1c9a1ef 100644
--- a/chromium/gin/v8_platform.cc
+++ b/chromium/gin/v8_platform.cc
@@ -17,6 +17,7 @@
#include "base/location.h"
#include "base/rand_util.h"
#include "base/system/sys_info.h"
+#include "base/task/post_job.h"
#include "base/task/post_task.h"
#include "base/task/task_traits.h"
#include "base/task/thread_pool/thread_pool_instance.h"
@@ -269,6 +270,47 @@ base::LazyInstance<PageAllocator>::Leaky g_page_allocator =
#endif // BUILDFLAG(USE_PARTITION_ALLOC)
+class JobDelegateImpl : public v8::JobDelegate {
+ public:
+ explicit JobDelegateImpl(base::JobDelegate* delegate) : delegate_(delegate) {}
+ JobDelegateImpl() = default;
+
+ JobDelegateImpl(const JobDelegateImpl&) = delete;
+ JobDelegateImpl& operator=(const JobDelegateImpl&) = delete;
+
+ // v8::JobDelegate:
+ bool ShouldYield() override { return delegate_->ShouldYield(); }
+ void NotifyConcurrencyIncrease() override {
+ delegate_->NotifyConcurrencyIncrease();
+ }
+
+ private:
+ base::JobDelegate* delegate_;
+};
+
+class JobHandleImpl : public v8::JobHandle {
+ public:
+ JobHandleImpl(base::JobHandle handle, std::unique_ptr<v8::JobTask> job_task)
+ : handle_(std::move(handle)), job_task_(std::move(job_task)) {}
+ ~JobHandleImpl() override = default;
+
+ JobHandleImpl(const JobHandleImpl&) = delete;
+ JobHandleImpl& operator=(const JobHandleImpl&) = delete;
+
+ // v8::JobHandle:
+ void NotifyConcurrencyIncrease() override {
+ handle_.NotifyConcurrencyIncrease();
+ }
+ void Join() override { handle_.Join(); }
+ void Cancel() override { handle_.Cancel(); }
+
+ bool IsRunning() override { return !!handle_; }
+
+ private:
+ base::JobHandle handle_;
+ std::unique_ptr<v8::JobTask> job_task_;
+};
+
} // namespace
} // namespace gin
@@ -441,6 +483,37 @@ void V8Platform::CallDelayedOnWorkerThread(std::unique_ptr<v8::Task> task,
base::TimeDelta::FromSecondsD(delay_in_seconds));
}
+std::unique_ptr<v8::JobHandle> V8Platform::PostJob(
+ v8::TaskPriority priority,
+ std::unique_ptr<v8::JobTask> job_task) {
+ base::TaskTraits task_traits;
+ switch (priority) {
+ case v8::TaskPriority::kBestEffort:
+ task_traits = kLowPriorityTaskTraits;
+ break;
+ case v8::TaskPriority::kUserVisible:
+ task_traits = kDefaultTaskTraits;
+ break;
+ case v8::TaskPriority::kUserBlocking:
+ task_traits = kBlockingTaskTraits;
+ break;
+ }
+ auto handle = base::PostJob(
+ FROM_HERE, task_traits,
+ base::BindRepeating(
+ [](v8::JobTask* job_task, base::JobDelegate* delegate) {
+ JobDelegateImpl delegate_impl(delegate);
+ job_task->Run(&delegate_impl);
+ },
+ base::Unretained(job_task.get())),
+ base::BindRepeating(
+ [](v8::JobTask* job_task) { return job_task->GetMaxConcurrency(); },
+ base::Unretained(job_task.get())));
+
+ return std::make_unique<JobHandleImpl>(std::move(handle),
+ std::move(job_task));
+}
+
bool V8Platform::IdleTasksEnabled(v8::Isolate* isolate) {
return PerIsolateData::From(isolate)->task_runner()->IdleTasksEnabled();
}
diff --git a/chromium/gin/v8_platform_unittest.cc b/chromium/gin/v8_platform_unittest.cc
index 5409e89f642..d2ea2b7768c 100644
--- a/chromium/gin/v8_platform_unittest.cc
+++ b/chromium/gin/v8_platform_unittest.cc
@@ -4,6 +4,9 @@
#include "gin/public/v8_platform.h"
+#include <atomic>
+
+#include "base/test/task_environment.h"
#include "base/trace_event/trace_event.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -62,4 +65,26 @@ TEST(V8PlatformTest, TraceStateObserverFired) {
ASSERT_EQ(0, test_observer.Disabled());
}
+// Tests that PostJob runs a task and is done after Join.
+TEST(V8PlatformTest, PostJobSimple) {
+ base::test::TaskEnvironment task_environment;
+ std::atomic_size_t num_tasks_to_run(4);
+ class Task : public v8::JobTask {
+ public:
+ explicit Task(std::atomic_size_t* num_tasks_to_run)
+ : num_tasks_to_run(num_tasks_to_run) {}
+ void Run(v8::JobDelegate* delegate) override { --(*num_tasks_to_run); }
+ size_t GetMaxConcurrency() const override { return *num_tasks_to_run; }
+
+ std::atomic_size_t* num_tasks_to_run;
+ };
+ auto handle =
+ V8Platform::Get()->PostJob(v8::TaskPriority::kUserVisible,
+ std::make_unique<Task>(&num_tasks_to_run));
+ EXPECT_TRUE(handle->IsRunning());
+ handle->Join();
+ EXPECT_FALSE(handle->IsRunning());
+ DCHECK_EQ(num_tasks_to_run, 0U);
+}
+
} // namespace gin