Backed out 10 changesets (bug 1518999) for GeckoView failures in PanZoomControllerTest.scroll. CLOSED TREE

Backed out changeset 7b5bdd071d05 (bug 1518999)
Backed out changeset 401e488734dd (bug 1518999)
Backed out changeset c13e51e17329 (bug 1518999)
Backed out changeset 2a2d67ba15b8 (bug 1518999)
Backed out changeset 3d4d84003227 (bug 1518999)
Backed out changeset 972731762965 (bug 1518999)
Backed out changeset f21b13582dad (bug 1518999)
Backed out changeset 13a4c749a802 (bug 1518999)
Backed out changeset 5a6cea5fd344 (bug 1518999)
Backed out changeset c3bb552e76a3 (bug 1518999)
This commit is contained in:
Dorel Luca 2020-09-17 02:58:34 +03:00
Родитель 87b04b7232
Коммит 72ef712fd0
90 изменённых файлов: 377 добавлений и 859 удалений

Просмотреть файл

@ -192,20 +192,13 @@ add_task(async function runRTPTests() {
content.performance.measure("Test-Measure", "Test", "Test-End");
// Check the entries for performance.getEntries/getEntriesByType/getEntriesByName.
await new Promise(resolve => {
const paintObserver = new content.PerformanceObserver(() => {
resolve();
});
paintObserver.observe({ type: "paint", buffered: true });
});
is(
content.performance.getEntries().length,
5,
4,
"For reduceTimerPrecision, there should be 4 entries for performance.getEntries()"
// PerformancePaintTiming, PerformanceNavigationTiming, PerformanceMark, PerformanceMark, PerformanceMeasure
// PerformanceNavigationTiming, PerformanceMark, PerformanceMark, PerformanceMeasure
);
for (var i = 0; i < 5; i++) {
for (var i = 0; i < 4; i++) {
let startTime = content.performance.getEntries()[i].startTime;
let duration = content.performance.getEntries()[i].duration;
ok(

Просмотреть файл

@ -407,9 +407,7 @@ add_task(async function() {
tests.forEach(test => {
let { input, headers } = test;
if (input === "PERFORMANCE_ENTRIES") {
input = content.wrappedJSObject.performance.getEntriesByType(
"navigation"
);
input = content.wrappedJSObject.performance.getEntries();
}
content.wrappedJSObject.doConsoleTable(input, headers);
});

Просмотреть файл

@ -22,7 +22,6 @@ namespace dom {
class PerformanceEntry;
class PerformanceNavigation;
class PerformancePaintTiming;
class PerformanceObserver;
class PerformanceService;
class PerformanceStorage;
@ -86,8 +85,6 @@ class Performance : public DOMEventTargetHelper {
virtual PerformanceNavigation* Navigation() = 0;
virtual void SetFCPTimingEntry(PerformancePaintTiming* aEntry) = 0;
IMPL_EVENT_HANDLER(resourcetimingbufferfull)
virtual void GetMozMemory(JSContext* aCx,

Просмотреть файл

@ -6,7 +6,6 @@
#include "PerformanceMainThread.h"
#include "PerformanceNavigation.h"
#include "PerformancePaintTiming.h"
#include "mozilla/StaticPrefs_dom.h"
#include "mozilla/StaticPrefs_privacy.h"
@ -44,14 +43,14 @@ NS_IMPL_CYCLE_COLLECTION_CLASS(PerformanceMainThread)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(PerformanceMainThread,
Performance)
NS_IMPL_CYCLE_COLLECTION_UNLINK(mTiming, mNavigation, mDocEntry, mFCPTiming)
NS_IMPL_CYCLE_COLLECTION_UNLINK(mTiming, mNavigation, mDocEntry)
tmp->mMozMemory = nullptr;
mozilla::DropJSObjects(this);
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(PerformanceMainThread,
Performance)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mTiming, mNavigation, mDocEntry, mFCPTiming)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mTiming, mNavigation, mDocEntry)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN_INHERITED(PerformanceMainThread,
@ -162,14 +161,6 @@ void PerformanceMainThread::AddRawEntry(UniquePtr<PerformanceTimingData> aData,
InsertResourceEntry(entry);
}
void PerformanceMainThread::SetFCPTimingEntry(PerformancePaintTiming* aEntry) {
MOZ_ASSERT(aEntry);
if (!mFCPTiming) {
mFCPTiming = aEntry;
QueueEntry(aEntry);
}
}
// To be removed once bug 1124165 lands
bool PerformanceMainThread::IsPerformanceTimingAttribute(
const nsAString& aName) {
@ -385,9 +376,6 @@ void PerformanceMainThread::GetEntries(
aRetval.AppendElement(mDocEntry);
}
if (mFCPTiming) {
aRetval.AppendElement(mFCPTiming);
}
aRetval.Sort(PerformanceEntryComparator());
}
@ -408,13 +396,6 @@ void PerformanceMainThread::GetEntriesByType(
return;
}
if (aEntryType.EqualsLiteral("paint")) {
if (mFCPTiming) {
aRetval.AppendElement(mFCPTiming);
return;
}
}
Performance::GetEntriesByType(aEntryType, aRetval);
}
@ -429,13 +410,6 @@ void PerformanceMainThread::GetEntriesByName(
Performance::GetEntriesByName(aName, aEntryType, aRetval);
if (mFCPTiming && mFCPTiming->GetName().Equals(aName) &&
(!aEntryType.WasPassed() ||
mFCPTiming->GetEntryType().Equals(aEntryType.Value()))) {
aRetval.AppendElement(mFCPTiming);
return;
}
// The navigation entry is the first one. If it exists and the name matches,
// let put it in front.
if (mDocEntry && mDocEntry->GetName().Equals(aName)) {

Просмотреть файл

@ -38,7 +38,6 @@ class PerformanceMainThread final : public Performance,
void AddRawEntry(UniquePtr<PerformanceTimingData>,
const nsAString& aInitiatorType,
const nsAString& aEntryName);
virtual void SetFCPTimingEntry(PerformancePaintTiming* aEntry) override;
TimeStamp CreationTimeStamp() const override;
@ -91,7 +90,6 @@ class PerformanceMainThread final : public Performance,
nsCOMPtr<nsITimedChannel> mChannel;
RefPtr<PerformanceTiming> mTiming;
RefPtr<PerformanceNavigation> mNavigation;
RefPtr<PerformancePaintTiming> mFCPTiming;
JS::Heap<JSObject*> mMozMemory;
const bool mCrossOriginIsolated;

Просмотреть файл

@ -132,8 +132,11 @@ void PerformanceObserver::QueueEntry(PerformanceEntry* aEntry) {
* Keep this list in alphabetical order.
* https://w3c.github.io/performance-timeline/#supportedentrytypes-attribute
*/
static const char16_t* const sValidTypeNames[5] = {
u"mark", u"measure", u"navigation", u"paint", u"resource",
static const char16_t* const sValidTypeNames[4] = {
u"mark",
u"measure",
u"navigation",
u"resource",
};
void PerformanceObserver::ReportUnsupportedTypesErrorToConsole(

Просмотреть файл

@ -1,47 +0,0 @@
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "PerformancePaintTiming.h"
#include "MainThreadUtils.h"
#include "mozilla/dom/PerformanceMeasureBinding.h"
using namespace mozilla::dom;
NS_IMPL_CYCLE_COLLECTION_INHERITED(PerformancePaintTiming, PerformanceEntry,
mPerformance)
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(PerformancePaintTiming)
NS_INTERFACE_MAP_END_INHERITING(PerformanceEntry)
NS_IMPL_ADDREF_INHERITED(PerformancePaintTiming, PerformanceEntry)
NS_IMPL_RELEASE_INHERITED(PerformancePaintTiming, PerformanceEntry)
PerformancePaintTiming::PerformancePaintTiming(Performance* aPerformance,
const nsAString& aName,
const TimeStamp& aStartTime)
: PerformanceEntry(aPerformance->GetParentObject(), aName, u"paint"_ns),
mPerformance(aPerformance),
mStartTime(aStartTime) {}
PerformancePaintTiming::~PerformancePaintTiming() = default;
JSObject* PerformancePaintTiming::WrapObject(
JSContext* aCx, JS::Handle<JSObject*> aGivenProto) {
return PerformancePaintTiming_Binding::Wrap(aCx, this, aGivenProto);
}
DOMHighResTimeStamp PerformancePaintTiming::StartTime() const {
DOMHighResTimeStamp rawValue =
mPerformance->GetDOMTiming()->TimeStampToDOMHighRes(mStartTime);
return nsRFPService::ReduceTimePrecisionAsMSecs(
rawValue, mPerformance->GetRandomTimelineSeed(),
mPerformance->IsSystemPrincipal(), mPerformance->CrossOriginIsolated());
}
size_t PerformancePaintTiming::SizeOfIncludingThis(
mozilla::MallocSizeOf aMallocSizeOf) const {
return aMallocSizeOf(this) + SizeOfExcludingThis(aMallocSizeOf);
}

Просмотреть файл

@ -1,48 +0,0 @@
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef mozilla_dom_PerformancePaintTiming_h___
#define mozilla_dom_PerformancePaintTiming_h___
#include "mozilla/dom/PerformanceEntry.h"
#include "mozilla/dom/PerformancePaintTimingBinding.h"
namespace mozilla {
namespace dom {
// https://w3c.github.io/paint-timing/#sec-PerformancePaintTiming
// Unlike timeToContentfulPaint, this timing is generated during
// displaylist building, when a frame is contentful, we collect
// the timestamp. Whereas, timeToContentfulPaint uses a compositor-side
// timestamp.
class PerformancePaintTiming final : public PerformanceEntry {
public:
PerformancePaintTiming(Performance* aPerformance, const nsAString& aName,
const TimeStamp& aStartTime);
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(PerformancePaintTiming,
PerformanceEntry)
JSObject* WrapObject(JSContext* aCx,
JS::Handle<JSObject*> aGivenProto) override;
DOMHighResTimeStamp StartTime() const override;
size_t SizeOfIncludingThis(
mozilla::MallocSizeOf aMallocSizeOf) const override;
private:
~PerformancePaintTiming();
RefPtr<Performance> mPerformance;
const TimeStamp mStartTime;
};
} // namespace dom
} // namespace mozilla
#endif /* mozilla_dom_PerformanacePaintTiming_h___ */

Просмотреть файл

@ -33,10 +33,6 @@ class PerformanceWorker final : public Performance {
return nullptr;
}
virtual void SetFCPTimingEntry(PerformancePaintTiming* aEntry) override {
MOZ_CRASH("This should not be called on workers.");
}
TimeStamp CreationTimeStamp() const override;
DOMHighResTimeStamp CreationTime() const override;

Просмотреть файл

@ -17,7 +17,6 @@ EXPORTS.mozilla.dom += [
'PerformanceNavigationTiming.h',
'PerformanceObserver.h',
'PerformanceObserverEntryList.h',
'PerformancePaintTiming.h',
'PerformanceResourceTiming.h',
'PerformanceServerTiming.h',
'PerformanceService.h',
@ -36,7 +35,6 @@ UNIFIED_SOURCES += [
'PerformanceNavigationTiming.cpp',
'PerformanceObserver.cpp',
'PerformanceObserverEntryList.cpp',
'PerformancePaintTiming.cpp',
'PerformanceResourceTiming.cpp',
'PerformanceServerTiming.cpp',
'PerformanceService.cpp',

Двоичные данные
dom/performance/tests/logo.png

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 21 KiB

Просмотреть файл

@ -14,14 +14,6 @@ support-files =
[test_performance_observer.html]
[test_performance_user_timing.html]
[test_performance_navigation_timing.html]
[test_performance_paint_timing.html]
support-files =
test_performance_paint_timing_helper.html
logo.png
[test_performance_paint_observer.html]
support-files =
test_performance_paint_observer_helper.html
logo.png
[test_worker_user_timing.html]
[test_worker_observer.html]
[test_sharedWorker_performance_user_timing.html]

Просмотреть файл

@ -1,40 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=1518999
-->
<head>
<title>Test for Bug 1518999 (Observer API) </title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<a target="_blank"
href="https://bugzilla.mozilla.org/show_bug.cgi?id=1518999">Mozilla
Bug 1518999 - Paint Timing API For Observers</a>
<p id="display"></p>
<div id="content" style="display: none">
<pre id="test">
<script class="testbody" type="text/javascript">
let tab;
function runTest() {
tab = window.open("test_performance_paint_observer_helper.html");
}
function done() {
tab.close();
SimpleTest.finish();
}
SimpleTest.waitForExplicitFinish();
addLoadEvent(runTest);
</script>
</pre>
</div>
</body>
</html>

Просмотреть файл

@ -1,35 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<!DOCTYPE html>
<html>
<body>
</body>
<script>
var promise = new Promise(resolve => {
var observer = new PerformanceObserver(list => resolve(list));
observer.observe({entryTypes: ["paint"]});
});
promise.then(list => {
var perfEntries = list.getEntries();
opener.is(list.getEntries().length, 1);
opener.isDeeply(list.getEntries(),
performance.getEntriesByType("paint"),
"Observed 'paint' entries should equal to entries obtained by getEntriesByType.");
opener.isDeeply(list.getEntries({name: "paint"}),
performance.getEntriesByName("paint"),
"getEntries with name filter should return correct results.");
opener.isDeeply(list.getEntries({entryType: "paint"}),
performance.getEntriesByType("paint"),
"getEntries with entryType filter should return correct results.");
opener.done();
});
const img = document.createElement("IMG");
img.src = "http://example.org/tests/dom/performance/tests/logo.png";
document.body.appendChild(img);
</script>
</html>

Просмотреть файл

@ -1,38 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=1518999
-->
<head>
<title>Test for Bug 1518999</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<a target="_blank"
href="https://bugzilla.mozilla.org/show_bug.cgi?id=1518999">Mozilla
Bug 1518999 - Paint Timing API</a>
<p id="display"></p>
<div id="content" style="display: none">
<pre id="test">
<script class="testbody" type="text/javascript">
let tab;
function runTest() {
tab = window.open("test_performance_paint_timing_helper.html");
}
function done() {
tab.close();
SimpleTest.finish();
}
SimpleTest.waitForExplicitFinish();
addLoadEvent(runTest);
</script>
</pre>
</div>
</body>
</html>

Просмотреть файл

@ -1,65 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=1518999
-->
<head>
<title>Test for Bug 1518999</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<div id="main"></div>
<div id="image"></div>
<div id="test">
<script class="testbody" type="text/javascript">
async function runTest() {
const paintEntries = performance.getEntriesByType('paint');
opener.is(paintEntries.length, 0, "No paint entries yet");
const img = document.createElement("img");
img.src = "http://example.org/tests/dom/performance/tests/logo.png";
img.onload = function() {
function getAndTestEntries(runCount) {
function testEntries(entries) {
opener.is(entries.length, 1, "FCP Only returns");
opener.is(entries[0].entryType, "paint", "entryType is paint");
opener.is(entries[0].name, "first-contentful-paint",
"Returned entry should be first-contentful-paint" );
const fcpEntriesGotByName =
performance.getEntriesByName('first-contentful-paint');
opener.is(fcpEntriesGotByName.length, 1, "entries length should match");
opener.is(entries[0], fcpEntriesGotByName[0], "should be the same entry");
opener.done();
}
const entries = performance.getEntriesByType('paint');
if (entries.length < 1) {
if (runCount < 4) {
opener.SimpleTest.requestFlakyTimeout("FCP is being registered asynchronously, so wait a bit of time");
setTimeout(function() {
getAndTestEntries(runCount + 1);
}, 20);
} else {
opener.ok(false, "Unable to find paint entries within a reasonable amount of time");
opener.done();
}
} else {
testEntries(entries);
}
}
getAndTestEntries(1);
}
document.body.appendChild(img);
}
window.onload = function() {
runTest();
}
</script>
</div>
</div>
</body>
</html>

Просмотреть файл

@ -144,8 +144,9 @@ var allResources = {
};
window.onload = function() {
let entries = performance.getEntriesByType('resource');
for (let entry of entries) {
let entries = performance.getEntries();
// The entries.slice() to drop first 'document' item.
for (let entry of entries.slice(1)) {
//dump(entry.name + " || "+ entry.initiatorType+ "\n");
if (!(entry.name in allResources)) {
if (entry.name.substr(-4) == ".ttf") {

Просмотреть файл

@ -858,8 +858,6 @@ var interfaceNamesInGlobalScope = [
// IMPORTANT: Do not change this list without review from a DOM peer!
{ name: "PerformanceObserverEntryList", insecureContext: true },
// IMPORTANT: Do not change this list without review from a DOM peer!
{ name: "PerformancePaintTiming", insecureContext: true },
// IMPORTANT: Do not change this list without review from a DOM peer!
{ name: "PerformanceResourceTiming", insecureContext: true },
// IMPORTANT: Do not change this list without review from a DOM peer!
{ name: "PerformanceServerTiming", insecureContext: false },

Просмотреть файл

@ -1,16 +0,0 @@
/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/.
*
* The origin of this IDL file is
* https://w3c.github.io/paint-timing/#sec-PerformancePaintTiming
*
* Copyright © 2012 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C
* liability, trademark and document use rules apply.
*/
[Exposed=(Window)]
interface PerformancePaintTiming : PerformanceEntry
{
};

Просмотреть файл

@ -753,7 +753,6 @@ WEBIDL_FILES = [
'PerformanceNavigationTiming.webidl',
'PerformanceObserver.webidl',
'PerformanceObserverEntryList.webidl',
'PerformancePaintTiming.webidl',
'PerformanceResourceTiming.webidl',
'PerformanceServerTiming.webidl',
'PerformanceTiming.webidl',

Просмотреть файл

@ -90,7 +90,6 @@
#include "mozilla/Telemetry.h"
#include "mozilla/dom/Performance.h"
#include "mozilla/dom/PerformanceTiming.h"
#include "mozilla/dom/PerformancePaintTiming.h"
#include "mozilla/layers/APZThreadUtils.h"
#include "MobileViewportManager.h"
#include "mozilla/dom/ImageTracker.h"
@ -191,7 +190,6 @@ nsPresContext::nsPresContext(dom::Document* aDocument, nsPresContextType aType)
mInflationDisabledForShrinkWrap(false),
mInteractionTimeEnabled(true),
mHasPendingInterrupt(false),
mHasEverBuiltInvisibleText(false),
mPendingInterruptFromTest(false),
mInterruptsEnabled(false),
mSendAfterPaintToContent(false),
@ -2399,26 +2397,10 @@ void nsPresContext::NotifyContentfulPaint() {
->PostDOMEvent();
#endif
mHadContentfulPaint = true;
if (nsRootPresContext* rootPresContext = GetRootPresContext()) {
mFirstContentfulPaintTransactionId =
Some(rootPresContext->mRefreshDriver->LastTransactionId().Next());
if (nsPIDOMWindowInner* innerWindow = mDocument->GetInnerWindow()) {
if (Performance* perf = innerWindow->GetPerformance()) {
TimeStamp nowTime =
rootPresContext->RefreshDriver()->MostRecentRefresh(
/* aEnsureTimerStarted */ false);
MOZ_ASSERT(
!nowTime.IsNull(),
"Most recent refresh timestamp should exist since we are in "
"a refresh driver tick");
MOZ_ASSERT(rootPresContext->RefreshDriver()->IsInRefresh(),
"We should only notify contentful paint during refresh "
"driver ticks");
RefPtr<PerformancePaintTiming> paintTiming =
new PerformancePaintTiming(perf, u"first-contentful-paint"_ns,
nowTime);
perf->SetFCPTimingEntry(paintTiming);
}
if (IsRootContentDocument()) {
if (nsRootPresContext* rootPresContext = GetRootPresContext()) {
mFirstContentfulPaintTransactionId =
Some(rootPresContext->mRefreshDriver->LastTransactionId().Next());
}
}
}

Просмотреть файл

@ -1028,9 +1028,6 @@ class nsPresContext : public nsISupports, public mozilla::SupportsWeakPtr {
void NotifyPaintStatusReset();
void NotifyDOMContentFlushed();
bool HasEverBuiltInvisibleText() const { return mHasEverBuiltInvisibleText; }
void SetBuiltInvisibleText() { mHasEverBuiltInvisibleText = true; }
bool UsesExChUnits() const { return mUsesExChUnits; }
void SetUsesExChUnits(bool aValue) { mUsesExChUnits = aValue; }
@ -1273,7 +1270,6 @@ class nsPresContext : public nsISupports, public mozilla::SupportsWeakPtr {
protected:
unsigned mInteractionTimeEnabled : 1;
unsigned mHasPendingInterrupt : 1;
unsigned mHasEverBuiltInvisibleText : 1;
unsigned mPendingInterruptFromTest : 1;
unsigned mInterruptsEnabled : 1;
unsigned mSendAfterPaintToContent : 1;

Просмотреть файл

@ -1240,10 +1240,10 @@ void nsRefreshDriver::RestoreNormalRefresh() {
mCompletedTransaction = mOutstandingTransactionId = mNextTransactionId;
}
TimeStamp nsRefreshDriver::MostRecentRefresh(bool aEnsureTimerStarted) const {
TimeStamp nsRefreshDriver::MostRecentRefresh() const {
// In case of stylo traversal, we have already activated the refresh driver in
// RestyleManager::ProcessPendingRestyles().
if (aEnsureTimerStarted && !ServoStyleSet::IsInServoTraversal()) {
if (!ServoStyleSet::IsInServoTraversal()) {
const_cast<nsRefreshDriver*>(this)->EnsureTimerStarted();
}

Просмотреть файл

@ -79,7 +79,7 @@ class nsRefreshDriver final : public mozilla::layers::TransactionIdAllocator,
* ensure that multiple animations started during the same event off
* the main event loop have the same start time.)
*/
mozilla::TimeStamp MostRecentRefresh(bool aEnsureTimerStarted = true) const;
mozilla::TimeStamp MostRecentRefresh() const;
/**
* Add / remove refresh observers.

Просмотреть файл

@ -4889,9 +4889,6 @@ void nsTextFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
TextDecorations textDecs;
GetTextDecorations(PresContext(), eResolvedColors, textDecs);
if (!textDecs.HasDecorationLines()) {
if (auto* currentPresContext = aBuilder->CurrentPresContext()) {
currentPresContext->SetBuiltInvisibleText();
}
return;
}
}

Просмотреть файл

@ -507,13 +507,6 @@ class nsDisplayVideo : public nsPaintedDisplayItem {
return elem->IsPotentiallyPlaying() ? LayerState::LAYER_ACTIVE_FORCE
: LayerState::LAYER_INACTIVE;
}
// Only report FirstContentfulPaint when the video is set
bool IsContentful() const override {
nsVideoFrame* f = static_cast<nsVideoFrame*>(Frame());
HTMLVideoElement* video = HTMLVideoElement::FromNode(f->GetContent());
return video->VideoWidth() > 0;
}
};
void nsVideoFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,

Просмотреть файл

@ -1065,8 +1065,7 @@ static bool DisplayListIsNonBlank(nsDisplayList* aList) {
// non-white canvas or SVG. This excludes any content of iframes, but
// includes text with pending webfonts. This is the first time users
// could start consuming page content."
static bool DisplayListIsContentful(nsDisplayListBuilder* aBuilder,
nsDisplayList* aList) {
static bool DisplayListIsContentful(nsDisplayList* aList) {
for (nsDisplayItem* i : *aList) {
DisplayItemType type = i->GetType();
nsDisplayList* children = i->GetChildren();
@ -1078,14 +1077,10 @@ static bool DisplayListIsContentful(nsDisplayListBuilder* aBuilder,
// actually tracking all modifications)
default:
if (i->IsContentful()) {
bool dummy;
nsRect bound = i->GetBounds(aBuilder, &dummy);
if (!bound.IsEmpty()) {
return true;
}
return true;
}
if (children) {
if (DisplayListIsContentful(aBuilder, children)) {
if (DisplayListIsContentful(children)) {
return true;
}
}
@ -1109,14 +1104,10 @@ void nsDisplayListBuilder::LeavePresShell(const nsIFrame* aReferenceFrame,
pc->NotifyNonBlankPaint();
}
}
nsRootPresContext* rootPresContext = pc->GetRootPresContext();
if (!pc->HadContentfulPaint() && rootPresContext &&
rootPresContext->RefreshDriver()->IsInRefresh()) {
if (!CurrentPresShellState()->mIsBackgroundOnly) {
if (pc->HasEverBuiltInvisibleText() ||
DisplayListIsContentful(this, aPaintedContents)) {
pc->NotifyContentfulPaint();
}
if (!pc->HadContentfulPaint()) {
if (!CurrentPresShellState()->mIsBackgroundOnly &&
DisplayListIsContentful(aPaintedContents)) {
pc->NotifyContentfulPaint();
}
}
}

Просмотреть файл

@ -4678,14 +4678,6 @@ class nsDisplayBackgroundImage : public nsDisplayImageContainer {
nsDisplayImageContainer::RemoveFrame(aFrame);
}
// Match https://w3c.github.io/paint-timing/#contentful-image
bool IsContentful() const override {
const auto& styleImage =
mBackgroundStyle->StyleBackground()->mImage.mLayers[mLayer].mImage;
return styleImage.IsSizeAvailable() && styleImage.IsUrl();
}
protected:
typedef class mozilla::layers::ImageContainer ImageContainer;
typedef class mozilla::layers::ImageLayer ImageLayer;

Просмотреть файл

@ -3,12 +3,6 @@
<meta charset="utf-8">
<title>Colours</title>
</head>
<!-- background contains one extra transparent.gif because we want trick the
contentful paint detection; We want to make sure the background is loaded
before the test starts so we always wait for the contentful paint timestamp
to exist, however, gradient isn't considered as contentful per spec, so Gecko
wouldn't generate a timestamp for it. Hence, we added a transparent gif
to the image list to trick the detection. !-->
<body style="overflow:hidden; height:100%; width:100%; margin: 0px; padding: 0px; background: url('/assets/www/transparent.gif'), linear-gradient(135deg, red, white);">
<body style="overflow:hidden; height:100%; width:100%; margin: 0px; padding: 0px; background: linear-gradient(135deg, red, white);">
</body>
</html>

Просмотреть файл

@ -4,13 +4,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Fixed bottom element</title>
</head>
<!-- background contains one extra transparent.gif because we want trick the
contentful paint detection; We want to make sure the background is loaded
before the test starts so we always wait for the contentful paint timestamp
to exist, however, gradient isn't considered as contentful per spec, so Gecko
wouldn't generate a timestamp for it. Hence, we added a transparent gif
to the image list to trick the detection. !-->
<body style="overflow:hidden; height:100%; width:100%; margin: 0px; padding: 0px; background: url('/assets/www/transparent.gif'), linear-gradient(135deg, blue, blue);">
<body style="overflow:hidden; height:100%; width:100%; margin: 0px; padding: 0px; background: linear-gradient(135deg, blue, blue);">
<div id="bottom-banner" style="width:100%;position:fixed;bottom:0;left:0;background-color:lime;height:10%;"></div>
</body>
</html>

Просмотреть файл

@ -5,13 +5,7 @@
<style type="text/css">
body {
margin: 0;
/* background contains one extra transparent.gif because we want trick the
contentful paint detection; We want to make sure the background is loaded
before the test starts so we always wait for the contentful paint timestamp
to exist, however, gradient isn't considered as contentful per spec, so Gecko
wouldn't generate a timestamp for it. Hence, we added a transparent gif
to the image list to trick the detection. */
background: url('/assets/www/transparent.gif'), linear-gradient(135deg, red, white);
background: linear-gradient(135deg, red, white);
}
#one {

Просмотреть файл

Просмотреть файл

@ -411,11 +411,15 @@ class BrowsertimeResultsHandler(PerftestResultsHandler):
# bt to raptor names
conversion = (
("fnbpaint", "firstPaint"),
("fcp", ["paintTiming", "first-contentful-paint"]),
("fcp", "timeToContentfulPaint"),
("dcf", "timeToDomContentFlushed"),
("loadtime", "loadEventEnd"),
)
chrome_raptor_conversion = {
"timeToContentfulPaint": ["paintTiming", "first-contentful-paint"]
}
def _get_raptor_val(mdict, mname, retval=False):
# gets the measurement requested, returns the value
# if one was found, or retval if it couldn't be found
@ -520,13 +524,12 @@ class BrowsertimeResultsHandler(PerftestResultsHandler):
if self.app and "fennec" in self.app.lower() and bt == "fcp":
continue
# FCP uses a different path to get the timing, so we need to do
# some checks here
if bt == "fcp" and not _get_raptor_val(
# chrome currently uses different names (and locations) for some metrics
if raptor in chrome_raptor_conversion and _get_raptor_val(
raw_result["browserScripts"][0]["timings"],
raptor,
chrome_raptor_conversion[raptor],
):
continue
raptor = chrome_raptor_conversion[raptor]
# XXX looping several times in the list, could do better
for cycle in raw_result["browserScripts"]:

Просмотреть файл

@ -1,5 +1,4 @@
[basetest.html]
expected: TIMEOUT
[Basic test to check existence of FP and FCP.]
expected: TIMEOUT # Expect timeout because we don't have FP
expected: FAIL

Просмотреть файл

@ -1,5 +1,4 @@
[buffered-flag.window.html]
expected: TIMEOUT
[PerformanceObserver with buffered flag sees previous paint entries.]
expected: TIMEOUT # Expect timeout because we don't have FP
expected: FAIL

Просмотреть файл

@ -1,5 +1,4 @@
[child-painting-first-image.html]
expected: TIMEOUT
[Parent frame ignores paint-timing events fired from child image rendering.]
expected: TIMEOUT # Expect timeout because we don't have FP
expected: FAIL

Просмотреть файл

@ -0,0 +1,4 @@
[fcp-background-size.html]
[First contentful paint fires due to background size.]
expected: FAIL

Просмотреть файл

@ -1,5 +1,4 @@
[fcp-bg-image-set.html]
expected: TIMEOUT
[First contentful paint fires due to background image in image-set.]
expected: TIMEOUT # We don't have image-set supported yet
expected: FAIL

Просмотреть файл

@ -0,0 +1,4 @@
[fcp-bg-image-two-steps.html]
[First contentful paint fires for background image only when visible.]
expected: FAIL

Просмотреть файл

@ -0,0 +1,4 @@
[fcp-canvas-context.html]
[Canvas should count as contentful when context is created]
expected: FAIL

Просмотреть файл

@ -0,0 +1,4 @@
[fcp-gradient.html]
[Gradients should not count as contentful]
expected: FAIL

Просмотреть файл

@ -0,0 +1,4 @@
[fcp-invisible-3d-rotate-descendant.html]
[First contentful paint fires due to its ancestor getting rotating into view.]
expected: FAIL

Просмотреть файл

@ -0,0 +1,4 @@
[fcp-invisible-3d-rotate.html]
[First contentful paint fires due to 3d rotation into view.]
expected: FAIL

Просмотреть файл

@ -0,0 +1,4 @@
[fcp-invisible-scale-transition.html]
[First contentful paint fires when revealed during transition.]
expected: FAIL

Просмотреть файл

@ -0,0 +1,4 @@
[fcp-invisible-scale.html]
[First contentful paint fires due to scale becoming positive.]
expected: FAIL

Просмотреть файл

@ -0,0 +1,4 @@
[fcp-invisible-text.html]
[First contentful paint fires due to pseudo-element becoming visible.]
expected: FAIL

Просмотреть файл

@ -0,0 +1,4 @@
[fcp-opacity-descendant.html]
[First contentful paint fires due to its ancestor getting positive opacity.]
expected: FAIL

Просмотреть файл

@ -0,0 +1,4 @@
[fcp-opacity.html]
[First contentful paint fires due to opacity-revealed element.]
expected: FAIL

Просмотреть файл

@ -0,0 +1,4 @@
[fcp-out-of-bounds-translate.html]
[First contentful paint fires due to transform-based intersection with document.]
expected: FAIL

Просмотреть файл

@ -0,0 +1,4 @@
[fcp-out-of-bounds.html]
[First contentful paint fires due to intersection with document.]
expected: FAIL

Просмотреть файл

@ -0,0 +1,4 @@
[fcp-pseudo-element-display.html]
[First contentful paint fires due to pseudo-element text.]
expected: FAIL

Просмотреть файл

@ -0,0 +1,4 @@
[fcp-pseudo-element-image.html]
[First contentful paint fires due to pseudo-element image.]
expected: FAIL

Просмотреть файл

@ -0,0 +1,4 @@
[fcp-pseudo-element-opacity.html]
[First contentful paint fires due to pseudo-element getting positive opacity.]
expected: FAIL

Просмотреть файл

@ -0,0 +1,4 @@
[fcp-pseudo-element-text.html]
[First contentful paint fires due to pseudo-element text.]
expected: FAIL

Просмотреть файл

@ -0,0 +1,4 @@
[fcp-pseudo-element-visibility.html]
[First contentful paint fires due to pseudo-element becoming visible.]
expected: FAIL

Просмотреть файл

@ -0,0 +1,4 @@
[fcp-svg.html]
[First contentful paint fires when SVG becomes contentful.]
expected: FAIL

Просмотреть файл

@ -0,0 +1,4 @@
[fcp-typographic-pseudo.html]
[First contentful paint fires only when some of the text is visible, considering ::first-letter.]
expected: FAIL

Просмотреть файл

@ -1,5 +1,4 @@
[fcp-video-frame.html]
expected: TIMEOUT
[Video should become contentful when first frame is loaded]
expected: TIMEOUT # Bug 1652605
expected: FAIL

Просмотреть файл

@ -0,0 +1,4 @@
[fcp-video-poster.html]
[Video should become contentful when poster is loaded]
expected: FAIL

Просмотреть файл

@ -0,0 +1,4 @@
[fcp-whitespace.html]
[Whitespace should not count as contentful.]
expected: FAIL

Просмотреть файл

@ -0,0 +1,4 @@
[fcp-with-rtl.html]
[FCP should fire when coordinates are negative, if within document scrollable area]
expected: FAIL

Просмотреть файл

@ -1,5 +1,4 @@
[first-contentful-bg-image.html]
expected: TIMEOUT
[First contentful paint fires due to background image render.]
expected: TIMEOUT # Expect timeout because we don't have FP
expected: FAIL

Просмотреть файл

@ -1,5 +1,4 @@
[first-contentful-canvas.html]
expected: TIMEOUT
[First contentful paint fires due to canvas render.]
expected: TIMEOUT # Expect timeout because we don't have FP
expected: FAIL

Просмотреть файл

@ -2,5 +2,5 @@
expected:
if processor == "aarch64": [OK, TIMEOUT, CRASH]
[First contentful paint fires due to image render.]
expected: TIMEOUT # Expect timeout because we don't have FP
expected: FAIL

Просмотреть файл

@ -1,5 +1,4 @@
[first-contentful-paint.html]
expected: TIMEOUT
[First Paint triggered by non-contentful paint. Image load triggers First Contentful Paint.]
expected: TIMEOUT # Expect timeout because we don't have FP
expected: FAIL

Просмотреть файл

@ -1,5 +1,4 @@
[first-contentful-svg.html]
expected: TIMEOUT
[First contentful paint fires due to svg.]
expected: TIMEOUT # Expect timeout because we don't have FP
expected: FAIL

Просмотреть файл

@ -1,5 +1,4 @@
[first-image-child.html]
expected: TIMEOUT
[Child iframe ignores paint-timing events fired from parent image rendering.]
expected: TIMEOUT # Expect timeout because we don't have FP
expected: FAIL

Просмотреть файл

@ -1,5 +1,4 @@
[first-paint-bg-color.html]
expected: TIMEOUT
[First paint fires due to background color. No FCP]
expected: TIMEOUT # Expect timeout because we don't have FP
expected: FAIL

Просмотреть файл

@ -1,5 +1,4 @@
[first-paint-only.html]
expected: TIMEOUT
[Performance first paint timing entry exists. No first contentful paint.]
expected: TIMEOUT # Expect timeout because we don't have FP
expected: FAIL

Просмотреть файл

@ -0,0 +1,32 @@
[idlharness.window.html]
expected:
if webrender and debug and (os == "linux"): ["OK", "TIMEOUT"]
[PerformancePaintTiming interface: existence and properties of interface object]
expected: FAIL
[PerformancePaintTiming interface object length]
expected: FAIL
[PerformancePaintTiming interface object name]
expected: FAIL
[PerformancePaintTiming interface: existence and properties of interface prototype object]
expected: FAIL
[PerformancePaintTiming interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
[PerformancePaintTiming interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
[PerformancePaintTiming must be primary interface of paintTiming]
expected: FAIL
[Stringification of paintTiming]
expected: FAIL
[idl_test setup]
expected:
if webrender and debug and (os == "linux"): ["FAIL", "TIMEOUT"]
FAIL

Просмотреть файл

@ -0,0 +1,5 @@
[input-text.html]
expected: TIMEOUT
[Text from a form control triggers First Contentful Paint.]
expected: TIMEOUT

Просмотреть файл

@ -1,5 +1,4 @@
[paint-visited.html]
expected: TIMEOUT
[Visited-attack test to check existence of FP and FCP.]
expected: TIMEOUT # Expect timeout because we don't have FP
expected: FAIL

Просмотреть файл

@ -1,5 +1,4 @@
[sibling-painting-first-image.html]
expected: TIMEOUT
[Frame ignores paint-timing events fired from sibling frame.]
expected: TIMEOUT # Expect timeout because we don't have FP
expected: FAIL

Просмотреть файл

@ -0,0 +1,8 @@
[supported-paint-type.window.html]
expected: TIMEOUT
[supportedEntryTypes contains 'paint'.]
expected: FAIL
['paint' entries should be observable.]
expected: TIMEOUT

Просмотреть файл

@ -4,37 +4,19 @@
<script src="/resources/testharnessreport.js"></script>
<script>
var entriesExpectToReceive = [
{
'entryType': 'paint',
'name': 'first-paint'
},
{
'entryType': 'paint',
'name': 'first-contentful-paint'
}
];
setup({"hide_test_state": true});
async_test(function (t) {
assert_implements(window.PerformancePaintTiming, "Paint Timing isn't supported.");
window.addEventListener('message', t.step_func(e => {
assert_equals(e.data, '2 paint first-paint paint first-contentful-paint');
// When only child frame paints, expect only first-paint.
for (let i = 0; i < entriesExpectToReceive.length; i++) {
if (entriesExpectToReceive[i].entryType == e.data.entryType &&
entriesExpectToReceive[i].name == e.data.name) {
entriesExpectToReceive.splice(i, 1);
break;
}
}
if (entriesExpectToReceive.length == 0) {
t.step_timeout( function() {
const bufferedEntries = performance.getEntriesByType('paint');
assert_equals(bufferedEntries.length, 1);
assert_equals(bufferedEntries[0].entryType, 'paint');
assert_equals(bufferedEntries[0].name, 'first-paint');
t.done();
}
}, 50);
}));
const iframe = document.createElement('iframe');
iframe.id = 'child-iframe';

Просмотреть файл

@ -22,17 +22,7 @@
<script src="../resources/utils.js"></script>
<div id="main"></div>
<script>
// Load the image into memory first to make sure it's decoded.
function load_image() {
const img = document.createElement("img");
img.src = "../resources/circles.png";
return new Promise(resolve => {
img.onload = async () => resolve();
});
}
test_fcp("First contentful paint fires due to background size.", load_image);
test_fcp("First contentful paint fires due to background size.");
</script>
</body>
</html>

Просмотреть файл

@ -20,17 +20,7 @@
<script src="../resources/utils.js"></script>
<div id="main"></div>
<script>
// Load the image into memory first to make sure it's decoded.
function load_image() {
const img = document.createElement("img");
img.src = "../resources/circles.png";
return new Promise(resolve => {
img.onload = async () => resolve();
});
}
test_fcp("First contentful paint fires due to background image in image-set.", load_image);
test_fcp("First contentful paint fires due to background image in image-set.");
</script>
</body>
</html>

Просмотреть файл

@ -27,17 +27,7 @@
<script src="../resources/utils.js"></script>
<div id="main"></div>
<script>
// Load the image into memory first to make sure it's decoded.
function load_image() {
const img = document.createElement("img");
img.src = "../resources/circles.png";
return new Promise(resolve => {
img.onload = async () => resolve();
});
}
test_fcp("First contentful paint fires for background image only when visible.", load_image);
test_fcp("First contentful paint fires for background image only when visible.");
</script>
</body>

Просмотреть файл

@ -1,55 +0,0 @@
<!DOCTYPE html>
<head>
<title>
Ensure the timing is marked during the `update the rendering` step.
</title>
</head>
<style>
#main {
width: 100px;
height: 100px;
left: 0px;
position: relative;
top: 0;
background-image: url(../resources/circles.png);
opacity: 0;
}
#main.contentful {
opacity: 0.1;
}
</style>
<body>
<script src="../resources/utils.js"></script>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="main"></div>
<script>
setup({"hide_test_state": true});
async_test(function (t) {
assert_implements(window.PerformancePaintTiming, "Paint Timing isn't supported.");
let fired = false;
const main = document.getElementById('main');
let animationFrameStamps = [];
requestAnimationFrame(function frame(stamp) {
animationFrameStamps.unshift(stamp);
main.className = "contentful";
while (performance.now() - stamp <= 5) {
/* Busy-wait */
}
if(!fired)
requestAnimationFrame(frame);
});
new PerformanceObserver(t.step_func(list=>{
for (let entry of list.getEntries()) {
if (entry.name == "first-contentful-paint") {
fired = true;
assert_any(assert_approx_equals, entry.startTime, animationFrameStamps, 1, "One of the past requestAnimationFrame should have the same timestamp as paint entry");
t.done();
}
}
})).observe({type: "paint"});
}, 'The first-contentful-paint timestamp should be same as the last RAF');
</script>
</body>
</html>

Просмотреть файл

@ -1,27 +0,0 @@
<!DOCTYPE html>
<head>
<title>
Performance Paint Timing Test: Not only the top level document, paints
in the iframe should also generate the entry
</title>
</head>
<body>
<script src="../resources/utils.js"></script>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
setup({"hide_test_state": true});
async_test(function (t) {
assert_implements(window.PerformancePaintTiming, "Paint Timing isn't supported.");
window.addEventListener('message', t.step_func(e => {
if (e.data.entryType == "paint" && e.data.name == "first-contentful-paint") {
t.done();
}
}));
const iframe = document.createElement('iframe');
iframe.src = '../resources/subframe-painting.html';
document.body.appendChild(iframe);
}, 'Parent frame ignores paint-timing events fired from child image rendering.');
</script>
</body>
</html>

Просмотреть файл

@ -24,17 +24,7 @@
<script src="../resources/utils.js"></script>
<div id="main"></div>
<script>
// Load the image into memory first to make sure it's decoded.
function load_image() {
const img = document.createElement("img");
img.src = "../resources/circles.png";
return new Promise(resolve => {
img.onload = async () => resolve();
});
}
test_fcp("First contentful paint fires due to scale becoming positive.", load_image)
test_fcp("First contentful paint fires due to scale becoming positive.")
</script>
</body>
</html>

Просмотреть файл

@ -24,17 +24,7 @@
<script src="../resources/utils.js"></script>
<div id="main"></div>
<script>
// Load the image into memory first to make sure it's decoded.
function load_image() {
const img = document.createElement("img");
img.src = "../resources/circles.png";
return new Promise(resolve => {
img.onload = async () => resolve();
});
}
test_fcp("First contentful paint fires due to opacity-revealed element.", load_image);
test_fcp("First contentful paint fires due to opacity-revealed element.");
</script>
</body>
</html>

Просмотреть файл

@ -23,17 +23,7 @@
<script src="../resources/utils.js"></script>
<div id="main"></div>
<script>
// Load the image into memory first to make sure it's decoded.
function load_image() {
const img = document.createElement("img");
img.src = "../resources/circles.png";
return new Promise(resolve => {
img.onload = async () => resolve();
});
}
test_fcp("First contentful paint fires due to intersection with document.", load_image)
test_fcp("First contentful paint fires due to intersection with document.")
</script>
</body>
</html>

Просмотреть файл

@ -21,17 +21,7 @@
<div id="main">
</div>
<script>
// Load the image into memory first to make sure it's decoded.
function load_image() {
const img = document.createElement("img");
img.src = "../resources/circles.png";
return new Promise(resolve => {
img.onload = async () => resolve();
});
}
test_fcp("First contentful paint fires due to pseudo-element image.", load_image)
test_fcp("First contentful paint fires due to pseudo-element image.")
</script>
</body>

Просмотреть файл

@ -29,17 +29,7 @@
<div id="text">TEXT</div>
</div>
<script>
// Load the image into memory first to make sure it's decoded.
function load_image() {
const img = document.createElement("img");
img.src = "../resources/circles.png";
return new Promise(resolve => {
img.onload = async () => resolve();
});
}
test_fcp("Whitespace should not count as contentful.", load_image)
test_fcp("Whitespace should not count as contentful.")
</script>
</body>
</html>

Просмотреть файл

@ -4,20 +4,22 @@
<script>
const img = document.createElement('IMG');
img.src = 'circles.png';
var observer = new PerformanceObserver(function(list, obj) {
var paintEntries = list.getEntries();
for (let i = 0; i < paintEntries.length; i++) {
// postMessage doesn't allow sending the entry object over directly
var dataToSend = {
"entryType": paintEntries[i]["entryType"],
"name": paintEntries[i]["name"]
};
parent.postMessage(dataToSend, '*');
img.onload = function() {
function sendPaintEntries() {
const paintEntries = performance.getEntriesByType('paint');
if (paintEntries.length < 2) {
setTimeout(sendPaintEntries, 20);
return;
}
});
observer.observe({"type": "paint"});
let entryContents = paintEntries.length + '';
for (let i = 0; i < paintEntries.length; i++) {
const entry = paintEntries[i];
entryContents += ' ' + entry.entryType + ' ' + entry.name;
}
parent.postMessage(entryContents, '*');
};
sendPaintEntries();
};
document.getElementById('image').appendChild(img);
</script>
</body>

Просмотреть файл

@ -32,7 +32,7 @@ async function assertFirstContentfulPaint(t) {
});
}
async function test_fcp(label, before_assert_fcp_func) {
async function test_fcp(label) {
setup({"hide_test_state": true});
const style = document.createElement('style');
document.head.appendChild(style);
@ -43,9 +43,6 @@ async function test_fcp(label, before_assert_fcp_func) {
await assertNoFirstContentfulPaint(t);
main.className = 'preFCP';
await assertNoFirstContentfulPaint(t);
if (before_assert_fcp_func) {
await before_assert_fcp_func();
}
main.className = 'contentful';
await assertFirstContentfulPaint(t);
}, label);

Просмотреть файл

@ -6,35 +6,17 @@
<iframe id="listening-iframe" src="resources/subframe-sending-paint.html"></iframe>
<script>
setup({"hide_test_state": true});
var entriesExpectToReceive = [
{
'entryType': 'paint',
'name': 'first-paint'
},
{
'entryType': 'paint',
'name': 'first-contentful-paint'
}
];
async_test(function (t) {
assert_implements(window.PerformancePaintTiming, "Paint Timing isn't supported.");
let paintingIframeHasDispatchedEntries = false;
window.addEventListener('message', t.step_func(e => {
if (!paintingIframeHasDispatchedEntries) {
// Check paint-timing entries from the painting iframe.
for (let i = 0; i < entriesExpectToReceive.length; i++) {
if (entriesExpectToReceive[i].entryType == e.data.entryType &&
entriesExpectToReceive[i].name == e.data.name) {
entriesExpectToReceive.splice(i, 1);
break;
}
}
if (entriesExpectToReceive.length == 0) {
paintingIframeHasDispatchedEntries = true;
// Ask the listening iframe to send its paint-timing entries.
document.getElementById('listening-iframe').
contentWindow.postMessage('', '*');
}
assert_equals(e.data, '2 paint first-paint paint first-contentful-paint');
paintingIframeHasDispatchedEntries = true;
// Ask the listening iframe to send its paint-timing entries.
document.getElementById('listening-iframe').
contentWindow.postMessage('', '*');
return;
}
// Check the paint-timing entries from the listening iframe.

304
tools/browsertime/package-lock.json сгенерированный
Просмотреть файл

@ -24,26 +24,26 @@
}
},
"@jimp/bmp": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.16.1.tgz",
"integrity": "sha512-iwyNYQeBawrdg/f24x3pQ5rEx+/GwjZcCXd3Kgc+ZUd+Ivia7sIqBsOnDaMZdKCBPlfW364ekexnlOqyVa0NWg==",
"version": "0.16.0",
"resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.16.0.tgz",
"integrity": "sha512-lc4Ecyys6mRpKHLjFefkS1irCeIBTCpDBjKvNkU/6cIeIMXrFhv290MDT0WCL4UNFjJC/oU2PPraq+M+RkAcpA==",
"dev": true,
"optional": true,
"requires": {
"@babel/runtime": "^7.7.2",
"@jimp/utils": "^0.16.1",
"@jimp/utils": "^0.16.0",
"bmp-js": "^0.1.0"
}
},
"@jimp/core": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.16.1.tgz",
"integrity": "sha512-la7kQia31V6kQ4q1kI/uLimu8FXx7imWVajDGtwUG8fzePLWDFJyZl0fdIXVCL1JW2nBcRHidUot6jvlRDi2+g==",
"version": "0.16.0",
"resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.16.0.tgz",
"integrity": "sha512-7WBYr3BX84fc9tuA86EDhAKNyT9QLcbVYk4whwvshxKtODPxlF1hmZU6Xmx2shoJ62JJtiWLsPsXAHKfEuERtQ==",
"dev": true,
"optional": true,
"requires": {
"@babel/runtime": "^7.7.2",
"@jimp/utils": "^0.16.1",
"@jimp/utils": "^0.16.0",
"any-base": "^1.1.0",
"buffer": "^5.2.0",
"exif-parser": "^0.1.12",
@ -68,322 +68,322 @@
}
},
"@jimp/custom": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.16.1.tgz",
"integrity": "sha512-DNUAHNSiUI/j9hmbatD6WN/EBIyeq4AO0frl5ETtt51VN1SvE4t4v83ZA/V6ikxEf3hxLju4tQ5Pc3zmZkN/3A==",
"version": "0.16.0",
"resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.16.0.tgz",
"integrity": "sha512-xN9WHeW2RP3gLdXdehCgnzKq8l9ezMsfWpkZP0HYtGqwGDSRXx+LNGR2Da1J/tV0pB+qbt67gAXtaxkJwdQ3cA==",
"dev": true,
"optional": true,
"requires": {
"@babel/runtime": "^7.7.2",
"@jimp/core": "^0.16.1"
"@jimp/core": "^0.16.0"
}
},
"@jimp/gif": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.16.1.tgz",
"integrity": "sha512-r/1+GzIW1D5zrP4tNrfW+3y4vqD935WBXSc8X/wm23QTY9aJO9Lw6PEdzpYCEY+SOklIFKaJYUAq/Nvgm/9ryw==",
"version": "0.16.0",
"resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.16.0.tgz",
"integrity": "sha512-thc3C6/dvGKEVTMxiX82ruRAitIx7EstThqzrd0qk7Yf2O3qbrRZuENl6KNn2PXpmkr6fjcfFLWVM39bP4MG1Q==",
"dev": true,
"optional": true,
"requires": {
"@babel/runtime": "^7.7.2",
"@jimp/utils": "^0.16.1",
"@jimp/utils": "^0.16.0",
"gifwrap": "^0.9.2",
"omggif": "^1.0.9"
}
},
"@jimp/jpeg": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.16.1.tgz",
"integrity": "sha512-8352zrdlCCLFdZ/J+JjBslDvml+fS3Z8gttdml0We759PnnZGqrnPRhkOEOJbNUlE+dD4ckLeIe6NPxlS/7U+w==",
"version": "0.16.0",
"resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.16.0.tgz",
"integrity": "sha512-pzlv92YZi7ySvIICNkB0eMphLztBcTAMH2kl5lxFMzF1FDv2FR2d/FI1ph6DSzBV8VYFDu4AM1lJRq3hFJurgQ==",
"dev": true,
"optional": true,
"requires": {
"@babel/runtime": "^7.7.2",
"@jimp/utils": "^0.16.1",
"jpeg-js": "0.4.2"
"@jimp/utils": "^0.16.0",
"jpeg-js": "^0.4.0"
}
},
"@jimp/plugin-blit": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.16.1.tgz",
"integrity": "sha512-fKFNARm32RoLSokJ8WZXHHH2CGzz6ire2n1Jh6u+XQLhk9TweT1DcLHIXwQMh8oR12KgjbgsMGvrMVlVknmOAg==",
"version": "0.16.0",
"resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.16.0.tgz",
"integrity": "sha512-CrakcEvr2ztOwECKpuwmwhXArbtDP2SB44WV0wrFXtuss2mkBbL/hIkUmTnLyJGpwIflj4Vww9m5yIreG5lgUQ==",
"dev": true,
"optional": true,
"requires": {
"@babel/runtime": "^7.7.2",
"@jimp/utils": "^0.16.1"
"@jimp/utils": "^0.16.0"
}
},
"@jimp/plugin-blur": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.16.1.tgz",
"integrity": "sha512-1WhuLGGj9MypFKRcPvmW45ht7nXkOKu+lg3n2VBzIB7r4kKNVchuI59bXaCYQumOLEqVK7JdB4glaDAbCQCLyw==",
"version": "0.16.0",
"resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.16.0.tgz",
"integrity": "sha512-CfTrQR4JY+DGtGbdAbdZgbUpjOqtcF+kmGOoa1uh3NF16tn1glbE8/0SA9YkgvHxNTmekwuT7Lu0nRq09MKVJw==",
"dev": true,
"optional": true,
"requires": {
"@babel/runtime": "^7.7.2",
"@jimp/utils": "^0.16.1"
"@jimp/utils": "^0.16.0"
}
},
"@jimp/plugin-circle": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.16.1.tgz",
"integrity": "sha512-JK7yi1CIU7/XL8hdahjcbGA3V7c+F+Iw+mhMQhLEi7Q0tCnZ69YJBTamMiNg3fWPVfMuvWJJKOBRVpwNTuaZRg==",
"version": "0.16.0",
"resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.16.0.tgz",
"integrity": "sha512-O79288GKwUIxpHR3qyYg0paH/Iegz+Bdo2ePIvD/M3MigEzVdj5dJ/CQXz2cUnJx87rc0k1N5cTI4floIgv0tg==",
"dev": true,
"optional": true,
"requires": {
"@babel/runtime": "^7.7.2",
"@jimp/utils": "^0.16.1"
"@jimp/utils": "^0.16.0"
}
},
"@jimp/plugin-color": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.16.1.tgz",
"integrity": "sha512-9yQttBAO5SEFj7S6nJK54f+1BnuBG4c28q+iyzm1JjtnehjqMg6Ljw4gCSDCvoCQ3jBSYHN66pmwTV74SU1B7A==",
"version": "0.16.0",
"resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.16.0.tgz",
"integrity": "sha512-S4CbN1r5+VjUF9OBIyWxWBTXRNutLQqAAOkq7QX//lS4HY76eOAafgWWwZR7ci9WWZT8uyyw4tfd4ePoBvoYhw==",
"dev": true,
"optional": true,
"requires": {
"@babel/runtime": "^7.7.2",
"@jimp/utils": "^0.16.1",
"@jimp/utils": "^0.16.0",
"tinycolor2": "^1.4.1"
}
},
"@jimp/plugin-contain": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.16.1.tgz",
"integrity": "sha512-44F3dUIjBDHN+Ym/vEfg+jtjMjAqd2uw9nssN67/n4FdpuZUVs7E7wadKY1RRNuJO+WgcD5aDQcsvurXMETQTg==",
"version": "0.16.0",
"resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.16.0.tgz",
"integrity": "sha512-ZAVe9ad0/TDLSPutIP/8Z+jXXOv638w/FZeA3avTAI5GfWV7ZBT6BB7kDI3iZTl+SHUjv/MlzHCS99WCnpc1hg==",
"dev": true,
"optional": true,
"requires": {
"@babel/runtime": "^7.7.2",
"@jimp/utils": "^0.16.1"
"@jimp/utils": "^0.16.0"
}
},
"@jimp/plugin-cover": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.16.1.tgz",
"integrity": "sha512-YztWCIldBAVo0zxcQXR+a/uk3/TtYnpKU2CanOPJ7baIuDlWPsG+YE4xTsswZZc12H9Kl7CiziEbDtvF9kwA/Q==",
"version": "0.16.0",
"resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.16.0.tgz",
"integrity": "sha512-gJGorvc4HOeSR0dNR29mYLLXtrWvgj8da0B/lUJSb0R2AvUrb+VgLKSfFPyf+nL/jtcm9/CJzYhAPcz13zmRKA==",
"dev": true,
"optional": true,
"requires": {
"@babel/runtime": "^7.7.2",
"@jimp/utils": "^0.16.1"
"@jimp/utils": "^0.16.0"
}
},
"@jimp/plugin-crop": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.16.1.tgz",
"integrity": "sha512-UQdva9oQzCVadkyo3T5Tv2CUZbf0klm2cD4cWMlASuTOYgaGaFHhT9st+kmfvXjKL8q3STkBu/zUPV6PbuV3ew==",
"version": "0.16.0",
"resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.16.0.tgz",
"integrity": "sha512-I5McmdrNodg0iU815qOsuI8CjkwiRsFRTY4/LBOsLGHZasvxhzFxGcwD3SgnohdIkhRc3tX8jfvKg2pdPbD2AA==",
"dev": true,
"optional": true,
"requires": {
"@babel/runtime": "^7.7.2",
"@jimp/utils": "^0.16.1"
"@jimp/utils": "^0.16.0"
}
},
"@jimp/plugin-displace": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.16.1.tgz",
"integrity": "sha512-iVAWuz2+G6Heu8gVZksUz+4hQYpR4R0R/RtBzpWEl8ItBe7O6QjORAkhxzg+WdYLL2A/Yd4ekTpvK0/qW8hTVw==",
"version": "0.16.0",
"resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.16.0.tgz",
"integrity": "sha512-+c5n5jDiN/neAuAxAAy55Gpycgmyay1PwUy8qKM1fgfBE874mrF5C4u1ThFz4OiDkRirKLpncRmrUMHa9boZtA==",
"dev": true,
"optional": true,
"requires": {
"@babel/runtime": "^7.7.2",
"@jimp/utils": "^0.16.1"
"@jimp/utils": "^0.16.0"
}
},
"@jimp/plugin-dither": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.16.1.tgz",
"integrity": "sha512-tADKVd+HDC9EhJRUDwMvzBXPz4GLoU6s5P7xkVq46tskExYSptgj5713J5Thj3NMgH9Rsqu22jNg1H/7tr3V9Q==",
"version": "0.16.0",
"resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.16.0.tgz",
"integrity": "sha512-rsLHSGnpWniQXoughYXRCbK/8KKXi+avV5z5mHIKzAKS4areXW03XlLqmy9o26q2h0g/YV5Hkxo9jwIw0v2Fpg==",
"dev": true,
"optional": true,
"requires": {
"@babel/runtime": "^7.7.2",
"@jimp/utils": "^0.16.1"
"@jimp/utils": "^0.16.0"
}
},
"@jimp/plugin-fisheye": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.16.1.tgz",
"integrity": "sha512-BWHnc5hVobviTyIRHhIy9VxI1ACf4CeSuCfURB6JZm87YuyvgQh5aX5UDKtOz/3haMHXBLP61ZBxlNpMD8CG4A==",
"version": "0.16.0",
"resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.16.0.tgz",
"integrity": "sha512-P6KsHQHUOWyDprxKl4chPTwKIJNbXB7LGDQH6Bq/q8zZ9XwYXGnTmkHA/BwGKI6HGCj/+R2WoP3Cnhwm6XaIpg==",
"dev": true,
"optional": true,
"requires": {
"@babel/runtime": "^7.7.2",
"@jimp/utils": "^0.16.1"
"@jimp/utils": "^0.16.0"
}
},
"@jimp/plugin-flip": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.16.1.tgz",
"integrity": "sha512-KdxTf0zErfZ8DyHkImDTnQBuHby+a5YFdoKI/G3GpBl3qxLBvC+PWkS2F/iN3H7wszP7/TKxTEvWL927pypT0w==",
"version": "0.16.0",
"resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.16.0.tgz",
"integrity": "sha512-5MlqM1RJohk0NU0Z3ZtviI0DqHXDB0OuRk3dimUIquePz1OocFCt9Z4bBbDRIczGZFOrDrCrpHMfMxPjwm7eXw==",
"dev": true,
"optional": true,
"requires": {
"@babel/runtime": "^7.7.2",
"@jimp/utils": "^0.16.1"
"@jimp/utils": "^0.16.0"
}
},
"@jimp/plugin-gaussian": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.16.1.tgz",
"integrity": "sha512-u9n4wjskh3N1mSqketbL6tVcLU2S5TEaFPR40K6TDv4phPLZALi1Of7reUmYpVm8mBDHt1I6kGhuCJiWvzfGyg==",
"version": "0.16.0",
"resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.16.0.tgz",
"integrity": "sha512-oP2Hg4gR4uq9id1gF+SfTvPrzqZc3fVY+t6gwxPXPgpnb9S5UVuSQbwtixY1EEBC9XRdX2XFko9eUul8dTnUpQ==",
"dev": true,
"optional": true,
"requires": {
"@babel/runtime": "^7.7.2",
"@jimp/utils": "^0.16.1"
"@jimp/utils": "^0.16.0"
}
},
"@jimp/plugin-invert": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.16.1.tgz",
"integrity": "sha512-2DKuyVXANH8WDpW9NG+PYFbehzJfweZszFYyxcaewaPLN0GxvxVLOGOPP1NuUTcHkOdMFbE0nHDuB7f+sYF/2w==",
"version": "0.16.0",
"resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.16.0.tgz",
"integrity": "sha512-RFsES55G7po6rv35A/3jz7IA1BOr8krX4H0zmtKUprcrhFl+El9iZojVCpJQRJ5QKQVS3iXi5H6EGN7AT1HykQ==",
"dev": true,
"optional": true,
"requires": {
"@babel/runtime": "^7.7.2",
"@jimp/utils": "^0.16.1"
"@jimp/utils": "^0.16.0"
}
},
"@jimp/plugin-mask": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.16.1.tgz",
"integrity": "sha512-snfiqHlVuj4bSFS0v96vo2PpqCDMe4JB+O++sMo5jF5mvGcGL6AIeLo8cYqPNpdO6BZpBJ8MY5El0Veckhr39Q==",
"version": "0.16.0",
"resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.16.0.tgz",
"integrity": "sha512-inJweZgTNYZQdF0m5f/or5/LCLhpz4ccSDsK9HveuFQ82ITfJcvFaUlvlo11pHRl2r+Q92Er7B5g7icMIzXHZw==",
"dev": true,
"optional": true,
"requires": {
"@babel/runtime": "^7.7.2",
"@jimp/utils": "^0.16.1"
"@jimp/utils": "^0.16.0"
}
},
"@jimp/plugin-normalize": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.16.1.tgz",
"integrity": "sha512-dOQfIOvGLKDKXPU8xXWzaUeB0nvkosHw6Xg1WhS1Z5Q0PazByhaxOQkSKgUryNN/H+X7UdbDvlyh/yHf3ITRaw==",
"version": "0.16.0",
"resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.16.0.tgz",
"integrity": "sha512-sfqhHDGks0ccqIaTCG/dFJ772eGi8bewxIvrQkeLw5TizzPZ3S+C4GXKwlkX2z5dyQr30cHM5Mv6+XhNNLEHWw==",
"dev": true,
"optional": true,
"requires": {
"@babel/runtime": "^7.7.2",
"@jimp/utils": "^0.16.1"
"@jimp/utils": "^0.16.0"
}
},
"@jimp/plugin-print": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.16.1.tgz",
"integrity": "sha512-ceWgYN40jbN4cWRxixym+csyVymvrryuKBQ+zoIvN5iE6OyS+2d7Mn4zlNgumSczb9GGyZZESIgVcBDA1ezq0Q==",
"version": "0.16.0",
"resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.16.0.tgz",
"integrity": "sha512-tQJfSOTf+las/PJpdUK9Aw9EdComQ50zl29TgMrAULuae1lh+e/A188ZhNQzTCpAAc/PEku8xoke+rYUU1AVig==",
"dev": true,
"optional": true,
"requires": {
"@babel/runtime": "^7.7.2",
"@jimp/utils": "^0.16.1",
"@jimp/utils": "^0.16.0",
"load-bmfont": "^1.4.0"
}
},
"@jimp/plugin-resize": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.16.1.tgz",
"integrity": "sha512-u4JBLdRI7dargC04p2Ha24kofQBk3vhaf0q8FwSYgnCRwxfvh2RxvhJZk9H7Q91JZp6wgjz/SjvEAYjGCEgAwQ==",
"version": "0.16.0",
"resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.16.0.tgz",
"integrity": "sha512-aI5H1Xe1fE1phBBI0EgQiVgMEXJ7cy2CXH+H7WSxnrdZJTnt9emzc4LnvKEOPBY6dCPw3P7k/BHp9SDTpUKSOQ==",
"dev": true,
"optional": true,
"requires": {
"@babel/runtime": "^7.7.2",
"@jimp/utils": "^0.16.1"
"@jimp/utils": "^0.16.0"
}
},
"@jimp/plugin-rotate": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.16.1.tgz",
"integrity": "sha512-ZUU415gDQ0VjYutmVgAYYxC9Og9ixu2jAGMCU54mSMfuIlmohYfwARQmI7h4QB84M76c9hVLdONWjuo+rip/zg==",
"version": "0.16.0",
"resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.16.0.tgz",
"integrity": "sha512-YTKo4LntC2h46H6+De+3ctt8MacC+fTbIdw527BBBIKF44aWYn0uAQlAO+R+Aemnq4YqNnCnrZzPtWYZXA6nNw==",
"dev": true,
"optional": true,
"requires": {
"@babel/runtime": "^7.7.2",
"@jimp/utils": "^0.16.1"
"@jimp/utils": "^0.16.0"
}
},
"@jimp/plugin-scale": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.16.1.tgz",
"integrity": "sha512-jM2QlgThIDIc4rcyughD5O7sOYezxdafg/2Xtd1csfK3z6fba3asxDwthqPZAgitrLgiKBDp6XfzC07Y/CefUw==",
"version": "0.16.0",
"resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.16.0.tgz",
"integrity": "sha512-AfDnTIjBzGdvJ1K7MkUexgkGGAYDzpNzkYoCpfaRNKl/txoivaA6iKfvCiE7i1IDXq5mRCLkjQjMF43l8kwv5g==",
"dev": true,
"optional": true,
"requires": {
"@babel/runtime": "^7.7.2",
"@jimp/utils": "^0.16.1"
"@jimp/utils": "^0.16.0"
}
},
"@jimp/plugin-shadow": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.16.1.tgz",
"integrity": "sha512-MeD2Is17oKzXLnsphAa1sDstTu6nxscugxAEk3ji0GV1FohCvpHBcec0nAq6/czg4WzqfDts+fcPfC79qWmqrA==",
"version": "0.16.0",
"resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.16.0.tgz",
"integrity": "sha512-8O1CKwvSnrrAIuAM3BEDTwt4U5oRVB5pXxnRegYXDuFFLDPIp2N4ILQqC2NaN+PBaVvj1JuLYuxmNzja0uRQKQ==",
"dev": true,
"optional": true,
"requires": {
"@babel/runtime": "^7.7.2",
"@jimp/utils": "^0.16.1"
"@jimp/utils": "^0.16.0"
}
},
"@jimp/plugin-threshold": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.16.1.tgz",
"integrity": "sha512-iGW8U/wiCSR0+6syrPioVGoSzQFt4Z91SsCRbgNKTAk7D+XQv6OI78jvvYg4o0c2FOlwGhqz147HZV5utoSLxA==",
"version": "0.16.0",
"resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.16.0.tgz",
"integrity": "sha512-PNrB6IIF7kDGu7A/cyNAy3pchWtXbJGdpowkW6hcEzXOR+FwBRMuo5LS+q/eedo86qQ2F1vw5dm/nWYJxNxvkg==",
"dev": true,
"optional": true,
"requires": {
"@babel/runtime": "^7.7.2",
"@jimp/utils": "^0.16.1"
"@jimp/utils": "^0.16.0"
}
},
"@jimp/plugins": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.16.1.tgz",
"integrity": "sha512-c+lCqa25b+4q6mJZSetlxhMoYuiltyS+ValLzdwK/47+aYsq+kcJNl+TuxIEKf59yr9+5rkbpsPkZHLF/V7FFA==",
"version": "0.16.0",
"resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.16.0.tgz",
"integrity": "sha512-aiyn/9MrSqVJwsnBmkbHD4DWTowULdP4NEes8Vt738KxZMw1UawKbEbj3/CzHIeEIQKjDECTi+jNd5HIbDq9LQ==",
"dev": true,
"optional": true,
"requires": {
"@babel/runtime": "^7.7.2",
"@jimp/plugin-blit": "^0.16.1",
"@jimp/plugin-blur": "^0.16.1",
"@jimp/plugin-circle": "^0.16.1",
"@jimp/plugin-color": "^0.16.1",
"@jimp/plugin-contain": "^0.16.1",
"@jimp/plugin-cover": "^0.16.1",
"@jimp/plugin-crop": "^0.16.1",
"@jimp/plugin-displace": "^0.16.1",
"@jimp/plugin-dither": "^0.16.1",
"@jimp/plugin-fisheye": "^0.16.1",
"@jimp/plugin-flip": "^0.16.1",
"@jimp/plugin-gaussian": "^0.16.1",
"@jimp/plugin-invert": "^0.16.1",
"@jimp/plugin-mask": "^0.16.1",
"@jimp/plugin-normalize": "^0.16.1",
"@jimp/plugin-print": "^0.16.1",
"@jimp/plugin-resize": "^0.16.1",
"@jimp/plugin-rotate": "^0.16.1",
"@jimp/plugin-scale": "^0.16.1",
"@jimp/plugin-shadow": "^0.16.1",
"@jimp/plugin-threshold": "^0.16.1",
"@jimp/plugin-blit": "^0.16.0",
"@jimp/plugin-blur": "^0.16.0",
"@jimp/plugin-circle": "^0.16.0",
"@jimp/plugin-color": "^0.16.0",
"@jimp/plugin-contain": "^0.16.0",
"@jimp/plugin-cover": "^0.16.0",
"@jimp/plugin-crop": "^0.16.0",
"@jimp/plugin-displace": "^0.16.0",
"@jimp/plugin-dither": "^0.16.0",
"@jimp/plugin-fisheye": "^0.16.0",
"@jimp/plugin-flip": "^0.16.0",
"@jimp/plugin-gaussian": "^0.16.0",
"@jimp/plugin-invert": "^0.16.0",
"@jimp/plugin-mask": "^0.16.0",
"@jimp/plugin-normalize": "^0.16.0",
"@jimp/plugin-print": "^0.16.0",
"@jimp/plugin-resize": "^0.16.0",
"@jimp/plugin-rotate": "^0.16.0",
"@jimp/plugin-scale": "^0.16.0",
"@jimp/plugin-shadow": "^0.16.0",
"@jimp/plugin-threshold": "^0.16.0",
"timm": "^1.6.1"
}
},
"@jimp/png": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.16.1.tgz",
"integrity": "sha512-iyWoCxEBTW0OUWWn6SveD4LePW89kO7ZOy5sCfYeDM/oTPLpR8iMIGvZpZUz1b8kvzFr27vPst4E5rJhGjwsdw==",
"version": "0.16.0",
"resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.16.0.tgz",
"integrity": "sha512-3uDwCeZRaHTq6Jqjav37n73IGL4vrDkoHLzkC+dAGcSdaKnUnRxD/sO4CBTK1cHttJhsf5Xk/+0dO+qaqIEvNA==",
"dev": true,
"optional": true,
"requires": {
"@babel/runtime": "^7.7.2",
"@jimp/utils": "^0.16.1",
"@jimp/utils": "^0.16.0",
"pngjs": "^3.3.3"
}
},
"@jimp/tiff": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.16.1.tgz",
"integrity": "sha512-3K3+xpJS79RmSkAvFMgqY5dhSB+/sxhwTFA9f4AVHUK0oKW+u6r52Z1L0tMXHnpbAdR9EJ+xaAl2D4x19XShkQ==",
"version": "0.16.0",
"resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.16.0.tgz",
"integrity": "sha512-wiGgIKGtUwR7vUi+PHv7qzEKhlnqT/k78qtOgsF6PiGhXGevJWBIniD4LksbQaW+Ph1Jwl3ovvYEdS89Db46Bw==",
"dev": true,
"optional": true,
"requires": {
@ -392,25 +392,25 @@
}
},
"@jimp/types": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.16.1.tgz",
"integrity": "sha512-g1w/+NfWqiVW4CaXSJyD28JQqZtm2eyKMWPhBBDCJN9nLCN12/Az0WFF3JUAktzdsEC2KRN2AqB1a2oMZBNgSQ==",
"version": "0.16.0",
"resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.16.0.tgz",
"integrity": "sha512-T0VBF1HFXZ+Ez48zQ0sxrOpcFbfSzCulaVONWeEi/CqcNv2B7UmiaA81bw9uLGZ40VIOrFYHB20ma0m1asYBvw==",
"dev": true,
"optional": true,
"requires": {
"@babel/runtime": "^7.7.2",
"@jimp/bmp": "^0.16.1",
"@jimp/gif": "^0.16.1",
"@jimp/jpeg": "^0.16.1",
"@jimp/png": "^0.16.1",
"@jimp/tiff": "^0.16.1",
"@jimp/bmp": "^0.16.0",
"@jimp/gif": "^0.16.0",
"@jimp/jpeg": "^0.16.0",
"@jimp/png": "^0.16.0",
"@jimp/tiff": "^0.16.0",
"timm": "^1.6.1"
}
},
"@jimp/utils": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.16.1.tgz",
"integrity": "sha512-8fULQjB0x4LzUSiSYG6ZtQl355sZjxbv8r9PPAuYHzS9sGiSHJQavNqK/nKnpDsVkU88/vRGcE7t3nMU0dEnVw==",
"version": "0.16.0",
"resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.16.0.tgz",
"integrity": "sha512-dZJd5Rq4yOjPtqN/bArNy0v03nnaiHCf/Qct2wdiqK0k4wsfDL2Lle9XmswNcPPFuoL/LNnYY2E5ruAnatF/4A==",
"dev": true,
"optional": true,
"requires": {
@ -1289,9 +1289,9 @@
"dev": true
},
"@types/node": {
"version": "14.10.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.10.0.tgz",
"integrity": "sha512-SOIyrdADB4cq6eY1F+9iU48iIomFAPltu11LCvA9PKcyEwHadjCFzNVPotAR+oEJA0bCP4Xvvgy+vwu1ZjVh8g==",
"version": "14.6.1",
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.6.1.tgz",
"integrity": "sha512-HnYlg/BRF8uC1FyKRFZwRaCPTPYKa+6I8QiUZFLredaGOou481cgFS4wKRFyKvQtX8xudqkSdBczJHIYSQYKrQ==",
"dev": true
},
"adbkit": {
@ -1403,8 +1403,8 @@
}
},
"browsertime": {
"version": "https://github.com/sitespeedio/browsertime/tarball/8bf45e80ccc65237c622246b11c0739f0409e8e4",
"integrity": "sha512-lvEqRn8bRh0HeRfVC1et3sU/CqWG6jSAwpiRjfHSVXeuNCUYaKLbfgr9VkGcLJXYSq4Mgcy7nXeaZNMLjy8FXA==",
"version": "https://github.com/sitespeedio/browsertime/tarball/89771a1d6be54114db190427dbc281582cba3d47",
"integrity": "sha512-JCP+j6bajHweQ3G7uZXYk5j5QqkHxH+NU1fZj4tOIIFPzBK9MWfcz2GjEzbu7p2XfRD04kC2l2bVXPe+XZz5hA==",
"dev": true,
"requires": {
"@cypress/xvfb": "1.2.4",

Просмотреть файл

@ -5,7 +5,7 @@
"license": "MPL-2.0",
"dependencies": {},
"devDependencies": {
"browsertime": "https://github.com/sitespeedio/browsertime/tarball/8bf45e80ccc65237c622246b11c0739f0409e8e4"
"browsertime": "https://github.com/sitespeedio/browsertime/tarball/89771a1d6be54114db190427dbc281582cba3d47"
},
"notes(private)": "We don't want to publish to npm, so this is marked as private",
"private": true