diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-01-23 17:21:03 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-01-23 16:25:15 +0000 |
commit | c551f43206405019121bd2b2c93714319a0a3300 (patch) | |
tree | 1f48c30631c421fd4bbb3c36da20183c8a2ed7d7 /chromium/gin | |
parent | 7961cea6d1041e3e454dae6a1da660b453efd238 (diff) | |
download | qtwebengine-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.cc | 27 | ||||
-rw-r--r-- | chromium/gin/v8_initializer.cc | 2 | ||||
-rw-r--r-- | chromium/gin/v8_isolate_memory_dump_provider.cc | 4 | ||||
-rw-r--r-- | chromium/gin/v8_isolate_memory_dump_provider_unittest.cc | 26 |
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 |