summaryrefslogtreecommitdiff
path: root/chromium/gin
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-01-23 17:21:03 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-01-23 16:25:15 +0000
commitc551f43206405019121bd2b2c93714319a0a3300 (patch)
tree1f48c30631c421fd4bbb3c36da20183c8a2ed7d7 /chromium/gin
parent7961cea6d1041e3e454dae6a1da660b453efd238 (diff)
downloadqtwebengine-chromium-c551f43206405019121bd2b2c93714319a0a3300.tar.gz
BASELINE: Update Chromium to 79.0.3945.139
Change-Id: I336b7182fab9bca80b709682489c07db112eaca5 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/gin')
-rw-r--r--chromium/gin/converter_unittest.cc27
-rw-r--r--chromium/gin/v8_initializer.cc2
-rw-r--r--chromium/gin/v8_isolate_memory_dump_provider.cc4
-rw-r--r--chromium/gin/v8_isolate_memory_dump_provider_unittest.cc26
4 files changed, 58 insertions, 1 deletions
diff --git a/chromium/gin/converter_unittest.cc b/chromium/gin/converter_unittest.cc
index 4b0cc647f39..6f9205f06a3 100644
--- a/chromium/gin/converter_unittest.cc
+++ b/chromium/gin/converter_unittest.cc
@@ -10,6 +10,8 @@
#include "base/compiler_specific.h"
#include "base/stl_util.h"
+#include "base/strings/string16.h"
+#include "base/strings/utf_string_conversions.h"
#include "gin/handle.h"
#include "gin/public/isolate_holder.h"
#include "gin/test/v8_test.h"
@@ -79,6 +81,31 @@ TEST_F(ConverterTest, Bool) {
}
}
+TEST_F(ConverterTest, String16) {
+ v8::Isolate* isolate = instance_->isolate();
+
+ HandleScope handle_scope(isolate);
+
+ EXPECT_TRUE(Converter<base::string16>::ToV8(isolate, base::ASCIIToUTF16(""))
+ ->StrictEquals(StringToV8(isolate, "")));
+ EXPECT_TRUE(
+ Converter<base::string16>::ToV8(isolate, base::ASCIIToUTF16("hello"))
+ ->StrictEquals(StringToV8(isolate, "hello")));
+
+ base::string16 result;
+
+ ASSERT_FALSE(
+ Converter<base::string16>::FromV8(isolate, v8::False(isolate), &result));
+ ASSERT_FALSE(
+ Converter<base::string16>::FromV8(isolate, v8::True(isolate), &result));
+ ASSERT_TRUE(Converter<base::string16>::FromV8(
+ isolate, v8::String::Empty(isolate), &result));
+ EXPECT_EQ(result, base::string16());
+ ASSERT_TRUE(Converter<base::string16>::FromV8(
+ isolate, StringToV8(isolate, "hello"), &result));
+ EXPECT_EQ(result, base::ASCIIToUTF16("hello"));
+}
+
TEST_F(ConverterTest, Int32) {
HandleScope handle_scope(instance_->isolate());
diff --git a/chromium/gin/v8_initializer.cc b/chromium/gin/v8_initializer.cc
index aab46a000c5..5a028d946cb 100644
--- a/chromium/gin/v8_initializer.cc
+++ b/chromium/gin/v8_initializer.cc
@@ -266,9 +266,9 @@ void V8Initializer::Initialize(IsolateHolder::ScriptMode mode) {
}
#if defined(V8_USE_EXTERNAL_STARTUP_DATA)
+ // TODO(v8:7624): Remove natives and all remaining infrastructure.
v8::StartupData natives;
GetMappedFileData(g_mapped_natives, &natives);
- v8::V8::SetNativesDataBlob(&natives);
if (g_mapped_snapshot) {
v8::StartupData snapshot;
diff --git a/chromium/gin/v8_isolate_memory_dump_provider.cc b/chromium/gin/v8_isolate_memory_dump_provider.cc
index fe14263836c..4e328f11573 100644
--- a/chromium/gin/v8_isolate_memory_dump_provider.cc
+++ b/chromium/gin/v8_isolate_memory_dump_provider.cc
@@ -156,6 +156,10 @@ bool CanHaveMultipleIsolates(IsolateHolder::IsolateType isolate_type) {
void V8IsolateMemoryDumpProvider::DumpHeapStatistics(
const base::trace_event::MemoryDumpArgs& args,
base::trace_event::ProcessMemoryDump* process_memory_dump) {
+ if (args.determinism == base::trace_event::MemoryDumpDeterminism::FORCE_GC) {
+ // Force GC in V8 using the same API as DevTools uses in "collectGarbage".
+ isolate_holder_->isolate()->LowMemoryNotification();
+ }
std::string isolate_name = base::StringPrintf(
"isolate_0x%" PRIXPTR,
reinterpret_cast<uintptr_t>(isolate_holder_->isolate()));
diff --git a/chromium/gin/v8_isolate_memory_dump_provider_unittest.cc b/chromium/gin/v8_isolate_memory_dump_provider_unittest.cc
index 26962eed61f..b003a234380 100644
--- a/chromium/gin/v8_isolate_memory_dump_provider_unittest.cc
+++ b/chromium/gin/v8_isolate_memory_dump_provider_unittest.cc
@@ -6,6 +6,7 @@
#include <memory>
+#include "base/task/thread_pool/thread_pool_instance.h"
#include "base/threading/thread_task_runner_handle.h"
#include "base/trace_event/process_memory_dump.h"
#include "base/trace_event/trace_event.h"
@@ -159,4 +160,29 @@ TEST_F(V8MemoryDumpProviderTest, DumpCodeStatistics) {
ASSERT_TRUE(did_dump_external_scripts_size);
}
+// Tests that a deterministic memory dump request performs a GC.
+TEST_F(V8MemoryDumpProviderTest, Deterministic) {
+ base::trace_event::MemoryDumpArgs dump_args = {
+ base::trace_event::MemoryDumpLevelOfDetail::LIGHT,
+ base::trace_event::MemoryDumpDeterminism::FORCE_GC};
+ std::unique_ptr<base::trace_event::ProcessMemoryDump> process_memory_dump(
+ new base::trace_event::ProcessMemoryDump(dump_args));
+
+ // Allocate an object that has only a weak reference.
+ v8::Global<v8::Object> weak_ref;
+ {
+ v8::HandleScope scope(instance_->isolate());
+ v8::Local<v8::Object> object = v8::Object::New(instance_->isolate());
+ weak_ref.Reset(instance_->isolate(), object);
+ weak_ref.SetWeak();
+ }
+
+ // Deterministic memory dump should trigger GC.
+ instance_->isolate_memory_dump_provider_for_testing()->OnMemoryDump(
+ dump_args, process_memory_dump.get());
+
+ // GC reclaimed the object.
+ ASSERT_TRUE(weak_ref.IsEmpty());
+}
+
} // namespace gin