diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-12 14:27:29 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-13 09:35:20 +0000 |
commit | c30a6232df03e1efbd9f3b226777b07e087a1122 (patch) | |
tree | e992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/gin | |
parent | 7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff) | |
download | qtwebengine-chromium-85-based.tar.gz |
BASELINE: Update Chromium to 85.0.4183.14085-based
Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/gin')
-rw-r--r-- | chromium/gin/array_buffer.cc | 5 | ||||
-rw-r--r-- | chromium/gin/converter.h | 4 | ||||
-rw-r--r-- | chromium/gin/data_object_builder.h | 2 | ||||
-rw-r--r-- | chromium/gin/data_object_builder_unittest.cc | 1 | ||||
-rw-r--r-- | chromium/gin/function_template.h | 2 | ||||
-rw-r--r-- | chromium/gin/handle.h | 2 | ||||
-rw-r--r-- | chromium/gin/per_context_data.cc | 3 | ||||
-rw-r--r-- | chromium/gin/public/v8_platform.h | 3 | ||||
-rw-r--r-- | chromium/gin/shell/gin_main.cc | 1 | ||||
-rw-r--r-- | chromium/gin/v8_isolate_memory_dump_provider.cc | 1 | ||||
-rw-r--r-- | chromium/gin/v8_platform.cc | 73 | ||||
-rw-r--r-- | chromium/gin/v8_platform_unittest.cc | 25 |
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 |