Commit 7aa6ce70 authored by Camillo Bruni's avatar Camillo Bruni Committed by Commit Bot

[blink] Move ModuleRequest creation to ModuleRecord::ModuleRequests

Change ModuleRecord::ModuleRequests to return directly
Vector<ModuleRequest>. This avoids the overhead of two temporary
Vectors for source position and specifiers.

Remove ModuleRecord::ModuleRequestPositions as it is no longer needed.

Bug: 945094
Change-Id: Ie6400e7511f2a5879bbf95223f4eeb021b4ae0c6
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2414288
Commit-Queue: Camillo Bruni <cbruni@chromium.org>
Auto-Submit: Camillo Bruni <cbruni@chromium.org>
Reviewed-by: default avatarHiroshige Hayashizaki <hiroshige@chromium.org>
Reviewed-by: default avatarKouhei Ueno <kouhei@chromium.org>
Cr-Commit-Position: refs/heads/master@{#809432}
parent e929f5ad
...@@ -53,6 +53,7 @@ bindings_core_v8_files = ...@@ -53,6 +53,7 @@ bindings_core_v8_files =
"core/v8/maplike.h", "core/v8/maplike.h",
"core/v8/module_record.cc", "core/v8/module_record.cc",
"core/v8/module_record.h", "core/v8/module_record.h",
"core/v8/module_request.h",
"core/v8/native_value_traits.h", "core/v8/native_value_traits.h",
"core/v8/native_value_traits_impl.cc", "core/v8/native_value_traits_impl.cc",
"core/v8/native_value_traits_impl.h", "core/v8/native_value_traits_impl.h",
......
...@@ -206,38 +206,25 @@ void ModuleRecord::ReportException(ScriptState* script_state, ...@@ -206,38 +206,25 @@ void ModuleRecord::ReportException(ScriptState* script_state,
V8ScriptRunner::ReportException(script_state->GetIsolate(), exception); V8ScriptRunner::ReportException(script_state->GetIsolate(), exception);
} }
Vector<String> ModuleRecord::ModuleRequests(ScriptState* script_state, Vector<ModuleRequest> ModuleRecord::ModuleRequests(
v8::Local<v8::Module> record) {
if (record.IsEmpty())
return Vector<String>();
Vector<String> ret;
int length = record->GetModuleRequestsLength();
ret.ReserveInitialCapacity(length);
for (int i = 0; i < length; ++i) {
v8::Local<v8::String> v8_name = record->GetModuleRequest(i);
ret.push_back(ToCoreString(v8_name));
}
return ret;
}
Vector<TextPosition> ModuleRecord::ModuleRequestPositions(
ScriptState* script_state, ScriptState* script_state,
v8::Local<v8::Module> record) { v8::Local<v8::Module> record) {
if (record.IsEmpty()) if (record.IsEmpty())
return Vector<TextPosition>(); return Vector<ModuleRequest>();
Vector<TextPosition> ret;
Vector<ModuleRequest> requests;
int length = record->GetModuleRequestsLength(); int length = record->GetModuleRequestsLength();
ret.ReserveInitialCapacity(length); requests.ReserveInitialCapacity(length);
for (int i = 0; i < length; ++i) { for (int i = 0; i < length; ++i) {
v8::Local<v8::String> v8_name = record->GetModuleRequest(i);
v8::Location v8_loc = record->GetModuleRequestLocation(i); v8::Location v8_loc = record->GetModuleRequestLocation(i);
ret.emplace_back(OrdinalNumber::FromZeroBasedInt(v8_loc.GetLineNumber()), TextPosition position(
OrdinalNumber::FromZeroBasedInt(v8_loc.GetColumnNumber())); OrdinalNumber::FromZeroBasedInt(v8_loc.GetLineNumber()),
OrdinalNumber::FromZeroBasedInt(v8_loc.GetColumnNumber()));
requests.emplace_back(ToCoreString(v8_name), position);
} }
return ret; return requests;
} }
v8::Local<v8::Value> ModuleRecord::V8Namespace(v8::Local<v8::Module> record) { v8::Local<v8::Value> ModuleRecord::V8Namespace(v8::Local<v8::Module> record) {
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#ifndef THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_MODULE_RECORD_H_ #ifndef THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_MODULE_RECORD_H_
#define THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_MODULE_RECORD_H_ #define THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_MODULE_RECORD_H_
#include "third_party/blink/renderer/bindings/core/v8/module_request.h"
#include "third_party/blink/renderer/bindings/core/v8/script_source_location_type.h" #include "third_party/blink/renderer/bindings/core/v8/script_source_location_type.h"
#include "third_party/blink/renderer/bindings/core/v8/v8_code_cache.h" #include "third_party/blink/renderer/bindings/core/v8/v8_code_cache.h"
#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/core_export.h"
...@@ -126,11 +127,8 @@ class CORE_EXPORT ModuleRecord final { ...@@ -126,11 +127,8 @@ class CORE_EXPORT ModuleRecord final {
static void ReportException(ScriptState*, v8::Local<v8::Value> exception); static void ReportException(ScriptState*, v8::Local<v8::Value> exception);
static Vector<String> ModuleRequests(ScriptState*, static Vector<ModuleRequest> ModuleRequests(ScriptState*,
v8::Local<v8::Module> record); v8::Local<v8::Module> record);
static Vector<TextPosition> ModuleRequestPositions(
ScriptState*,
v8::Local<v8::Module> record);
static v8::Local<v8::Value> V8Namespace(v8::Local<v8::Module> record); static v8::Local<v8::Value> V8Namespace(v8::Local<v8::Module> record);
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "testing/gmock/include/gmock/gmock-matchers.h" #include "testing/gmock/include/gmock/gmock-matchers.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/renderer/bindings/core/v8/boxed_v8_module.h" #include "third_party/blink/renderer/bindings/core/v8/boxed_v8_module.h"
#include "third_party/blink/renderer/bindings/core/v8/module_request.h"
#include "third_party/blink/renderer/bindings/core/v8/script_source_code.h" #include "third_party/blink/renderer/bindings/core/v8/script_source_code.h"
#include "third_party/blink/renderer/bindings/core/v8/script_value.h" #include "third_party/blink/renderer/bindings/core/v8/script_value.h"
#include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_testing.h" #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_testing.h"
...@@ -122,7 +123,9 @@ TEST(ModuleRecordTest, moduleRequests) { ...@@ -122,7 +123,9 @@ TEST(ModuleRecordTest, moduleRequests) {
ASSERT_FALSE(module.IsEmpty()); ASSERT_FALSE(module.IsEmpty());
auto requests = ModuleRecord::ModuleRequests(scope.GetScriptState(), module); auto requests = ModuleRecord::ModuleRequests(scope.GetScriptState(), module);
EXPECT_THAT(requests, testing::ContainerEq<Vector<String>>({"a", "b"})); EXPECT_EQ(2u, requests.size());
EXPECT_EQ("a", requests[0].specifier);
EXPECT_EQ("b", requests[1].specifier);
} }
TEST(ModuleRecordTest, instantiateNoDeps) { TEST(ModuleRecordTest, instantiateNoDeps) {
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_MODULE_REQUEST_H_
#define THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_MODULE_REQUEST_H_
#include "third_party/blink/renderer/platform/wtf/text/text_position.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
namespace blink {
struct ModuleRequest {
String specifier;
TextPosition position;
ModuleRequest(const String& specifier, const TextPosition& position)
: specifier(specifier), position(position) {}
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_MODULE_REQUEST_H_
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include "third_party/blink/renderer/core/loader/modulescript/module_tree_linker.h" #include "third_party/blink/renderer/core/loader/modulescript/module_tree_linker.h"
#include "third_party/blink/renderer/bindings/core/v8/module_record.h" #include "third_party/blink/renderer/bindings/core/v8/module_record.h"
#include "third_party/blink/renderer/bindings/core/v8/module_request.h"
#include "third_party/blink/renderer/core/loader/modulescript/module_script_fetch_request.h" #include "third_party/blink/renderer/core/loader/modulescript/module_script_fetch_request.h"
#include "third_party/blink/renderer/core/loader/modulescript/module_tree_linker_registry.h" #include "third_party/blink/renderer/core/loader/modulescript/module_tree_linker_registry.h"
#include "third_party/blink/renderer/core/script/module_script.h" #include "third_party/blink/renderer/core/script/module_script.h"
...@@ -379,7 +380,7 @@ void ModuleTreeLinker::FetchDescendants(const ModuleScript* module_script) { ...@@ -379,7 +380,7 @@ void ModuleTreeLinker::FetchDescendants(const ModuleScript* module_script) {
// <spec step="5">For each string requested of // <spec step="5">For each string requested of
// record.[[RequestedModules]],</spec> // record.[[RequestedModules]],</spec>
Vector<Modulator::ModuleRequest> module_requests = Vector<ModuleRequest> module_requests =
modulator_->ModuleRequestsFromModuleRecord(record); modulator_->ModuleRequestsFromModuleRecord(record);
for (const auto& module_request : module_requests) { for (const auto& module_request : module_requests) {
...@@ -572,7 +573,7 @@ ScriptValue ModuleTreeLinker::FindFirstParseError( ...@@ -572,7 +573,7 @@ ScriptValue ModuleTreeLinker::FindFirstParseError(
// <spec step="5.1">Let childSpecifiers be the value of moduleScript's // <spec step="5.1">Let childSpecifiers be the value of moduleScript's
// record's [[RequestedModules]] internal slot.</spec> // record's [[RequestedModules]] internal slot.</spec>
Vector<Modulator::ModuleRequest> child_specifiers = Vector<ModuleRequest> child_specifiers =
modulator_->ModuleRequestsFromModuleRecord(record); modulator_->ModuleRequestsFromModuleRecord(record);
for (const auto& module_request : child_specifiers) { for (const auto& module_request : child_specifiers) {
......
...@@ -163,17 +163,7 @@ class ModuleTreeLinkerTestModulator final : public DummyModulator { ...@@ -163,17 +163,7 @@ class ModuleTreeLinkerTestModulator final : public DummyModulator {
Vector<ModuleRequest> ModuleRequestsFromModuleRecord( Vector<ModuleRequest> ModuleRequestsFromModuleRecord(
v8::Local<v8::Module> module_record) override { v8::Local<v8::Module> module_record) override {
ScriptState::Scope scope(script_state_); ScriptState::Scope scope(script_state_);
Vector<String> specifiers = return ModuleRecord::ModuleRequests(script_state_, module_record);
ModuleRecord::ModuleRequests(script_state_, module_record);
Vector<TextPosition> positions =
ModuleRecord::ModuleRequestPositions(script_state_, module_record);
DCHECK_EQ(specifiers.size(), positions.size());
Vector<ModuleRequest> requests;
requests.ReserveInitialCapacity(specifiers.size());
for (wtf_size_t i = 0; i < specifiers.size(); ++i) {
requests.emplace_back(specifiers[i], positions[i]);
}
return requests;
} }
Member<ScriptState> script_state_; Member<ScriptState> script_state_;
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "services/network/public/mojom/referrer_policy.mojom-blink-forward.h" #include "services/network/public/mojom/referrer_policy.mojom-blink-forward.h"
#include "third_party/blink/public/platform/web_url_request.h" #include "third_party/blink/public/platform/web_url_request.h"
#include "third_party/blink/renderer/bindings/core/v8/module_record.h" #include "third_party/blink/renderer/bindings/core/v8/module_record.h"
#include "third_party/blink/renderer/bindings/core/v8/module_request.h"
#include "third_party/blink/renderer/bindings/core/v8/sanitize_script_errors.h" #include "third_party/blink/renderer/bindings/core/v8/sanitize_script_errors.h"
#include "third_party/blink/renderer/bindings/core/v8/v8_code_cache.h" #include "third_party/blink/renderer/bindings/core/v8/v8_code_cache.h"
#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/core_export.h"
...@@ -190,12 +191,6 @@ class CORE_EXPORT Modulator : public GarbageCollected<Modulator>, ...@@ -190,12 +191,6 @@ class CORE_EXPORT Modulator : public GarbageCollected<Modulator>,
virtual ScriptValue InstantiateModule(v8::Local<v8::Module>, const KURL&) = 0; virtual ScriptValue InstantiateModule(v8::Local<v8::Module>, const KURL&) = 0;
struct ModuleRequest {
String specifier;
TextPosition position;
ModuleRequest(const String& specifier, const TextPosition& position)
: specifier(specifier), position(position) {}
};
virtual Vector<ModuleRequest> ModuleRequestsFromModuleRecord( virtual Vector<ModuleRequest> ModuleRequestsFromModuleRecord(
v8::Local<v8::Module>) = 0; v8::Local<v8::Module>) = 0;
......
...@@ -282,21 +282,10 @@ ScriptValue ModulatorImplBase::InstantiateModule( ...@@ -282,21 +282,10 @@ ScriptValue ModulatorImplBase::InstantiateModule(
return ModuleRecord::Instantiate(script_state_, module_record, source_url); return ModuleRecord::Instantiate(script_state_, module_record, source_url);
} }
Vector<Modulator::ModuleRequest> Vector<ModuleRequest> ModulatorImplBase::ModuleRequestsFromModuleRecord(
ModulatorImplBase::ModuleRequestsFromModuleRecord(
v8::Local<v8::Module> module_record) { v8::Local<v8::Module> module_record) {
ScriptState::Scope scope(script_state_); ScriptState::Scope scope(script_state_);
Vector<String> specifiers = return ModuleRecord::ModuleRequests(script_state_, module_record);
ModuleRecord::ModuleRequests(script_state_, module_record);
Vector<TextPosition> positions =
ModuleRecord::ModuleRequestPositions(script_state_, module_record);
DCHECK_EQ(specifiers.size(), positions.size());
Vector<ModuleRequest> requests;
requests.ReserveInitialCapacity(specifiers.size());
for (wtf_size_t i = 0; i < specifiers.size(); ++i) {
requests.emplace_back(specifiers[i], positions[i]);
}
return requests;
} }
void ModulatorImplBase::ProduceCacheModuleTreeTopLevel( void ModulatorImplBase::ProduceCacheModuleTreeTopLevel(
...@@ -325,7 +314,7 @@ void ModulatorImplBase::ProduceCacheModuleTree( ...@@ -325,7 +314,7 @@ void ModulatorImplBase::ProduceCacheModuleTree(
module_script->ProduceCache(); module_script->ProduceCache();
Vector<Modulator::ModuleRequest> child_specifiers = Vector<ModuleRequest> child_specifiers =
ModuleRequestsFromModuleRecord(record); ModuleRequestsFromModuleRecord(record);
for (const auto& module_request : child_specifiers) { for (const auto& module_request : child_specifiers) {
......
...@@ -163,7 +163,7 @@ ScriptValue DummyModulator::InstantiateModule(v8::Local<v8::Module>, ...@@ -163,7 +163,7 @@ ScriptValue DummyModulator::InstantiateModule(v8::Local<v8::Module>,
return ScriptValue(); return ScriptValue();
} }
Vector<Modulator::ModuleRequest> DummyModulator::ModuleRequestsFromModuleRecord( Vector<ModuleRequest> DummyModulator::ModuleRequestsFromModuleRecord(
v8::Local<v8::Module>) { v8::Local<v8::Module>) {
NOTREACHED(); NOTREACHED();
return Vector<ModuleRequest>(); return Vector<ModuleRequest>();
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "base/single_thread_task_runner.h" #include "base/single_thread_task_runner.h"
#include "third_party/blink/renderer/bindings/core/v8/module_record.h" #include "third_party/blink/renderer/bindings/core/v8/module_record.h"
#include "third_party/blink/renderer/bindings/core/v8/module_request.h"
#include "third_party/blink/renderer/core/script/modulator.h" #include "third_party/blink/renderer/core/script/modulator.h"
#include "third_party/blink/renderer/platform/heap/handle.h" #include "third_party/blink/renderer/platform/heap/handle.h"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment