Commit b29ba585 authored by Mythri Alle's avatar Mythri Alle Committed by Commit Bot

Reland^2: Add layout tests for javascript code caching.

This add layout tests to ensure javascript code caching is working as
expected. This also adds virtual tests with (
--enable-features=IsolatedCodeCache --site-per-process) to test that the
isolated code cache is behaving as expected. These tests test that:
1. code cache is created on the second visit to the script
2. code cache is consumed on the third visit to the script
3. code cache for the same script resource is not reused if
requested from a different origin (for the virtual tests).

This also adds a timeout expectation for the failing tests.

Bug: chromium:879494
Change-Id: I4b5b4cdce1f9dbccf31ba24f5efee2683b5a0579
Reviewed-on: https://chromium-review.googlesource.com/c/1329561Reviewed-by: default avatarMythri Alle <mythria@chromium.org>
Reviewed-by: default avatarRoss McIlroy <rmcilroy@chromium.org>
Commit-Queue: Mythri Alle <mythria@chromium.org>
Cr-Commit-Position: refs/heads/master@{#608486}
parent a4b02559
...@@ -88,6 +88,10 @@ crbug.com/760543 [ Linux ] http/tests/devtools/tracing/timeline-paint/timeline-p ...@@ -88,6 +88,10 @@ crbug.com/760543 [ Linux ] http/tests/devtools/tracing/timeline-paint/timeline-p
crbug.com/760543 [ Linux ] http/tests/devtools/tracing/timeline-time/timeline-usertiming.js [ Pass Timeout ] crbug.com/760543 [ Linux ] http/tests/devtools/tracing/timeline-time/timeline-usertiming.js [ Pass Timeout ]
crbug.com/760543 [ Linux ] http/tests/devtools/tracing/timeline-paint/timeline-paint.js [ Pass Timeout ] crbug.com/760543 [ Linux ] http/tests/devtools/tracing/timeline-paint/timeline-paint.js [ Pass Timeout ]
crbug.com/760543 [ Linux ] http/tests/devtools/oopif/oopif-performance-cpu-profiles.js [ Pass Timeout ] crbug.com/760543 [ Linux ] http/tests/devtools/oopif/oopif-performance-cpu-profiles.js [ Pass Timeout ]
crbug.com/902685 [ Linux ] http/tests/devtools/isolated-code-cache/same-origin-test.js [ Pass Timeout ]
crbug.com/902685 [ Linux ] http/tests/devtools/isolated-code-cache/cross-origin-test.js [ Pass Timeout ]
crbug.com/902685 [ Linux ] virtual/site-isolated-code-cache/http/tests/devtools/isolated-code-cache/same-origin-test.js [ Pass Timeout ]
crbug.com/902685 [ Linux ] virtual/site-isolated-code-cache/http/tests/devtools/isolated-code-cache/cross-origin-test.js [ Pass Timeout ]
# Timing out consistenly on WebKit Linux Trusty MSAN # Timing out consistenly on WebKit Linux Trusty MSAN
crbug.com/798957 [ Linux ] http/tests/devtools/audits2/audits2-limited-run.js [ Skip ] crbug.com/798957 [ Linux ] http/tests/devtools/audits2/audits2-limited-run.js [ Skip ]
......
...@@ -90,6 +90,10 @@ crbug.com/450493 http/tests/devtools/csp/ [ Slow ] ...@@ -90,6 +90,10 @@ crbug.com/450493 http/tests/devtools/csp/ [ Slow ]
crbug.com/450493 http/tests/devtools/profiler/ [ Slow ] crbug.com/450493 http/tests/devtools/profiler/ [ Slow ]
crbug.com/420008 http/tests/devtools/tracing/ [ Slow ] crbug.com/420008 http/tests/devtools/tracing/ [ Slow ]
crbug.com/420008 virtual/threaded/http/tests/devtools/tracing/ [ Slow ] crbug.com/420008 virtual/threaded/http/tests/devtools/tracing/ [ Slow ]
crbug.com/902685 http/tests/devtools/isolated-code-cache/same-origin-test.js [ Slow ]
crbug.com/902685 http/tests/devtools/isolated-code-cache/cross-origin-test.js [ Slow ]
crbug.com/902685 virtual/site-isolated-code-cache/http/tests/devtools/isolated-code-cache/same-origin-test.js [ Slow ]
crbug.com/902685 virtual/site-isolated-code-cache/http/tests/devtools/isolated-code-cache/cross-origin-test.js [ Slow ]
# Misc DevTools tests that are slow # Misc DevTools tests that are slow
crbug.com/246190 [ Release ] http/tests/devtools/indexeddb/ [ Slow ] crbug.com/246190 [ Release ] http/tests/devtools/indexeddb/ [ Slow ]
......
...@@ -795,5 +795,11 @@ ...@@ -795,5 +795,11 @@
"prefix": "webgl-extra-video-texture-metadata", "prefix": "webgl-extra-video-texture-metadata",
"base": "fast/webgl/video-metadata", "base": "fast/webgl/video-metadata",
"args": ["--enable-blink-features=ExtraWebGLVideoTextureMetadata"] "args": ["--enable-blink-features=ExtraWebGLVideoTextureMetadata"]
},
{
"prefix": "site-isolated-code-cache",
"base": "http/tests/devtools/isolated-code-cache",
"args": ["--enable-features=IsolatedCodeCache",
"--site-per-process"]
} }
] ]
Tests V8 code cache for javascript resources
---First navigation - produce and consume code cache ------
v8.compile Properties:
{
data : {
columnNumber : 0
lineNumber : 0
notStreamedReason : "script too small"
streamed : <boolean>
url : .../devtools/resources/v8-cache-script.js
}
endTime : <number>
startTime : <number>
type : "v8.compile"
}
Text details for v8.compile: v8-cache-script.js:1
v8.compile Properties:
{
data : {
columnNumber : 0
lineNumber : 0
notStreamedReason : "already used streamed data"
streamed : <boolean>
url : .../devtools/resources/v8-cache-script.js
}
endTime : <number>
startTime : <number>
type : "v8.compile"
}
Text details for v8.compile: v8-cache-script.js:1
v8.compile Properties:
{
data : {
cacheProduceOptions : "code"
columnNumber : 0
lineNumber : 0
notStreamedReason : "already used streamed data"
producedCacheSize : <number>
streamed : <boolean>
url : .../devtools/resources/v8-cache-script.js
}
endTime : <number>
startTime : <number>
type : "v8.compile"
}
Text details for v8.compile: v8-cache-script.js:1
v8.compile Properties:
{
data : {
cacheConsumeOptions : "code"
cacheRejected : false
columnNumber : 0
consumedCacheSize : <number>
lineNumber : 0
notStreamedReason : "already used streamed data"
streamed : <boolean>
url : .../devtools/resources/v8-cache-script.js
}
endTime : <number>
startTime : <number>
type : "v8.compile"
}
Text details for v8.compile: v8-cache-script.js:1
--- Second navigation - from a different origin ------
v8.compile Properties:
{
data : {
cacheConsumeOptions : "code"
cacheRejected : false
columnNumber : 0
consumedCacheSize : <number>
lineNumber : 0
notStreamedReason : "script too small"
streamed : <boolean>
url : .../devtools/resources/v8-cache-script.js
}
endTime : <number>
startTime : <number>
type : "v8.compile"
}
Text details for v8.compile: v8-cache-script.js:1
// Copyright 2018 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.
(async function() {
TestRunner.addResult(`Tests V8 code cache for javascript resources\n`);
await TestRunner.loadModule('performance_test_runner');
await TestRunner.showPanel('timeline');
// Clear browser cache to avoid any existing entries for the fetched
// scripts in the cache.
SDK.multitargetNetworkManager.clearBrowserCache();
await TestRunner.navigatePromise(
'http://127.0.0.1:8000/devtools/resources/test-page-v8-code-cache.html');
await TestRunner.evaluateInPagePromise(`
function loadScript() {
const url =
'http://localhost:8000/devtools/resources/v8-cache-script.js';
const frameId = 'frame_id';
let iframeWindow = document.getElementById(frameId).contentWindow;
return iframeWindow.loadScript(url)
.then(() => iframeWindow.loadScript(url))
.then(() => iframeWindow.loadScript(url));
}
`);
const scope =
'http://127.0.0.1:8000/devtools/service-workers/resources/v8-cache-iframe.html';
const frameId = 'frame_id';
await TestRunner.addIframe(scope, {id: frameId});
TestRunner.addResult(
'---First navigation - produce and consume code cache ------\n');
// This loads the same script thrice. With the current V8 heuristics (defined
// in third_party/blink/renderer/bindings/core/v8/v8_code_cache.cc) we produce
// cache on second fetch and consume it in the third fetch. We may have to
// change this if the heuristics change.
await PerformanceTestRunner.invokeAsyncWithTimeline('loadScript');
PerformanceTestRunner.printTimelineRecordsWithDetails(
TimelineModel.TimelineModel.RecordType.CompileScript);
// Second navigation
TestRunner.addResult(
'\n--- Second navigation - from a different origin ------\n');
await TestRunner.navigatePromise(
'http://localhost:8000/devtools/resources/test-page-v8-code-cache.html');
await TestRunner.evaluateInPagePromise(`
function loadScript() {
const url =
'http://localhost:8000/devtools/resources/v8-cache-script.js';
const frameId = 'frame_id';
let iframeWindow = document.getElementById(frameId).contentWindow;
return iframeWindow.loadScript(url);
}
`);
const localhost_scope =
'http://localhost:8000/devtools/service-workers/resources/v8-cache-iframe.html';
await TestRunner.addIframe(localhost_scope, {id: frameId});
await PerformanceTestRunner.invokeAsyncWithTimeline('loadScript');
PerformanceTestRunner.printTimelineRecordsWithDetails(
TimelineModel.TimelineModel.RecordType.CompileScript);
TestRunner.completeTest();
})();
Tests V8 code cache for javascript resources
--- Trace events related to code caches ------
v8.compile Properties:
{
data : {
columnNumber : 0
lineNumber : 0
notStreamedReason : "script too small"
streamed : <boolean>
url : .../devtools/resources/v8-cache-script.js
}
endTime : <number>
startTime : <number>
type : "v8.compile"
}
Text details for v8.compile: v8-cache-script.js:1
v8.compile Properties:
{
data : {
columnNumber : 0
lineNumber : 0
notStreamedReason : "already used streamed data"
streamed : <boolean>
url : .../devtools/resources/v8-cache-script.js
}
endTime : <number>
startTime : <number>
type : "v8.compile"
}
Text details for v8.compile: v8-cache-script.js:1
v8.compile Properties:
{
data : {
cacheProduceOptions : "code"
columnNumber : 0
lineNumber : 0
notStreamedReason : "already used streamed data"
producedCacheSize : <number>
streamed : <boolean>
url : .../devtools/resources/v8-cache-script.js
}
endTime : <number>
startTime : <number>
type : "v8.compile"
}
Text details for v8.compile: v8-cache-script.js:1
v8.compile Properties:
{
data : {
cacheConsumeOptions : "code"
cacheRejected : false
columnNumber : 0
consumedCacheSize : <number>
lineNumber : 0
notStreamedReason : "already used streamed data"
streamed : <boolean>
url : .../devtools/resources/v8-cache-script.js
}
endTime : <number>
startTime : <number>
type : "v8.compile"
}
Text details for v8.compile: v8-cache-script.js:1
v8.compile Properties:
{
data : {
columnNumber : 0
lineNumber : 0
notStreamedReason : "script too small"
streamed : <boolean>
url : .../devtools/resources/v8-cache-script.js
}
endTime : <number>
startTime : <number>
type : "v8.compile"
}
Text details for v8.compile: v8-cache-script.js:1
v8.compile Properties:
{
data : {
cacheConsumeOptions : "code"
cacheRejected : false
columnNumber : 0
consumedCacheSize : <number>
lineNumber : 0
notStreamedReason : "already used streamed data"
streamed : <boolean>
url : .../devtools/resources/v8-cache-script.js
}
endTime : <number>
startTime : <number>
type : "v8.compile"
}
Text details for v8.compile: v8-cache-script.js:1
-----------------------------------------------
// Copyright 2018 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.
(async function() {
TestRunner.addResult(`Tests V8 code cache for javascript resources\n`);
await TestRunner.loadModule('performance_test_runner');
await TestRunner.showPanel('timeline');
// Clear browser cache to avoid any existing entries for the fetched
// scripts in the cache.
SDK.multitargetNetworkManager.clearBrowserCache();
await TestRunner.evaluateInPagePromise(`
function loadScript() {
const url = 'http://localhost:8000/devtools/resources/v8-cache-script.js';
const frameId = 'frame_id';
let iframeWindow = document.getElementById(frameId).contentWindow;
return iframeWindow.loadScript(url)
.then(() => iframeWindow.loadScript(url))
.then(() => iframeWindow.loadScript(url));
}
function differentURLLoadScript() {
const url = 'http://127.0.0.1:8000/devtools/resources/v8-cache-script.js';
const frameId = 'diff_url_frame';
let iframeWindow = document.getElementById(frameId).contentWindow;
return iframeWindow.loadScript(url);
}
function sameURLLoadScript() {
const url = 'http://localhost:8000/devtools/resources/v8-cache-script.js';
const frameId = 'same_url_frame';
let iframeWindow = document.getElementById(frameId).contentWindow;
return iframeWindow.loadScript(url);
}
`);
const scope = 'http://127.0.0.1:8000/devtools/service-workers/resources/v8-cache-iframe.html';
const frameId = 'frame_id';
const different_url_frameId = 'diff_url_frame';
const same_url_frameId = 'same_url_frame';
await TestRunner.addIframe(scope, {id: frameId});
await TestRunner.addIframe(scope, {id: different_url_frameId});
await TestRunner.addIframe(scope, {id: same_url_frameId});
TestRunner.addResult('--- Trace events related to code caches ------');
await PerformanceTestRunner.startTimeline();
// This loads the same script thrice. With the current V8 heuristics (defined
// in third_party/blink/renderer/bindings/core/v8/v8_code_cache.cc) we produce
// cache on second fetch and consume it in the third fetch. This tests these
// heuristics.
await TestRunner.callFunctionInPageAsync('loadScript');
// Load from a different origin should not use the cached code
await TestRunner.callFunctionInPageAsync('differentURLLoadScript');
// Loading from the same origin should use cached code
await TestRunner.callFunctionInPageAsync('sameURLLoadScript');
await PerformanceTestRunner.stopTimeline();
PerformanceTestRunner.printTimelineRecordsWithDetails(
TimelineModel.TimelineModel.RecordType.CompileScript);
TestRunner.addResult('-----------------------------------------------');
TestRunner.completeTest();
})();
# This suite runs the tests in http/tests/devtools/isolated-code-cache with
# --enable-features=IsolatedCodeCache --site-per-process.
# This feature is required for security to enforce site isolation on V8
# code caches. Tracking bug: crbug.com/812168
Tests V8 code cache for javascript resources
---First navigation - produce and consume code cache ------
v8.compile Properties:
{
data : {
columnNumber : 0
lineNumber : 0
notStreamedReason : "script too small"
streamed : <boolean>
url : .../devtools/resources/v8-cache-script.js
}
endTime : <number>
startTime : <number>
type : "v8.compile"
}
Text details for v8.compile: v8-cache-script.js:1
v8.compile Properties:
{
data : {
columnNumber : 0
lineNumber : 0
notStreamedReason : "already used streamed data"
streamed : <boolean>
url : .../devtools/resources/v8-cache-script.js
}
endTime : <number>
startTime : <number>
type : "v8.compile"
}
Text details for v8.compile: v8-cache-script.js:1
v8.compile Properties:
{
data : {
cacheProduceOptions : "code"
columnNumber : 0
lineNumber : 0
notStreamedReason : "already used streamed data"
producedCacheSize : <number>
streamed : <boolean>
url : .../devtools/resources/v8-cache-script.js
}
endTime : <number>
startTime : <number>
type : "v8.compile"
}
Text details for v8.compile: v8-cache-script.js:1
v8.compile Properties:
{
data : {
cacheConsumeOptions : "code"
cacheRejected : false
columnNumber : 0
consumedCacheSize : <number>
lineNumber : 0
notStreamedReason : "already used streamed data"
streamed : <boolean>
url : .../devtools/resources/v8-cache-script.js
}
endTime : <number>
startTime : <number>
type : "v8.compile"
}
Text details for v8.compile: v8-cache-script.js:1
--- Second navigation - from a different origin ------
v8.compile Properties:
{
data : {
columnNumber : 0
lineNumber : 0
notStreamedReason : "script too small"
streamed : <boolean>
url : .../devtools/resources/v8-cache-script.js
}
endTime : <number>
startTime : <number>
type : "v8.compile"
}
Text details for v8.compile: v8-cache-script.js:1
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