зеркало из https://github.com/mozilla/gecko-dev.git
Merge m-c to inbound. a=merge
This commit is contained in:
Коммит
c01026a3da
|
@ -27,12 +27,4 @@ BROWSER_CHROME_MANIFESTS += [
|
|||
]
|
||||
|
||||
MOCHITEST_MANIFESTS += ['test/mochitest/mochitest.ini']
|
||||
|
||||
if CONFIG['OS_ARCH'] != 'Darwin':
|
||||
XPCSHELL_TESTS_MANIFESTS += [
|
||||
'test/xpcshell/xpcshell-remote.ini',
|
||||
]
|
||||
|
||||
XPCSHELL_TESTS_MANIFESTS += [
|
||||
'test/xpcshell/xpcshell.ini',
|
||||
]
|
||||
XPCSHELL_TESTS_MANIFESTS += ['test/xpcshell/xpcshell.ini']
|
||||
|
|
|
@ -4,7 +4,6 @@ const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
|
|||
|
||||
/* exported createHttpServer, promiseConsoleOutput */
|
||||
|
||||
Components.utils.import("resource://gre/modules/Services.jsm");
|
||||
Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "AppConstants",
|
||||
|
@ -25,11 +24,11 @@ XPCOMUtils.defineLazyModuleGetter(this, "NetUtil",
|
|||
"resource://gre/modules/NetUtil.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "Schemas",
|
||||
"resource://gre/modules/Schemas.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "Services",
|
||||
"resource://gre/modules/Services.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "TestUtils",
|
||||
"resource://testing-common/TestUtils.jsm");
|
||||
|
||||
Services.prefs.setBoolPref("extensions.webextensions.remote", false);
|
||||
|
||||
ExtensionTestUtils.init(this);
|
||||
|
||||
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
"use strict";
|
||||
|
||||
Services.prefs.setBoolPref("extensions.webextensions.remote", true);
|
||||
Services.prefs.setIntPref("dom.ipc.keepProcessesAlive.extension", 1);
|
|
@ -1,8 +0,0 @@
|
|||
[test_ext_bookmarks.js]
|
||||
[test_ext_browsingData.js]
|
||||
[test_ext_browsingData_cookies_cache.js]
|
||||
[test_ext_browsingData_downloads.js]
|
||||
[test_ext_browsingData_passwords.js]
|
||||
[test_ext_browsingData_settings.js]
|
||||
[test_ext_history.js]
|
||||
[test_ext_geckoProfiler_control.js]
|
|
@ -1,7 +0,0 @@
|
|||
[DEFAULT]
|
||||
head = head.js head_remote.js
|
||||
firefox-appdir = browser
|
||||
tags = webextensions remote-webextensions
|
||||
dupe-manifest =
|
||||
|
||||
[include:xpcshell-common.ini]
|
|
@ -1,23 +1,16 @@
|
|||
[DEFAULT]
|
||||
head = head.js
|
||||
firefox-appdir = browser
|
||||
tags = webextensions in-process-webextensions
|
||||
dupe-manifest =
|
||||
|
||||
# This file contains tests which are not affected by multi-process
|
||||
# configuration, or do not support out-of-process content or extensions
|
||||
# for one reason or another.
|
||||
#
|
||||
# Tests which are affected by remote content or remote extensions should
|
||||
# go in one of:
|
||||
#
|
||||
# - xpcshell-common.ini
|
||||
# For tests which should run in all configurations.
|
||||
# - xpcshell-remote.ini
|
||||
# For tests which should only run with both remote extensions and remote content.
|
||||
tags = webextensions
|
||||
|
||||
[test_ext_bookmarks.js]
|
||||
[test_ext_browsingData.js]
|
||||
[test_ext_browsingData_cookies_cache.js]
|
||||
[test_ext_browsingData_downloads.js]
|
||||
[test_ext_browsingData_passwords.js]
|
||||
[test_ext_browsingData_settings.js]
|
||||
[test_ext_history.js]
|
||||
[test_ext_manifest_commands.js]
|
||||
[test_ext_manifest_omnibox.js]
|
||||
[test_ext_manifest_permissions.js]
|
||||
|
||||
[include:xpcshell-common.ini]
|
||||
[test_ext_geckoProfiler_control.js]
|
||||
|
|
|
@ -114,6 +114,8 @@
|
|||
#include "mozilla/gfx/GPUProcessManager.h"
|
||||
#include "mozilla/dom/TimeoutManager.h"
|
||||
#include "mozilla/PreloadedStyleSheet.h"
|
||||
#include "mozilla/layers/WebRenderBridgeChild.h"
|
||||
#include "mozilla/layers/WebRenderLayerManager.h"
|
||||
|
||||
#ifdef XP_WIN
|
||||
#undef GetClassName
|
||||
|
@ -2522,6 +2524,14 @@ nsDOMWindowUtils::SetAsyncScrollOffset(nsIDOMNode* aNode,
|
|||
if (!manager) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
if (WebRenderLayerManager* wrlm = manager->AsWebRenderLayerManager()) {
|
||||
WebRenderBridgeChild* wrbc = wrlm->WrBridge();
|
||||
if (!wrbc) {
|
||||
return NS_ERROR_UNEXPECTED;
|
||||
}
|
||||
wrbc->SendSetAsyncScrollOffset(viewId, aX, aY);
|
||||
return NS_OK;
|
||||
}
|
||||
ShadowLayerForwarder* forwarder = manager->AsShadowForwarder();
|
||||
if (!forwarder || !forwarder->HasShadowManager()) {
|
||||
return NS_ERROR_UNEXPECTED;
|
||||
|
@ -2549,6 +2559,14 @@ nsDOMWindowUtils::SetAsyncZoom(nsIDOMNode* aRootElement, float aValue)
|
|||
if (!manager) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
if (WebRenderLayerManager* wrlm = manager->AsWebRenderLayerManager()) {
|
||||
WebRenderBridgeChild* wrbc = wrlm->WrBridge();
|
||||
if (!wrbc) {
|
||||
return NS_ERROR_UNEXPECTED;
|
||||
}
|
||||
wrbc->SendSetAsyncZoom(viewId, aValue);
|
||||
return NS_OK;
|
||||
}
|
||||
ShadowLayerForwarder* forwarder = manager->AsShadowForwarder();
|
||||
if (!forwarder || !forwarder->HasShadowManager()) {
|
||||
return NS_ERROR_UNEXPECTED;
|
||||
|
@ -2575,6 +2593,14 @@ nsDOMWindowUtils::FlushApzRepaints(bool* aOutResult)
|
|||
*aOutResult = false;
|
||||
return NS_OK;
|
||||
}
|
||||
if (WebRenderLayerManager* wrlm = manager->AsWebRenderLayerManager()) {
|
||||
WebRenderBridgeChild* wrbc = wrlm->WrBridge();
|
||||
if (!wrbc) {
|
||||
return NS_ERROR_UNEXPECTED;
|
||||
}
|
||||
wrbc->SendFlushApzRepaints();
|
||||
return NS_OK;
|
||||
}
|
||||
ShadowLayerForwarder* forwarder = manager->AsShadowForwarder();
|
||||
if (!forwarder || !forwarder->HasShadowManager()) {
|
||||
*aOutResult = false;
|
||||
|
|
|
@ -5215,18 +5215,6 @@ ContentParent::RecvClassifyLocal(const URIParams& aURI, const nsCString& aTables
|
|||
return IPC_OK();
|
||||
}
|
||||
|
||||
mozilla::ipc::IPCResult
|
||||
ContentParent::RecvAllocPipelineId(RefPtr<AllocPipelineIdPromise>&& aPromise)
|
||||
{
|
||||
GPUProcessManager* pm = GPUProcessManager::Get();
|
||||
if (!pm) {
|
||||
aPromise->Reject(PromiseRejectReason::HandlerRejected, __func__);
|
||||
return IPC_OK();
|
||||
}
|
||||
aPromise->Resolve(wr::AsPipelineId(pm->AllocateLayerTreeId()), __func__);
|
||||
return IPC_OK();
|
||||
}
|
||||
|
||||
mozilla::ipc::IPCResult
|
||||
ContentParent::RecvFileCreationRequest(const nsID& aID,
|
||||
const nsString& aFullPath,
|
||||
|
|
|
@ -643,9 +643,6 @@ public:
|
|||
nsresult* aRv,
|
||||
nsTArray<nsCString>* aResults) override;
|
||||
|
||||
virtual mozilla::ipc::IPCResult
|
||||
RecvAllocPipelineId(RefPtr<AllocPipelineIdPromise>&& aPromise) override;
|
||||
|
||||
// Use the PHangMonitor channel to ask the child to repaint a tab.
|
||||
void ForceTabPaint(TabParent* aTabParent, uint64_t aLayerObserverEpoch);
|
||||
|
||||
|
|
|
@ -63,7 +63,6 @@ include MemoryReportTypes;
|
|||
// are put into different UnifiedProtocolsXX.cpp files.
|
||||
// XXX Remove this once bug 1069073 is fixed
|
||||
include "mozilla/dom/PContentBridgeParent.h";
|
||||
include "mozilla/layers/WebRenderMessageUtils.h";
|
||||
|
||||
using GeoPosition from "nsGeoPositionIPCSerialiser.h";
|
||||
using AlertNotificationType from "mozilla/AlertNotificationIPCSerializer.h";
|
||||
|
@ -96,7 +95,6 @@ using mozilla::Telemetry::KeyedAccumulation from "mozilla/TelemetryComms.h";
|
|||
using mozilla::Telemetry::ScalarAction from "mozilla/TelemetryComms.h";
|
||||
using mozilla::Telemetry::KeyedScalarAction from "mozilla/TelemetryComms.h";
|
||||
using mozilla::Telemetry::ChildEventData from "mozilla/TelemetryComms.h";
|
||||
using mozilla::wr::PipelineId from "mozilla/webrender/WebRenderTypes.h";
|
||||
|
||||
union ChromeRegistryItem
|
||||
{
|
||||
|
@ -1104,8 +1102,6 @@ parent:
|
|||
async AddMemoryReport(MemoryReport aReport);
|
||||
async FinishMemoryReport(uint32_t aGeneration);
|
||||
|
||||
async AllocPipelineId() returns (PipelineId pipelineId);
|
||||
|
||||
both:
|
||||
async AsyncMessage(nsString aMessage, CpowEntry[] aCpows,
|
||||
Principal aPrincipal, ClonedMessageData aData);
|
||||
|
|
|
@ -79,4 +79,4 @@ to make sure that mozjs_sys also has its Cargo.lock file updated if needed, henc
|
|||
the need to run the cargo update command in js/src as well. Hopefully this will
|
||||
be resolved soon.
|
||||
|
||||
Latest Commit: 102603520d52f335f152ab74b6bcfdae061b6bc8
|
||||
Latest Commit: 76a3213080ca5c2e2a612c3023c50c81a111fd55
|
||||
|
|
|
@ -81,8 +81,9 @@ GPUProcessManager::Shutdown()
|
|||
|
||||
GPUProcessManager::GPUProcessManager()
|
||||
: mTaskFactory(this),
|
||||
mNextLayerTreeId(0),
|
||||
mNextNamespace(0),
|
||||
mIdNamespace(0),
|
||||
mResourceId(0),
|
||||
mNumProcessAttempts(0),
|
||||
mDeviceResetCount(0),
|
||||
mProcess(nullptr),
|
||||
|
@ -90,6 +91,7 @@ GPUProcessManager::GPUProcessManager()
|
|||
{
|
||||
MOZ_COUNT_CTOR(GPUProcessManager);
|
||||
|
||||
mIdNamespace = AllocateNamespace();
|
||||
mObserver = new Observer(this);
|
||||
nsContentUtils::RegisterShutdownObserver(mObserver);
|
||||
|
||||
|
@ -888,8 +890,20 @@ GPUProcessManager::IsLayerTreeIdMapped(uint64_t aLayersId, base::ProcessId aRequ
|
|||
uint64_t
|
||||
GPUProcessManager::AllocateLayerTreeId()
|
||||
{
|
||||
// Allocate tree id by using id namespace.
|
||||
// By it, tree id does not conflict with external image id and
|
||||
// async image pipeline id.
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
return ++mNextLayerTreeId;
|
||||
++mResourceId;
|
||||
if (mResourceId == UINT32_MAX) {
|
||||
// Move to next id namespace.
|
||||
mIdNamespace = AllocateNamespace();
|
||||
mResourceId = 1;
|
||||
}
|
||||
|
||||
uint64_t layerTreeId = mIdNamespace;
|
||||
layerTreeId = (layerTreeId << 32) | mResourceId;
|
||||
return layerTreeId;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
|
|
|
@ -244,8 +244,9 @@ private:
|
|||
RefPtr<Observer> mObserver;
|
||||
ipc::TaskFactory<GPUProcessManager> mTaskFactory;
|
||||
RefPtr<VsyncIOThreadHolder> mVsyncIOThread;
|
||||
uint64_t mNextLayerTreeId;
|
||||
uint32_t mNextNamespace;
|
||||
uint32_t mIdNamespace;
|
||||
uint32_t mResourceId;
|
||||
uint32_t mNumProcessAttempts;
|
||||
|
||||
nsTArray<RefPtr<RemoteCompositorSession>> mRemoteSessions;
|
||||
|
|
|
@ -11,8 +11,8 @@
|
|||
#include "mozilla/gfx/Matrix.h" // for Matrix4x4, Matrix
|
||||
#include "mozilla/gfx/Point.h" // for IntSize
|
||||
#include "nsDebug.h" // for NS_ERROR
|
||||
#include "nsPoint.h" // for nsIntPoint
|
||||
#include "nsRect.h" // for mozilla::gfx::IntRect
|
||||
#include "nsPoint.h" // for nsPoint
|
||||
#include "nsRect.h" // for nsRect
|
||||
#include "base/basictypes.h"
|
||||
|
||||
using namespace mozilla::gfx;
|
||||
|
@ -70,25 +70,38 @@ AppendToString(std::stringstream& aStream, const nsRect& r,
|
|||
}
|
||||
|
||||
void
|
||||
AppendToString(std::stringstream& aStream, const nsIntPoint& p,
|
||||
const char* pfx, const char* sfx)
|
||||
{
|
||||
aStream << pfx;
|
||||
aStream << nsPrintfCString("(x=%d, y=%d)", p.x, p.y).get();
|
||||
aStream << sfx;
|
||||
}
|
||||
|
||||
void
|
||||
AppendToString(std::stringstream& aStream, const IntRect& r,
|
||||
AppendToString(std::stringstream& aStream, const WrColor& c,
|
||||
const char* pfx, const char* sfx)
|
||||
{
|
||||
aStream << pfx;
|
||||
aStream << nsPrintfCString(
|
||||
"(x=%d, y=%d, w=%d, h=%d)",
|
||||
"rgba(%d, %d, %d, %f)",
|
||||
uint8_t(c.r*255.f), uint8_t(c.g*255.f), uint8_t(c.b*255.f), c.a).get();
|
||||
aStream << sfx;
|
||||
}
|
||||
|
||||
void
|
||||
AppendToString(std::stringstream& aStream, const WrRect& r,
|
||||
const char* pfx, const char* sfx)
|
||||
{
|
||||
aStream << pfx;
|
||||
aStream << nsPrintfCString(
|
||||
"(x=%f, y=%f, w=%f, h=%f)",
|
||||
r.x, r.y, r.width, r.height).get();
|
||||
aStream << sfx;
|
||||
}
|
||||
|
||||
void
|
||||
AppendToString(std::stringstream& aStream, const WrSize& s,
|
||||
const char* pfx, const char* sfx)
|
||||
{
|
||||
aStream << pfx;
|
||||
aStream << nsPrintfCString(
|
||||
"(w=%f, h=%f)",
|
||||
s.width, s.height).get();
|
||||
aStream << sfx;
|
||||
}
|
||||
|
||||
void
|
||||
AppendToString(std::stringstream& aStream, const nsRegion& r,
|
||||
const char* pfx, const char* sfx)
|
||||
|
|
|
@ -18,6 +18,10 @@
|
|||
#include "nsRegion.h" // for nsRegion, nsIntRegion
|
||||
#include "nscore.h" // for nsACString, etc
|
||||
|
||||
struct WrColor;
|
||||
struct WrRect;
|
||||
struct WrSize;
|
||||
|
||||
namespace mozilla {
|
||||
namespace gfx {
|
||||
template <class units, class F> struct RectTyped;
|
||||
|
@ -87,6 +91,18 @@ AppendToString(std::stringstream& aStream, const mozilla::gfx::IntRectTyped<T>&
|
|||
aStream << sfx;
|
||||
}
|
||||
|
||||
void
|
||||
AppendToString(std::stringstream& aStream, const WrColor& c,
|
||||
const char* pfx="", const char* sfx="");
|
||||
|
||||
void
|
||||
AppendToString(std::stringstream& aStream, const WrRect& r,
|
||||
const char* pfx="", const char* sfx="");
|
||||
|
||||
void
|
||||
AppendToString(std::stringstream& aStream, const WrSize& s,
|
||||
const char* pfx="", const char* sfx="");
|
||||
|
||||
void
|
||||
AppendToString(std::stringstream& aStream, const nsRegion& r,
|
||||
const char* pfx="", const char* sfx="");
|
||||
|
|
|
@ -1804,6 +1804,25 @@ APZCTreeManager::GetTargetAPZC(const ScrollableLayerGuid& aGuid)
|
|||
return apzc.forget();
|
||||
}
|
||||
|
||||
static bool
|
||||
GuidComparatorIgnoringPresShell(const ScrollableLayerGuid& aOne, const ScrollableLayerGuid& aTwo)
|
||||
{
|
||||
return aOne.mLayersId == aTwo.mLayersId
|
||||
&& aOne.mScrollId == aTwo.mScrollId;
|
||||
}
|
||||
|
||||
already_AddRefed<AsyncPanZoomController>
|
||||
APZCTreeManager::GetTargetAPZC(const uint64_t& aLayersId,
|
||||
const FrameMetrics::ViewID& aScrollId)
|
||||
{
|
||||
MutexAutoLock lock(mTreeLock);
|
||||
ScrollableLayerGuid guid(aLayersId, 0, aScrollId);
|
||||
RefPtr<HitTestingTreeNode> node = GetTargetNode(guid, &GuidComparatorIgnoringPresShell);
|
||||
MOZ_ASSERT(!node || node->GetApzc()); // any node returned must have an APZC
|
||||
RefPtr<AsyncPanZoomController> apzc = node ? node->GetApzc() : nullptr;
|
||||
return apzc.forget();
|
||||
}
|
||||
|
||||
already_AddRefed<HitTestingTreeNode>
|
||||
APZCTreeManager::GetTargetNode(const ScrollableLayerGuid& aGuid,
|
||||
GuidComparator aComparator) const
|
||||
|
@ -1844,13 +1863,6 @@ APZCTreeManager::GetTargetAPZC(const ScreenPoint& aPoint,
|
|||
return target.forget();
|
||||
}
|
||||
|
||||
static bool
|
||||
GuidComparatorIgnoringPresShell(const ScrollableLayerGuid& aOne, const ScrollableLayerGuid& aTwo)
|
||||
{
|
||||
return aOne.mLayersId == aTwo.mLayersId
|
||||
&& aOne.mScrollId == aTwo.mScrollId;
|
||||
}
|
||||
|
||||
RefPtr<const OverscrollHandoffChain>
|
||||
APZCTreeManager::BuildOverscrollHandoffChain(const RefPtr<AsyncPanZoomController>& aInitialTarget)
|
||||
{
|
||||
|
|
|
@ -460,6 +460,8 @@ public:
|
|||
already_AddRefed<AsyncPanZoomController> GetTargetAPZC(const ScreenPoint& aPoint,
|
||||
HitTestResult* aOutHitResult,
|
||||
HitTestingTreeNode** aOutScrollbarNode = nullptr);
|
||||
already_AddRefed<AsyncPanZoomController> GetTargetAPZC(const uint64_t& aLayersId,
|
||||
const FrameMetrics::ViewID& aScrollId);
|
||||
ScreenToParentLayerMatrix4x4 GetScreenToApzcTransform(const AsyncPanZoomController *aApzc) const;
|
||||
ParentLayerToScreenMatrix4x4 GetApzcToGeckoTransform(const AsyncPanZoomController *aApzc) const;
|
||||
|
||||
|
|
|
@ -14,6 +14,8 @@
|
|||
#include "mozilla/IntegerPrintfMacros.h"
|
||||
#include "mozilla/layers/LayerTransactionChild.h"
|
||||
#include "mozilla/layers/ShadowLayers.h"
|
||||
#include "mozilla/layers/WebRenderLayerManager.h"
|
||||
#include "mozilla/layers/WebRenderBridgeChild.h"
|
||||
#include "mozilla/TouchEvents.h"
|
||||
#include "nsContentUtils.h"
|
||||
#include "nsContainerFrame.h"
|
||||
|
@ -703,6 +705,13 @@ SendLayersDependentApzcTargetConfirmation(nsIPresShell* aShell, uint64_t aInputB
|
|||
return;
|
||||
}
|
||||
|
||||
if (WebRenderLayerManager* wrlm = lm->AsWebRenderLayerManager()) {
|
||||
if (WebRenderBridgeChild* wrbc = wrlm->WrBridge()) {
|
||||
wrbc->SendSetConfirmedTargetAPZC(aInputBlockId, aTargets);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
LayerTransactionChild* shadow = lm->AsShadowForwarder()->GetShadowManager();
|
||||
if (!shadow) {
|
||||
return;
|
||||
|
|
|
@ -79,14 +79,15 @@ Atomic<int32_t> KnowsCompositor::sSerialCounter(0);
|
|||
|
||||
CompositorBridgeChild::CompositorBridgeChild(LayerManager *aLayerManager, uint32_t aNamespace)
|
||||
: mLayerManager(aLayerManager)
|
||||
, mNamespace(aNamespace)
|
||||
, mIdNamespace(aNamespace)
|
||||
, mResourceId(0)
|
||||
, mCanSend(false)
|
||||
, mFwdTransactionId(0)
|
||||
, mDeviceResetSequenceNumber(0)
|
||||
, mMessageLoop(MessageLoop::current())
|
||||
, mSectionAllocator(nullptr)
|
||||
{
|
||||
MOZ_ASSERT(mNamespace);
|
||||
MOZ_ASSERT(mIdNamespace);
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
}
|
||||
|
||||
|
@ -1169,16 +1170,28 @@ CompositorBridgeChild::DeallocPWebRenderBridgeChild(PWebRenderBridgeChild* aActo
|
|||
return true;
|
||||
}
|
||||
|
||||
uint64_t
|
||||
CompositorBridgeChild::GetNextResourceId()
|
||||
{
|
||||
++mResourceId;
|
||||
MOZ_RELEASE_ASSERT(mResourceId != UINT32_MAX);
|
||||
|
||||
uint64_t id = mIdNamespace;
|
||||
id = (id << 32) | mResourceId;
|
||||
|
||||
return id;
|
||||
}
|
||||
|
||||
wr::MaybeExternalImageId
|
||||
CompositorBridgeChild::GetNextExternalImageId()
|
||||
{
|
||||
static uint32_t sNextID = 1;
|
||||
++sNextID;
|
||||
MOZ_RELEASE_ASSERT(sNextID != UINT32_MAX);
|
||||
return Some(wr::ToExternalImageId(GetNextResourceId()));
|
||||
}
|
||||
|
||||
uint64_t imageId = mNamespace;
|
||||
imageId = (imageId << 32) | sNextID;
|
||||
return Some(wr::ToExternalImageId(imageId));
|
||||
wr::PipelineId
|
||||
CompositorBridgeChild::GetNextPipelineId()
|
||||
{
|
||||
return wr::AsPipelineId(GetNextResourceId());
|
||||
}
|
||||
|
||||
} // namespace layers
|
||||
|
|
|
@ -235,6 +235,8 @@ public:
|
|||
|
||||
wr::MaybeExternalImageId GetNextExternalImageId() override;
|
||||
|
||||
wr::PipelineId GetNextPipelineId();
|
||||
|
||||
private:
|
||||
// Private destructor, to discourage deletion outside of Release():
|
||||
virtual ~CompositorBridgeChild();
|
||||
|
@ -268,6 +270,8 @@ private:
|
|||
already_AddRefed<nsIEventTarget>
|
||||
GetSpecificMessageEventTarget(const Message& aMsg) override;
|
||||
|
||||
uint64_t GetNextResourceId();
|
||||
|
||||
// Class used to store the shared FrameMetrics, mutex, and APZCId in a hash table
|
||||
class SharedFrameMetricsData {
|
||||
public:
|
||||
|
@ -296,7 +300,8 @@ private:
|
|||
|
||||
RefPtr<LayerManager> mLayerManager;
|
||||
|
||||
uint32_t mNamespace;
|
||||
uint32_t mIdNamespace;
|
||||
uint32_t mResourceId;
|
||||
|
||||
// When not multi-process, hold a reference to the CompositorBridgeParent to keep it
|
||||
// alive. This reference should be null in multi-process.
|
||||
|
|
|
@ -1308,10 +1308,10 @@ CompositorBridgeParent::RecvGetFrameUniformity(FrameUniformityData* aOutData)
|
|||
}
|
||||
|
||||
void
|
||||
CompositorBridgeParent::FlushApzRepaints(const LayerTransactionParent* aLayerTree)
|
||||
CompositorBridgeParent::FlushApzRepaints(const uint64_t& aLayersId)
|
||||
{
|
||||
MOZ_ASSERT(mApzcTreeManager);
|
||||
uint64_t layersId = aLayerTree->GetId();
|
||||
uint64_t layersId = aLayersId;
|
||||
if (layersId == 0) {
|
||||
// The request is coming from the parent-process layer tree, so we should
|
||||
// use the compositor's root layer tree id.
|
||||
|
@ -1332,9 +1332,9 @@ CompositorBridgeParent::GetAPZTestData(const LayerTransactionParent* aLayerTree,
|
|||
}
|
||||
|
||||
void
|
||||
CompositorBridgeParent::SetConfirmedTargetAPZC(const LayerTransactionParent* aLayerTree,
|
||||
const uint64_t& aInputBlockId,
|
||||
const nsTArray<ScrollableLayerGuid>& aTargets)
|
||||
CompositorBridgeParent::SetConfirmedTargetAPZC(const uint64_t& aLayersId,
|
||||
const uint64_t& aInputBlockId,
|
||||
const nsTArray<ScrollableLayerGuid>& aTargets)
|
||||
{
|
||||
if (!mApzcTreeManager) {
|
||||
return;
|
||||
|
@ -1347,7 +1347,6 @@ CompositorBridgeParent::SetConfirmedTargetAPZC(const LayerTransactionParent* aLa
|
|||
<uint64_t, StoreCopyPassByConstLRef<nsTArray<ScrollableLayerGuid>>>
|
||||
(mApzcTreeManager.get(), setTargetApzcFunc, aInputBlockId, aTargets);
|
||||
APZThreadUtils::RunOnControllerThread(task.forget());
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -108,10 +108,10 @@ public:
|
|||
virtual void LeaveTestMode(LayerTransactionParent* aLayerTree) { }
|
||||
virtual void ApplyAsyncProperties(LayerTransactionParent* aLayerTree) = 0;
|
||||
virtual CompositorAnimationStorage* GetAnimationStorage(const uint64_t& aId) { return nullptr; }
|
||||
virtual void FlushApzRepaints(const LayerTransactionParent* aLayerTree) = 0;
|
||||
virtual void FlushApzRepaints(const uint64_t& aLayersId) = 0;
|
||||
virtual void GetAPZTestData(const LayerTransactionParent* aLayerTree,
|
||||
APZTestData* aOutData) { }
|
||||
virtual void SetConfirmedTargetAPZC(const LayerTransactionParent* aLayerTree,
|
||||
virtual void SetConfirmedTargetAPZC(const uint64_t& aLayersId,
|
||||
const uint64_t& aInputBlockId,
|
||||
const nsTArray<ScrollableLayerGuid>& aTargets) = 0;
|
||||
virtual void UpdatePaintTime(LayerTransactionParent* aLayerTree, const TimeDuration& aPaintTime) {}
|
||||
|
@ -231,10 +231,10 @@ public:
|
|||
virtual void ApplyAsyncProperties(LayerTransactionParent* aLayerTree)
|
||||
override;
|
||||
virtual CompositorAnimationStorage* GetAnimationStorage(const uint64_t& aId) override;
|
||||
virtual void FlushApzRepaints(const LayerTransactionParent* aLayerTree) override;
|
||||
virtual void FlushApzRepaints(const uint64_t& aLayersId) override;
|
||||
virtual void GetAPZTestData(const LayerTransactionParent* aLayerTree,
|
||||
APZTestData* aOutData) override;
|
||||
virtual void SetConfirmedTargetAPZC(const LayerTransactionParent* aLayerTree,
|
||||
virtual void SetConfirmedTargetAPZC(const uint64_t& aLayersId,
|
||||
const uint64_t& aInputBlockId,
|
||||
const nsTArray<ScrollableLayerGuid>& aTargets) override;
|
||||
virtual AsyncCompositionManager* GetCompositionManager(LayerTransactionParent* aLayerTree) override { return mCompositionManager; }
|
||||
|
|
|
@ -422,18 +422,17 @@ CrossProcessCompositorBridgeParent::GetAnimationStorage(
|
|||
}
|
||||
|
||||
void
|
||||
CrossProcessCompositorBridgeParent::FlushApzRepaints(const LayerTransactionParent* aLayerTree)
|
||||
CrossProcessCompositorBridgeParent::FlushApzRepaints(const uint64_t& aLayersId)
|
||||
{
|
||||
uint64_t id = aLayerTree->GetId();
|
||||
MOZ_ASSERT(id != 0);
|
||||
MOZ_ASSERT(aLayersId != 0);
|
||||
const CompositorBridgeParent::LayerTreeState* state =
|
||||
CompositorBridgeParent::GetIndirectShadowTree(id);
|
||||
CompositorBridgeParent::GetIndirectShadowTree(aLayersId);
|
||||
if (!state) {
|
||||
return;
|
||||
}
|
||||
|
||||
MOZ_ASSERT(state->mParent);
|
||||
state->mParent->FlushApzRepaints(aLayerTree);
|
||||
state->mParent->FlushApzRepaints(aLayersId);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -449,19 +448,18 @@ CrossProcessCompositorBridgeParent::GetAPZTestData(
|
|||
|
||||
void
|
||||
CrossProcessCompositorBridgeParent::SetConfirmedTargetAPZC(
|
||||
const LayerTransactionParent* aLayerTree,
|
||||
const uint64_t& aLayersId,
|
||||
const uint64_t& aInputBlockId,
|
||||
const nsTArray<ScrollableLayerGuid>& aTargets)
|
||||
{
|
||||
uint64_t id = aLayerTree->GetId();
|
||||
MOZ_ASSERT(id != 0);
|
||||
MOZ_ASSERT(aLayersId != 0);
|
||||
const CompositorBridgeParent::LayerTreeState* state =
|
||||
CompositorBridgeParent::GetIndirectShadowTree(id);
|
||||
CompositorBridgeParent::GetIndirectShadowTree(aLayersId);
|
||||
if (!state || !state->mParent) {
|
||||
return;
|
||||
}
|
||||
|
||||
state->mParent->SetConfirmedTargetAPZC(aLayerTree, aInputBlockId, aTargets);
|
||||
state->mParent->SetConfirmedTargetAPZC(aLayersId, aInputBlockId, aTargets);
|
||||
}
|
||||
|
||||
AsyncCompositionManager*
|
||||
|
|
|
@ -104,10 +104,10 @@ public:
|
|||
override;
|
||||
virtual CompositorAnimationStorage*
|
||||
GetAnimationStorage(const uint64_t& aId) override;
|
||||
virtual void FlushApzRepaints(const LayerTransactionParent* aLayerTree) override;
|
||||
virtual void FlushApzRepaints(const uint64_t& aLayersId) override;
|
||||
virtual void GetAPZTestData(const LayerTransactionParent* aLayerTree,
|
||||
APZTestData* aOutData) override;
|
||||
virtual void SetConfirmedTargetAPZC(const LayerTransactionParent* aLayerTree,
|
||||
virtual void SetConfirmedTargetAPZC(const uint64_t& aLayersId,
|
||||
const uint64_t& aInputBlockId,
|
||||
const nsTArray<ScrollableLayerGuid>& aTargets) override;
|
||||
|
||||
|
|
|
@ -844,7 +844,7 @@ LayerTransactionParent::RecvSetAsyncZoom(const FrameMetrics::ViewID& aScrollID,
|
|||
mozilla::ipc::IPCResult
|
||||
LayerTransactionParent::RecvFlushApzRepaints()
|
||||
{
|
||||
mCompositorBridge->FlushApzRepaints(this);
|
||||
mCompositorBridge->FlushApzRepaints(GetId());
|
||||
return IPC_OK();
|
||||
}
|
||||
|
||||
|
@ -866,7 +866,7 @@ mozilla::ipc::IPCResult
|
|||
LayerTransactionParent::RecvSetConfirmedTargetAPZC(const uint64_t& aBlockId,
|
||||
nsTArray<ScrollableLayerGuid>&& aTargets)
|
||||
{
|
||||
mCompositorBridge->SetConfirmedTargetAPZC(this, aBlockId, aTargets);
|
||||
mCompositorBridge->SetConfirmedTargetAPZC(GetId(), aBlockId, aTargets);
|
||||
return IPC_OK();
|
||||
}
|
||||
|
||||
|
|
|
@ -71,6 +71,10 @@ parent:
|
|||
async ReleaseLayer(LayerHandle layer);
|
||||
async ReleaseCompositable(CompositableHandle compositable);
|
||||
|
||||
// Tell the compositor to notify APZ that a layer has been confirmed for an
|
||||
// input event.
|
||||
async SetConfirmedTargetAPZC(uint64_t aInputBlockId, ScrollableLayerGuid[] aTargets);
|
||||
|
||||
// Testing APIs
|
||||
|
||||
// Enter test mode, set the sample time to sampleTime, and resample
|
||||
|
@ -122,10 +126,6 @@ parent:
|
|||
// Return the TextureFactoryIdentifier for this compositor.
|
||||
sync GetTextureFactoryIdentifier() returns (TextureFactoryIdentifier aIdentifier);
|
||||
|
||||
// Tell the compositor to notify APZ that a layer has been confirmed for an
|
||||
// input event.
|
||||
async SetConfirmedTargetAPZC(uint64_t aInputBlockId, ScrollableLayerGuid[] aTargets);
|
||||
|
||||
async RecordPaintTimes(PaintTiming timing);
|
||||
|
||||
async Shutdown();
|
||||
|
|
|
@ -14,6 +14,7 @@ include WebRenderMessages;
|
|||
include protocol PCompositorBridge;
|
||||
include protocol PTexture;
|
||||
|
||||
using struct mozilla::layers::ScrollableLayerGuid from "FrameMetrics.h";
|
||||
using struct mozilla::layers::TextureInfo from "mozilla/layers/CompositorTypes.h";
|
||||
using mozilla::layers::CompositableHandle from "mozilla/layers/LayersTypes.h";
|
||||
using mozilla::wr::ByteBuffer from "mozilla/webrender/WebRenderTypes.h";
|
||||
|
@ -67,6 +68,14 @@ parent:
|
|||
// Schedule a composite if one isn't already scheduled.
|
||||
async ForceComposite();
|
||||
|
||||
// These correspond exactly to the equivalent APIs in PLayerTransaction -
|
||||
// see those for documentation.
|
||||
async SetConfirmedTargetAPZC(uint64_t aInputBlockId, ScrollableLayerGuid[] aTargets);
|
||||
// More copied from PLayerTransaction, but these are only used for testing.
|
||||
sync SetAsyncScrollOffset(ViewID scrollId, float x, float y);
|
||||
sync SetAsyncZoom(ViewID scrollId, float zoom);
|
||||
async FlushApzRepaints();
|
||||
|
||||
async Shutdown();
|
||||
child:
|
||||
async __delete__();
|
||||
|
|
|
@ -32,12 +32,21 @@ ScrollingLayersHelper::ScrollingLayersHelper(WebRenderLayer* aLayer,
|
|||
if (!fm.IsScrollable()) {
|
||||
return;
|
||||
}
|
||||
LayoutDeviceRect contentRect = fm.GetExpandedScrollableRect()
|
||||
* fm.GetDevPixelsPerCSSPixel();
|
||||
LayerRect contentRect = ViewAs<LayerPixel>(
|
||||
fm.GetExpandedScrollableRect() * fm.GetDevPixelsPerCSSPixel(),
|
||||
PixelCastJustification::WebRenderHasUnitResolution);
|
||||
// TODO: check coordinate systems are sane here
|
||||
LayerRect clipBounds = ViewAs<LayerPixel>(
|
||||
fm.GetCompositionBounds(),
|
||||
PixelCastJustification::MovingDownToChildren);
|
||||
// The content rect that we hand to PushScrollLayer should be relative to
|
||||
// the same origin as the clipBounds that we hand to PushScrollLayer - that
|
||||
// is, both of them should be relative to the stacking context `aStackingContext`.
|
||||
// However, when we get the scrollable rect from the FrameMetrics, it has
|
||||
// a nominal top-left of 0,0 (maybe different for RTL pages?) and so to
|
||||
// get it in the same coordinate space we're going to shift it by the
|
||||
// composition bounds top-left.
|
||||
contentRect.MoveBy(clipBounds.TopLeft());
|
||||
mBuilder->PushScrollLayer(fm.GetScrollId(),
|
||||
aStackingContext.ToRelativeWrRect(contentRect),
|
||||
aStackingContext.ToRelativeWrRect(clipBounds));
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
|
||||
#include "mozilla/layers/WebRenderBridgeParent.h"
|
||||
|
||||
#include "apz/src/AsyncPanZoomController.h"
|
||||
#include "CompositableHost.h"
|
||||
#include "gfxPrefs.h"
|
||||
#include "GLContext.h"
|
||||
|
@ -275,7 +276,7 @@ WebRenderBridgeParent::RecvDeleteCompositorAnimations(InfallibleTArray<uint64_t>
|
|||
return IPC_OK();
|
||||
}
|
||||
|
||||
uint64_t storageId = mWidget ? 0 : mPipelineId.mHandle;
|
||||
uint64_t storageId = mWidget ? 0 : GetLayersId();
|
||||
CompositorAnimationStorage* storage =
|
||||
mCompositorBridge->GetAnimationStorage(storageId);
|
||||
MOZ_ASSERT(storage);
|
||||
|
@ -346,9 +347,8 @@ WebRenderBridgeParent::GetRootCompositorBridgeParent() const
|
|||
// Otherwise, this WebRenderBridgeParent is attached to a
|
||||
// CrossProcessCompositorBridgeParent so we have an extra level of
|
||||
// indirection to unravel.
|
||||
uint64_t layersId = wr::AsUint64(mPipelineId);
|
||||
CompositorBridgeParent::LayerTreeState* lts =
|
||||
CompositorBridgeParent::GetIndirectShadowTree(layersId);
|
||||
CompositorBridgeParent::GetIndirectShadowTree(GetLayersId());
|
||||
MOZ_ASSERT(lts);
|
||||
return lts->mParent;
|
||||
}
|
||||
|
@ -367,7 +367,7 @@ WebRenderBridgeParent::UpdateAPZ()
|
|||
}
|
||||
if (RefPtr<APZCTreeManager> apzc = cbp->GetAPZCTreeManager()) {
|
||||
apzc->UpdateHitTestingTree(rootLayersId, rootWrbp->GetScrollData(),
|
||||
mScrollData.IsFirstPaint(), wr::AsUint64(mPipelineId),
|
||||
mScrollData.IsFirstPaint(), GetLayersId(),
|
||||
/* TODO: propagate paint sequence number */ 0);
|
||||
}
|
||||
}
|
||||
|
@ -538,7 +538,7 @@ WebRenderBridgeParent::ProcessWebRenderCommands(const gfx::IntSize &aSize,
|
|||
const OpAddCompositorAnimations& op = cmd.get_OpAddCompositorAnimations();
|
||||
CompositorAnimations data(Move(op.data()));
|
||||
if (data.animations().Length()) {
|
||||
uint64_t id = mWidget ? 0 : wr::AsUint64(mPipelineId);
|
||||
uint64_t id = mWidget ? 0 : GetLayersId();
|
||||
CompositorAnimationStorage* storage =
|
||||
mCompositorBridge->GetAnimationStorage(id);
|
||||
if (storage) {
|
||||
|
@ -574,7 +574,7 @@ WebRenderBridgeParent::ProcessWebRenderCommands(const gfx::IntSize &aSize,
|
|||
DeleteOldImages();
|
||||
|
||||
if (ShouldParentObserveEpoch()) {
|
||||
mCompositorBridge->ObserveLayerUpdate(wr::AsUint64(mPipelineId), GetChildLayerObserverEpoch(), true);
|
||||
mCompositorBridge->ObserveLayerUpdate(GetLayersId(), GetChildLayerObserverEpoch(), true);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -712,7 +712,7 @@ WebRenderBridgeParent::RecvSetLayerObserverEpoch(const uint64_t& aLayerObserverE
|
|||
mozilla::ipc::IPCResult
|
||||
WebRenderBridgeParent::RecvClearCachedResources()
|
||||
{
|
||||
mCompositorBridge->ObserveLayerUpdate(wr::AsUint64(mPipelineId), GetChildLayerObserverEpoch(), false);
|
||||
mCompositorBridge->ObserveLayerUpdate(GetLayersId(), GetChildLayerObserverEpoch(), false);
|
||||
return IPC_OK();
|
||||
}
|
||||
|
||||
|
@ -726,6 +726,58 @@ WebRenderBridgeParent::RecvForceComposite()
|
|||
return IPC_OK();
|
||||
}
|
||||
|
||||
already_AddRefed<AsyncPanZoomController>
|
||||
WebRenderBridgeParent::GetTargetAPZC(const FrameMetrics::ViewID& aScrollId)
|
||||
{
|
||||
RefPtr<AsyncPanZoomController> apzc;
|
||||
if (CompositorBridgeParent* cbp = GetRootCompositorBridgeParent()) {
|
||||
if (RefPtr<APZCTreeManager> apzctm = cbp->GetAPZCTreeManager()) {
|
||||
apzc = apzctm->GetTargetAPZC(GetLayersId(), aScrollId);
|
||||
}
|
||||
}
|
||||
return apzc.forget();
|
||||
}
|
||||
|
||||
mozilla::ipc::IPCResult
|
||||
WebRenderBridgeParent::RecvSetConfirmedTargetAPZC(const uint64_t& aBlockId,
|
||||
nsTArray<ScrollableLayerGuid>&& aTargets)
|
||||
{
|
||||
mCompositorBridge->SetConfirmedTargetAPZC(GetLayersId(), aBlockId, aTargets);
|
||||
return IPC_OK();
|
||||
}
|
||||
|
||||
mozilla::ipc::IPCResult
|
||||
WebRenderBridgeParent::RecvSetAsyncScrollOffset(const FrameMetrics::ViewID& aScrollId,
|
||||
const float& aX,
|
||||
const float& aY)
|
||||
{
|
||||
RefPtr<AsyncPanZoomController> apzc = GetTargetAPZC(aScrollId);
|
||||
if (!apzc) {
|
||||
return IPC_FAIL_NO_REASON(this);
|
||||
}
|
||||
apzc->SetTestAsyncScrollOffset(CSSPoint(aX, aY));
|
||||
return IPC_OK();
|
||||
}
|
||||
|
||||
mozilla::ipc::IPCResult
|
||||
WebRenderBridgeParent::RecvSetAsyncZoom(const FrameMetrics::ViewID& aScrollId,
|
||||
const float& aZoom)
|
||||
{
|
||||
RefPtr<AsyncPanZoomController> apzc = GetTargetAPZC(aScrollId);
|
||||
if (!apzc) {
|
||||
return IPC_FAIL_NO_REASON(this);
|
||||
}
|
||||
apzc->SetTestAsyncZoom(LayerToParentLayerScale(aZoom));
|
||||
return IPC_OK();
|
||||
}
|
||||
|
||||
mozilla::ipc::IPCResult
|
||||
WebRenderBridgeParent::RecvFlushApzRepaints()
|
||||
{
|
||||
mCompositorBridge->FlushApzRepaints(GetLayersId());
|
||||
return IPC_OK();
|
||||
}
|
||||
|
||||
void
|
||||
WebRenderBridgeParent::ActorDestroy(ActorDestroyReason aWhy)
|
||||
{
|
||||
|
@ -736,7 +788,7 @@ void
|
|||
WebRenderBridgeParent::SampleAnimations(nsTArray<WrOpacityProperty>& aOpacityArray,
|
||||
nsTArray<WrTransformProperty>& aTransformArray)
|
||||
{
|
||||
uint64_t id = mWidget ? 0 : wr::AsUint64(mPipelineId);
|
||||
uint64_t id = mWidget ? 0 : GetLayersId();
|
||||
CompositorAnimationStorage* storage =
|
||||
mCompositorBridge->GetAnimationStorage(id);
|
||||
|
||||
|
@ -862,6 +914,12 @@ WebRenderBridgeParent::~WebRenderBridgeParent()
|
|||
{
|
||||
}
|
||||
|
||||
uint64_t
|
||||
WebRenderBridgeParent::GetLayersId() const
|
||||
{
|
||||
return wr::AsUint64(mPipelineId);
|
||||
}
|
||||
|
||||
void
|
||||
WebRenderBridgeParent::DeleteOldImages()
|
||||
{
|
||||
|
|
|
@ -116,6 +116,15 @@ public:
|
|||
mozilla::ipc::IPCResult RecvClearCachedResources() override;
|
||||
mozilla::ipc::IPCResult RecvForceComposite() override;
|
||||
|
||||
mozilla::ipc::IPCResult RecvSetConfirmedTargetAPZC(const uint64_t& aBlockId,
|
||||
nsTArray<ScrollableLayerGuid>&& aTargets) override;
|
||||
mozilla::ipc::IPCResult RecvSetAsyncScrollOffset(const FrameMetrics::ViewID& aScrollId,
|
||||
const float& aX,
|
||||
const float& aY) override;
|
||||
mozilla::ipc::IPCResult RecvSetAsyncZoom(const FrameMetrics::ViewID& aScrollId,
|
||||
const float& aZoom) override;
|
||||
mozilla::ipc::IPCResult RecvFlushApzRepaints() override;
|
||||
|
||||
void ActorDestroy(ActorDestroyReason aWhy) override;
|
||||
void SetWebRenderProfilerEnabled(bool aEnabled);
|
||||
|
||||
|
@ -171,6 +180,7 @@ public:
|
|||
private:
|
||||
virtual ~WebRenderBridgeParent();
|
||||
|
||||
uint64_t GetLayersId() const;
|
||||
void DeleteOldImages();
|
||||
void ProcessWebRenderCommands(const gfx::IntSize &aSize,
|
||||
InfallibleTArray<WebRenderParentCommand>& commands,
|
||||
|
@ -203,6 +213,10 @@ private:
|
|||
// is populated with the property update details.
|
||||
bool PushAPZStateToWR(nsTArray<WrTransformProperty>& aTransformArray);
|
||||
|
||||
// Helper method to get an APZC reference from a scroll id. Uses the layers
|
||||
// id of this bridge, and may return null if the APZC wasn't found.
|
||||
already_AddRefed<AsyncPanZoomController> GetTargetAPZC(const FrameMetrics::ViewID& aId);
|
||||
|
||||
private:
|
||||
struct PendingTransactionId {
|
||||
PendingTransactionId(wr::Epoch aEpoch, uint64_t aId)
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#include "gfxPrefs.h"
|
||||
#include "LayersLogging.h"
|
||||
#include "mozilla/gfx/gfxVars.h"
|
||||
#include "mozilla/layers/CompositorBridgeChild.h"
|
||||
#include "mozilla/layers/ImageClient.h"
|
||||
#include "mozilla/layers/ScrollingLayersHelper.h"
|
||||
#include "mozilla/layers/StackingContextHelper.h"
|
||||
|
@ -31,7 +32,6 @@ WebRenderImageLayer::WebRenderImageLayer(WebRenderLayerManager* aLayerManager)
|
|||
WebRenderImageLayer::~WebRenderImageLayer()
|
||||
{
|
||||
MOZ_COUNT_DTOR(WebRenderImageLayer);
|
||||
mPipelineIdRequest.DisconnectIfExists();
|
||||
|
||||
for (auto key : mVideoKeys) {
|
||||
WrManager()->AddImageKeyForDiscard(key);
|
||||
|
@ -116,24 +116,6 @@ WebRenderImageLayer::RenderLayer(wr::DisplayListBuilder& aBuilder,
|
|||
|
||||
MOZ_ASSERT(GetImageClientType() != CompositableType::UNKNOWN);
|
||||
|
||||
// Allocate PipelineId if necessary
|
||||
if (GetImageClientType() == CompositableType::IMAGE_BRIDGE &&
|
||||
mPipelineId.isNothing() && !mPipelineIdRequest.Exists()) {
|
||||
// Use Holder to pass this pointer to lambda.
|
||||
// Static anaysis tool does not permit to pass refcounted variable to lambda.
|
||||
// And we do not want to use RefPtr<WebRenderImageLayer> here.
|
||||
Holder holder(this);
|
||||
WrManager()->AllocPipelineId()
|
||||
->Then(AbstractThread::MainThread(), __func__,
|
||||
[holder] (const wr::PipelineId& aPipelineId) {
|
||||
holder->mPipelineIdRequest.Complete();
|
||||
holder->mPipelineId = Some(aPipelineId);
|
||||
},
|
||||
[holder] (const ipc::PromiseRejectReason &aReason) {
|
||||
holder->mPipelineIdRequest.Complete();
|
||||
})->Track(mPipelineIdRequest);
|
||||
}
|
||||
|
||||
if (GetImageClientType() == CompositableType::IMAGE && !mImageClient) {
|
||||
mImageClient = ImageClient::CreateImageClient(CompositableType::IMAGE,
|
||||
WrBridge(),
|
||||
|
@ -148,6 +130,8 @@ WebRenderImageLayer::RenderLayer(wr::DisplayListBuilder& aBuilder,
|
|||
if (GetImageClientType() == CompositableType::IMAGE_BRIDGE) {
|
||||
MOZ_ASSERT(!mImageClient);
|
||||
mExternalImageId = Some(WrBridge()->AllocExternalImageId(mContainer->GetAsyncContainerHandle()));
|
||||
// Alloc async image pipeline id.
|
||||
mPipelineId = Some(WrBridge()->GetCompositorBridgeChild()->GetNextPipelineId());
|
||||
} else {
|
||||
// Handle CompositableType::IMAGE case
|
||||
MOZ_ASSERT(mImageClient);
|
||||
|
|
|
@ -38,16 +38,6 @@ protected:
|
|||
|
||||
void AddWRVideoImage(size_t aChannelNumber);
|
||||
|
||||
class Holder {
|
||||
public:
|
||||
explicit Holder(WebRenderImageLayer* aLayer)
|
||||
: mLayer(aLayer)
|
||||
{}
|
||||
WebRenderImageLayer* operator ->() const { return mLayer; }
|
||||
private:
|
||||
WebRenderImageLayer* mLayer;
|
||||
};
|
||||
|
||||
wr::MaybeExternalImageId mExternalImageId;
|
||||
// Some video image format contains multiple channel data.
|
||||
nsTArray<wr::ImageKey> mVideoKeys;
|
||||
|
@ -56,7 +46,6 @@ protected:
|
|||
RefPtr<ImageClient> mImageClient;
|
||||
CompositableType mImageClientTypeContainer;
|
||||
Maybe<wr::PipelineId> mPipelineId;
|
||||
MozPromiseRequestHolder<PipelineIdPromise> mPipelineIdRequest;
|
||||
};
|
||||
|
||||
} // namespace layers
|
||||
|
|
|
@ -7,8 +7,6 @@
|
|||
|
||||
#include "gfxPrefs.h"
|
||||
#include "LayersLogging.h"
|
||||
#include "mozilla/dom/ContentChild.h"
|
||||
#include "mozilla/gfx/GPUProcessManager.h"
|
||||
#include "mozilla/layers/CompositorBridgeChild.h"
|
||||
#include "mozilla/layers/StackingContextHelper.h"
|
||||
#include "mozilla/layers/TextureClient.h"
|
||||
|
@ -493,25 +491,6 @@ WebRenderLayerManager::Composite()
|
|||
WrBridge()->SendForceComposite();
|
||||
}
|
||||
|
||||
RefPtr<PipelineIdPromise>
|
||||
WebRenderLayerManager::AllocPipelineId()
|
||||
{
|
||||
if (XRE_IsParentProcess()) {
|
||||
GPUProcessManager* pm = GPUProcessManager::Get();
|
||||
if (!pm) {
|
||||
return PipelineIdPromise::CreateAndReject(ipc::PromiseRejectReason::HandlerRejected, __func__);
|
||||
}
|
||||
return PipelineIdPromise::CreateAndResolve(wr::AsPipelineId(pm->AllocateLayerTreeId()), __func__);;
|
||||
}
|
||||
|
||||
MOZ_ASSERT(XRE_IsContentProcess());
|
||||
RefPtr<dom::ContentChild> contentChild = dom::ContentChild::GetSingleton();
|
||||
if (!contentChild) {
|
||||
return PipelineIdPromise::CreateAndReject(ipc::PromiseRejectReason::HandlerRejected, __func__);
|
||||
}
|
||||
return contentChild->SendAllocPipelineId();
|
||||
}
|
||||
|
||||
void
|
||||
WebRenderLayerManager::SetRoot(Layer* aLayer)
|
||||
{
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
#define GFX_WEBRENDERLAYERMANAGER_H
|
||||
|
||||
#include "Layers.h"
|
||||
#include "mozilla/ipc/MessageChannel.h"
|
||||
#include "mozilla/MozPromise.h"
|
||||
#include "mozilla/layers/TransactionIdAllocator.h"
|
||||
#include "mozilla/webrender/WebRenderTypes.h"
|
||||
|
@ -22,8 +21,6 @@ class KnowsCompositor;
|
|||
class PCompositorBridgeChild;
|
||||
class WebRenderBridgeChild;
|
||||
|
||||
typedef MozPromise<mozilla::wr::PipelineId, mozilla::ipc::PromiseRejectReason, false> PipelineIdPromise;
|
||||
|
||||
class WebRenderLayerManager final : public LayerManager
|
||||
{
|
||||
typedef nsTArray<RefPtr<Layer> > LayerRefArray;
|
||||
|
@ -129,8 +126,6 @@ public:
|
|||
void SetTransactionIncomplete() { mTransactionIncomplete = true; }
|
||||
bool IsMutatedLayer(Layer* aLayer);
|
||||
|
||||
RefPtr<PipelineIdPromise> AllocPipelineId();
|
||||
|
||||
private:
|
||||
/**
|
||||
* Take a snapshot of the parent context, and copy
|
||||
|
|
|
@ -25,7 +25,7 @@ gfxQuartzNativeDrawing::BeginNativeDrawing()
|
|||
|
||||
DrawTarget *dt = mDrawTarget;
|
||||
if (dt->IsDualDrawTarget() || dt->IsTiledDrawTarget() ||
|
||||
dt->GetBackendType() != BackendType::SKIA) {
|
||||
dt->GetBackendType() != BackendType::SKIA || dt->IsRecording()) {
|
||||
// We need a DrawTarget that we can get a CGContextRef from:
|
||||
Matrix transform = dt->GetTransform();
|
||||
|
||||
|
|
|
@ -34,6 +34,7 @@ plane-split = "0.3"
|
|||
|
||||
[dev-dependencies]
|
||||
angle = {git = "https://github.com/servo/angle", branch = "servo"}
|
||||
rand = "0.3" # for the benchmarks
|
||||
servo-glutin = "0.10.1" # for the example apps
|
||||
|
||||
[target.'cfg(any(target_os = "android", all(unix, not(target_os = "macos"))))'.dependencies]
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
#![feature(test)]
|
||||
|
||||
extern crate rand;
|
||||
extern crate test;
|
||||
extern crate webrender;
|
||||
extern crate webrender_traits;
|
||||
|
||||
use rand::Rng;
|
||||
use test::Bencher;
|
||||
use webrender::TexturePage;
|
||||
use webrender_traits::{DeviceUintSize as Size};
|
||||
|
||||
#[bench]
|
||||
fn bench_coalesce(b: &mut Bencher) {
|
||||
let mut rng = rand::thread_rng();
|
||||
let mut page = TexturePage::new_dummy(Size::new(10000, 10000));
|
||||
let mut test_page = TexturePage::new_dummy(Size::new(10000, 10000));
|
||||
while page.allocate(&Size::new(rng.gen_range(1, 100), rng.gen_range(1, 100))).is_some() {}
|
||||
b.iter(|| {
|
||||
test_page.fill_from(&page);
|
||||
test_page.coalesce();
|
||||
});
|
||||
}
|
|
@ -4,9 +4,9 @@
|
|||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
void main(void) {
|
||||
CachePrimitiveInstance cpi = fetch_cache_instance();
|
||||
RenderTaskData task = fetch_render_task(cpi.render_task_index);
|
||||
BoxShadow bs = fetch_boxshadow(cpi.specific_prim_index);
|
||||
PrimitiveInstance pi = fetch_prim_instance();
|
||||
RenderTaskData task = fetch_render_task(pi.render_task_index);
|
||||
BoxShadow bs = fetch_boxshadow(pi.specific_prim_address);
|
||||
|
||||
vec2 p0 = task.data0.xy;
|
||||
vec2 p1 = p0 + task.data0.zw;
|
||||
|
|
|
@ -8,12 +8,12 @@
|
|||
// as text-shadow.
|
||||
|
||||
void main(void) {
|
||||
CachePrimitiveInstance cpi = fetch_cache_instance();
|
||||
RenderTaskData task = fetch_render_task(cpi.render_task_index);
|
||||
TextRun text = fetch_text_run(cpi.specific_prim_index);
|
||||
Glyph glyph = fetch_glyph(cpi.sub_index);
|
||||
PrimitiveGeometry pg = fetch_prim_geometry(cpi.global_prim_index);
|
||||
ResourceRect res = fetch_resource_rect(cpi.user_data.x);
|
||||
PrimitiveInstance pi = fetch_prim_instance();
|
||||
RenderTaskData task = fetch_render_task(pi.render_task_index);
|
||||
TextRun text = fetch_text_run(pi.specific_prim_address);
|
||||
Glyph glyph = fetch_glyph(pi.user_data0);
|
||||
PrimitiveGeometry pg = fetch_prim_geometry(pi.global_prim_index);
|
||||
ResourceRect res = fetch_resource_rect(pi.user_data1);
|
||||
|
||||
// Glyphs size is already in device-pixels.
|
||||
// The render task origin is in device-pixels. Offset that by
|
||||
|
|
|
@ -117,7 +117,7 @@ varying vec3 vClipMaskUv;
|
|||
|
||||
#ifdef WR_VERTEX_SHADER
|
||||
|
||||
#define VECS_PER_LAYER 13
|
||||
#define VECS_PER_LAYER 9
|
||||
#define VECS_PER_RENDER_TASK 3
|
||||
#define VECS_PER_PRIM_GEOM 2
|
||||
#define VECS_PER_SPLIT_GEOM 3
|
||||
|
@ -133,14 +133,8 @@ uniform sampler2D sData128;
|
|||
uniform sampler2D sResourceRects;
|
||||
|
||||
// Instanced attributes
|
||||
in int aGlobalPrimId;
|
||||
in int aPrimitiveAddress;
|
||||
in int aTaskIndex;
|
||||
in int aClipTaskIndex;
|
||||
in int aLayerIndex;
|
||||
in int aElementIndex;
|
||||
in ivec2 aUserData;
|
||||
in int aZIndex;
|
||||
in ivec4 aData0;
|
||||
in ivec4 aData1;
|
||||
|
||||
// get_fetch_uv is a macro to work around a macOS Intel driver parsing bug.
|
||||
// TODO: convert back to a function once the driver issues are resolved, if ever.
|
||||
|
@ -190,7 +184,6 @@ struct Layer {
|
|||
mat4 transform;
|
||||
mat4 inv_transform;
|
||||
RectWithSize local_clip_rect;
|
||||
vec4 screen_vertices[4];
|
||||
};
|
||||
|
||||
Layer fetch_layer(int index) {
|
||||
|
@ -217,11 +210,6 @@ Layer fetch_layer(int index) {
|
|||
vec4 clip_rect = texelFetchOffset(sLayers, uv1, 0, ivec2(0, 0));
|
||||
layer.local_clip_rect = RectWithSize(clip_rect.xy, clip_rect.zw);
|
||||
|
||||
layer.screen_vertices[0] = texelFetchOffset(sLayers, uv1, 0, ivec2(1, 0));
|
||||
layer.screen_vertices[1] = texelFetchOffset(sLayers, uv1, 0, ivec2(2, 0));
|
||||
layer.screen_vertices[2] = texelFetchOffset(sLayers, uv1, 0, ivec2(3, 0));
|
||||
layer.screen_vertices[3] = texelFetchOffset(sLayers, uv1, 0, ivec2(4, 0));
|
||||
|
||||
return layer;
|
||||
}
|
||||
|
||||
|
@ -447,50 +435,51 @@ PrimitiveGeometry fetch_prim_geometry(int index) {
|
|||
|
||||
struct PrimitiveInstance {
|
||||
int global_prim_index;
|
||||
int specific_prim_index;
|
||||
int specific_prim_address;
|
||||
int render_task_index;
|
||||
int clip_task_index;
|
||||
int layer_index;
|
||||
int sub_index;
|
||||
int z;
|
||||
ivec2 user_data;
|
||||
int user_data0;
|
||||
int user_data1;
|
||||
};
|
||||
|
||||
PrimitiveInstance fetch_prim_instance() {
|
||||
PrimitiveInstance pi;
|
||||
|
||||
pi.global_prim_index = aGlobalPrimId;
|
||||
pi.specific_prim_index = aPrimitiveAddress;
|
||||
pi.render_task_index = aTaskIndex;
|
||||
pi.clip_task_index = aClipTaskIndex;
|
||||
pi.layer_index = aLayerIndex;
|
||||
pi.sub_index = aElementIndex;
|
||||
pi.user_data = aUserData;
|
||||
pi.z = aZIndex;
|
||||
pi.global_prim_index = aData0.x;
|
||||
pi.specific_prim_address = aData0.y;
|
||||
pi.render_task_index = aData0.z;
|
||||
pi.clip_task_index = aData0.w;
|
||||
pi.layer_index = aData1.x;
|
||||
pi.z = aData1.y;
|
||||
pi.user_data0 = aData1.z;
|
||||
pi.user_data1 = aData1.w;
|
||||
|
||||
return pi;
|
||||
}
|
||||
|
||||
struct CachePrimitiveInstance {
|
||||
int global_prim_index;
|
||||
int specific_prim_index;
|
||||
struct CompositeInstance {
|
||||
int render_task_index;
|
||||
int sub_index;
|
||||
ivec2 user_data;
|
||||
int src_task_index;
|
||||
int backdrop_task_index;
|
||||
int user_data0;
|
||||
int user_data1;
|
||||
float z;
|
||||
};
|
||||
|
||||
CachePrimitiveInstance fetch_cache_instance() {
|
||||
CachePrimitiveInstance cpi;
|
||||
CompositeInstance fetch_composite_instance() {
|
||||
CompositeInstance ci;
|
||||
|
||||
PrimitiveInstance pi = fetch_prim_instance();
|
||||
ci.render_task_index = aData0.x;
|
||||
ci.src_task_index = aData0.y;
|
||||
ci.backdrop_task_index = aData0.z;
|
||||
ci.z = float(aData0.w);
|
||||
|
||||
cpi.global_prim_index = pi.global_prim_index;
|
||||
cpi.specific_prim_index = pi.specific_prim_index;
|
||||
cpi.render_task_index = pi.render_task_index;
|
||||
cpi.sub_index = pi.sub_index;
|
||||
cpi.user_data = pi.user_data;
|
||||
ci.user_data0 = aData1.x;
|
||||
ci.user_data1 = aData1.y;
|
||||
|
||||
return cpi;
|
||||
return ci;
|
||||
}
|
||||
|
||||
struct Primitive {
|
||||
|
@ -500,10 +489,8 @@ struct Primitive {
|
|||
RectWithSize local_rect;
|
||||
RectWithSize local_clip_rect;
|
||||
int prim_index;
|
||||
// when sending multiple primitives of the same type (e.g. border segments)
|
||||
// this index allows the vertex shader to recognize the difference
|
||||
int sub_index;
|
||||
ivec2 user_data;
|
||||
int user_data0;
|
||||
int user_data1;
|
||||
float z;
|
||||
};
|
||||
|
||||
|
@ -518,9 +505,9 @@ Primitive load_primitive_custom(PrimitiveInstance pi) {
|
|||
prim.local_rect = pg.local_rect;
|
||||
prim.local_clip_rect = pg.local_clip_rect;
|
||||
|
||||
prim.prim_index = pi.specific_prim_index;
|
||||
prim.sub_index = pi.sub_index;
|
||||
prim.user_data = pi.user_data;
|
||||
prim.prim_index = pi.specific_prim_address;
|
||||
prim.user_data0 = pi.user_data0;
|
||||
prim.user_data1 = pi.user_data1;
|
||||
prim.z = float(pi.z);
|
||||
|
||||
return prim;
|
||||
|
@ -539,7 +526,7 @@ Primitive load_primitive() {
|
|||
bool ray_plane(vec3 normal, vec3 point, vec3 ray_origin, vec3 ray_dir, out float t)
|
||||
{
|
||||
float denom = dot(normal, ray_dir);
|
||||
if (denom > 1e-6) {
|
||||
if (abs(denom) > 1e-6) {
|
||||
vec3 d = point - ray_origin;
|
||||
t = dot(d, normal) / denom;
|
||||
return t >= 0.0;
|
||||
|
@ -568,12 +555,11 @@ vec4 untransform(vec2 ref, vec3 n, vec3 a, mat4 inv_transform) {
|
|||
|
||||
// Given a CSS space position, transform it back into the layer space.
|
||||
vec4 get_layer_pos(vec2 pos, Layer layer) {
|
||||
// get 3 of the layer corners in CSS space
|
||||
vec3 a = layer.screen_vertices[0].xyz / layer.screen_vertices[0].w;
|
||||
vec3 b = layer.screen_vertices[3].xyz / layer.screen_vertices[3].w;
|
||||
vec3 c = layer.screen_vertices[2].xyz / layer.screen_vertices[2].w;
|
||||
// get a point on the layer plane
|
||||
vec4 ah = layer.transform * vec4(0.0, 0.0, 0.0, 1.0);
|
||||
vec3 a = ah.xyz / ah.w;
|
||||
// get the normal to the layer plane
|
||||
vec3 n = normalize(cross(b-a, c-a));
|
||||
vec3 n = transpose(mat3(layer.inv_transform)) * vec3(0.0, 0.0, 1.0);
|
||||
return untransform(pos, n, a, layer.inv_transform);
|
||||
}
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ void main(void) {
|
|||
vTileRepeat = gradient.tile_size_repeat.zw;
|
||||
|
||||
// V coordinate of gradient row in lookup texture.
|
||||
vGradientIndex = float(prim.sub_index);
|
||||
vGradientIndex = float(prim.user_data0);
|
||||
|
||||
// The texture size of the lookup texture
|
||||
vGradientTextureSize = vec2(textureSize(sGradients, 0));
|
||||
|
|
|
@ -4,9 +4,9 @@
|
|||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
void main(void) {
|
||||
PrimitiveInstance pi = fetch_prim_instance();
|
||||
AlphaBatchTask dest_task = fetch_alpha_batch_task(pi.render_task_index);
|
||||
AlphaBatchTask src_task = fetch_alpha_batch_task(pi.user_data.x);
|
||||
CompositeInstance ci = fetch_composite_instance();
|
||||
AlphaBatchTask dest_task = fetch_alpha_batch_task(ci.render_task_index);
|
||||
AlphaBatchTask src_task = fetch_alpha_batch_task(ci.src_task_index);
|
||||
|
||||
vec2 dest_origin = dest_task.render_target_origin -
|
||||
dest_task.screen_space_origin +
|
||||
|
@ -24,8 +24,8 @@ void main(void) {
|
|||
vUv = vec3(uv / texture_size, src_task.render_target_layer_index);
|
||||
vUvBounds = vec4(st0 + 0.5, st1 - 0.5) / texture_size.xyxy;
|
||||
|
||||
vOp = pi.sub_index;
|
||||
vAmount = float(pi.user_data.y) / 65535.0;
|
||||
vOp = ci.user_data0;
|
||||
vAmount = float(ci.user_data1) / 65535.0;
|
||||
|
||||
gl_Position = uTransform * vec4(local_pos, pi.z, 1.0);
|
||||
gl_Position = uTransform * vec4(local_pos, ci.z, 1.0);
|
||||
}
|
||||
|
|
|
@ -91,6 +91,7 @@ int select_style(int color_select, vec2 fstyle) {
|
|||
|
||||
switch (color_select) {
|
||||
case SIDE_BOTH:
|
||||
{
|
||||
// TODO(gw): A temporary hack! While we don't support
|
||||
// border corners that have dots or dashes
|
||||
// with another style, pretend they are solid
|
||||
|
@ -102,6 +103,7 @@ int select_style(int color_select, vec2 fstyle) {
|
|||
if (style.x != style.y && (has_dots || has_dashes))
|
||||
return BORDER_STYLE_SOLID;
|
||||
return style.x;
|
||||
}
|
||||
case SIDE_FIRST:
|
||||
return style.x;
|
||||
case SIDE_SECOND:
|
||||
|
@ -112,7 +114,7 @@ int select_style(int color_select, vec2 fstyle) {
|
|||
void main(void) {
|
||||
Primitive prim = load_primitive();
|
||||
Border border = fetch_border(prim.prim_index);
|
||||
int sub_part = prim.sub_index;
|
||||
int sub_part = prim.user_data0;
|
||||
BorderCorners corners = get_border_corners(border, prim.local_rect);
|
||||
|
||||
vec2 p0, p1;
|
||||
|
@ -135,7 +137,7 @@ void main(void) {
|
|||
color1 = border.colors[1];
|
||||
vClipCenter = corners.tl_outer + border.radii[0].xy;
|
||||
vClipSign = vec2(1.0);
|
||||
style = select_style(prim.user_data.x, border.style.yx);
|
||||
style = select_style(prim.user_data1, border.style.yx);
|
||||
vec4 adjusted_widths = get_effective_border_widths(border, style);
|
||||
vec4 inv_adjusted_widths = border.widths - adjusted_widths;
|
||||
set_radii(style,
|
||||
|
@ -157,7 +159,7 @@ void main(void) {
|
|||
color1 = border.colors[2];
|
||||
vClipCenter = corners.tr_outer + vec2(-border.radii[0].z, border.radii[0].w);
|
||||
vClipSign = vec2(-1.0, 1.0);
|
||||
style = select_style(prim.user_data.x, border.style.zy);
|
||||
style = select_style(prim.user_data1, border.style.zy);
|
||||
vec4 adjusted_widths = get_effective_border_widths(border, style);
|
||||
vec4 inv_adjusted_widths = border.widths - adjusted_widths;
|
||||
set_radii(style,
|
||||
|
@ -181,7 +183,7 @@ void main(void) {
|
|||
color1 = border.colors[3];
|
||||
vClipCenter = corners.br_outer - border.radii[1].xy;
|
||||
vClipSign = vec2(-1.0, -1.0);
|
||||
style = select_style(prim.user_data.x, border.style.wz);
|
||||
style = select_style(prim.user_data1, border.style.wz);
|
||||
vec4 adjusted_widths = get_effective_border_widths(border, style);
|
||||
vec4 inv_adjusted_widths = border.widths - adjusted_widths;
|
||||
set_radii(style,
|
||||
|
@ -205,7 +207,7 @@ void main(void) {
|
|||
color1 = border.colors[0];
|
||||
vClipCenter = corners.bl_outer + vec2(border.radii[1].z, -border.radii[1].w);
|
||||
vClipSign = vec2(1.0, -1.0);
|
||||
style = select_style(prim.user_data.x, border.style.xw);
|
||||
style = select_style(prim.user_data1, border.style.xw);
|
||||
vec4 adjusted_widths = get_effective_border_widths(border, style);
|
||||
vec4 inv_adjusted_widths = border.widths - adjusted_widths;
|
||||
set_radii(style,
|
||||
|
@ -253,7 +255,7 @@ void main(void) {
|
|||
}
|
||||
}
|
||||
|
||||
write_color(color0, color1, style, color_delta, prim.user_data.x);
|
||||
write_color(color0, color1, style, color_delta, prim.user_data1);
|
||||
|
||||
RectWithSize segment_rect;
|
||||
segment_rect.p0 = p0;
|
||||
|
|
|
@ -42,11 +42,15 @@ void write_color(vec4 color, float style, bool flip) {
|
|||
|
||||
switch (int(style)) {
|
||||
case BORDER_STYLE_GROOVE:
|
||||
{
|
||||
modulate = flip ? vec2(1.3, 0.7) : vec2(0.7, 1.3);
|
||||
break;
|
||||
}
|
||||
case BORDER_STYLE_RIDGE:
|
||||
{
|
||||
modulate = flip ? vec2(0.7, 1.3) : vec2(1.3, 0.7);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
modulate = vec2(1.0);
|
||||
break;
|
||||
|
@ -101,7 +105,7 @@ void write_clip_params(float style,
|
|||
void main(void) {
|
||||
Primitive prim = load_primitive();
|
||||
Border border = fetch_border(prim.prim_index);
|
||||
int sub_part = prim.sub_index;
|
||||
int sub_part = prim.user_data0;
|
||||
BorderCorners corners = get_border_corners(border, prim.local_rect);
|
||||
vec4 color = border.colors[sub_part];
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
void main(void) {
|
||||
Primitive prim = load_primitive();
|
||||
BoxShadow bs = fetch_boxshadow(prim.prim_index);
|
||||
RectWithSize segment_rect = fetch_instance_geometry(prim.sub_index);
|
||||
RectWithSize segment_rect = fetch_instance_geometry(prim.user_data0);
|
||||
|
||||
VertexInfo vi = write_vertex(segment_rect,
|
||||
prim.local_clip_rect,
|
||||
|
@ -15,7 +15,7 @@ void main(void) {
|
|||
prim.task,
|
||||
prim.local_rect.p0);
|
||||
|
||||
RenderTaskData child_task = fetch_render_task(prim.user_data.x);
|
||||
RenderTaskData child_task = fetch_render_task(prim.user_data1);
|
||||
vUv.z = child_task.data1.x;
|
||||
|
||||
// Constant offsets to inset from bilinear filtering border.
|
||||
|
|
|
@ -16,7 +16,7 @@ void main(void) {
|
|||
prim.task,
|
||||
prim.local_rect.p0);
|
||||
|
||||
RenderTaskData child_task = fetch_render_task(prim.user_data.x);
|
||||
RenderTaskData child_task = fetch_render_task(prim.user_data1);
|
||||
vUv.z = child_task.data1.x;
|
||||
|
||||
vec2 texture_size = vec2(textureSize(sCacheRGBA8, 0));
|
||||
|
|
|
@ -4,10 +4,10 @@
|
|||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
void main(void) {
|
||||
PrimitiveInstance pi = fetch_prim_instance();
|
||||
AlphaBatchTask dest_task = fetch_alpha_batch_task(pi.render_task_index);
|
||||
ReadbackTask backdrop_task = fetch_readback_task(pi.user_data.x);
|
||||
AlphaBatchTask src_task = fetch_alpha_batch_task(pi.user_data.y);
|
||||
CompositeInstance ci = fetch_composite_instance();
|
||||
AlphaBatchTask dest_task = fetch_alpha_batch_task(ci.render_task_index);
|
||||
ReadbackTask backdrop_task = fetch_readback_task(ci.backdrop_task_index);
|
||||
AlphaBatchTask src_task = fetch_alpha_batch_task(ci.src_task_index);
|
||||
|
||||
vec2 dest_origin = dest_task.render_target_origin -
|
||||
dest_task.screen_space_origin +
|
||||
|
@ -27,8 +27,7 @@ void main(void) {
|
|||
st1 = (src_task.render_target_origin + src_task.size) / texture_size;
|
||||
vUv1 = vec3(mix(st0, st1, aPosition.xy), src_task.render_target_layer_index);
|
||||
|
||||
vOp = pi.sub_index;
|
||||
|
||||
gl_Position = uTransform * vec4(local_pos, pi.z, 1.0);
|
||||
vOp = ci.user_data0;
|
||||
|
||||
gl_Position = uTransform * vec4(local_pos, ci.z, 1.0);
|
||||
}
|
||||
|
|
|
@ -9,8 +9,8 @@ void main(void) {
|
|||
|
||||
vec4 abs_start_end_point = gradient.start_end_point + prim.local_rect.p0.xyxy;
|
||||
|
||||
GradientStop g0 = fetch_gradient_stop(prim.sub_index + 0);
|
||||
GradientStop g1 = fetch_gradient_stop(prim.sub_index + 1);
|
||||
GradientStop g0 = fetch_gradient_stop(prim.user_data0 + 0);
|
||||
GradientStop g1 = fetch_gradient_stop(prim.user_data0 + 1);
|
||||
|
||||
RectWithSize segment_rect;
|
||||
vec2 axis;
|
||||
|
|
|
@ -4,9 +4,9 @@
|
|||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
void main(void) {
|
||||
PrimitiveInstance pi = fetch_prim_instance();
|
||||
AlphaBatchTask dest_task = fetch_alpha_batch_task(pi.render_task_index);
|
||||
AlphaBatchTask src_task = fetch_alpha_batch_task(pi.user_data.x);
|
||||
CompositeInstance ci = fetch_composite_instance();
|
||||
AlphaBatchTask dest_task = fetch_alpha_batch_task(ci.render_task_index);
|
||||
AlphaBatchTask src_task = fetch_alpha_batch_task(ci.src_task_index);
|
||||
|
||||
vec2 dest_origin = dest_task.render_target_origin -
|
||||
dest_task.screen_space_origin +
|
||||
|
@ -21,5 +21,5 @@ void main(void) {
|
|||
vec2 st1 = (src_task.render_target_origin + src_task.size) / texture_size;
|
||||
vUv = vec3(mix(st0, st1, aPosition.xy), src_task.render_target_layer_index);
|
||||
|
||||
gl_Position = uTransform * vec4(local_pos, pi.z, 1.0);
|
||||
gl_Position = uTransform * vec4(local_pos, ci.z, 1.0);
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
void main(void) {
|
||||
Primitive prim = load_primitive();
|
||||
Image image = fetch_image(prim.prim_index);
|
||||
ResourceRect res = fetch_resource_rect(prim.user_data.x);
|
||||
ResourceRect res = fetch_resource_rect(prim.user_data0);
|
||||
|
||||
#ifdef WR_FEATURE_TRANSFORM
|
||||
TransformVertexInfo vi = write_transform_vertex(prim.local_rect,
|
||||
|
|
|
@ -35,7 +35,7 @@ void main(void) {
|
|||
vTileRepeat.y *= ratio_xy;
|
||||
|
||||
// V coordinate of gradient row in lookup texture.
|
||||
vGradientIndex = float(prim.sub_index);
|
||||
vGradientIndex = float(prim.user_data0);
|
||||
|
||||
// The texture size of the lookup texture
|
||||
vGradientTextureSize = vec2(textureSize(sGradients, 0));
|
||||
|
|
|
@ -31,14 +31,14 @@ vec3 bilerp(vec3 a, vec3 b, vec3 c, vec3 d, float s, float t) {
|
|||
}
|
||||
|
||||
void main(void) {
|
||||
PrimitiveInstance pi = fetch_prim_instance();
|
||||
SplitGeometry geometry = fetch_split_geometry(pi.specific_prim_index);
|
||||
AlphaBatchTask src_task = fetch_alpha_batch_task(pi.user_data.x);
|
||||
CompositeInstance ci = fetch_composite_instance();
|
||||
SplitGeometry geometry = fetch_split_geometry(ci.user_data0);
|
||||
AlphaBatchTask src_task = fetch_alpha_batch_task(ci.src_task_index);
|
||||
|
||||
vec3 world_pos = bilerp(geometry.points[0], geometry.points[1],
|
||||
geometry.points[3], geometry.points[2],
|
||||
aPosition.y, aPosition.x);
|
||||
vec4 final_pos = vec4(world_pos.xy * uDevicePixelRatio, pi.z, 1.0);
|
||||
vec4 final_pos = vec4(world_pos.xy * uDevicePixelRatio, ci.z, 1.0);
|
||||
|
||||
gl_Position = uTransform * final_pos;
|
||||
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
void main(void) {
|
||||
Primitive prim = load_primitive();
|
||||
TextRun text = fetch_text_run(prim.prim_index);
|
||||
Glyph glyph = fetch_glyph(prim.sub_index);
|
||||
ResourceRect res = fetch_resource_rect(prim.user_data.x);
|
||||
Glyph glyph = fetch_glyph(prim.user_data0);
|
||||
ResourceRect res = fetch_resource_rect(prim.user_data1);
|
||||
|
||||
RectWithSize local_rect = RectWithSize(glyph.offset.xy,
|
||||
(res.uv_rect.zw - res.uv_rect.xy) / uDevicePixelRatio);
|
||||
|
|
|
@ -25,11 +25,11 @@ void main(void) {
|
|||
|
||||
write_clip(vi.screen_pos, prim.clip_area);
|
||||
|
||||
ResourceRect y_rect = fetch_resource_rect(prim.user_data.x);
|
||||
ResourceRect y_rect = fetch_resource_rect(prim.user_data0);
|
||||
#ifndef WR_FEATURE_INTERLEAVED_Y_CB_CR // only 1 channel
|
||||
ResourceRect u_rect = fetch_resource_rect(prim.user_data.x + 1);
|
||||
ResourceRect u_rect = fetch_resource_rect(prim.user_data0 + 1);
|
||||
#ifndef WR_FEATURE_NV12 // 2 channel
|
||||
ResourceRect v_rect = fetch_resource_rect(prim.user_data.x + 2);
|
||||
ResourceRect v_rect = fetch_resource_rect(prim.user_data0 + 2);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ use euclid::Matrix4D;
|
|||
use fnv::FnvHasher;
|
||||
use gleam::gl;
|
||||
use internal_types::{PackedVertex, RenderTargetMode, TextureSampler, DEFAULT_TEXTURE};
|
||||
use internal_types::{BlurAttribute, ClearAttribute, ClipAttribute, VertexAttribute};
|
||||
use internal_types::{BlurAttribute, ClipAttribute, VertexAttribute};
|
||||
use internal_types::{DebugFontVertex, DebugColorVertex};
|
||||
//use notify::{self, Watcher};
|
||||
use super::shader_source;
|
||||
|
@ -76,10 +76,8 @@ pub enum TextureFilter {
|
|||
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
|
||||
pub enum VertexFormat {
|
||||
Triangles,
|
||||
Rectangles,
|
||||
DebugFont,
|
||||
DebugColor,
|
||||
Clear,
|
||||
Blur,
|
||||
Clip,
|
||||
}
|
||||
|
@ -89,7 +87,7 @@ enum FBOTarget {
|
|||
Draw,
|
||||
}
|
||||
|
||||
fn get_gl_format_bgra(gl: &gl::Gl) -> gl::GLuint {
|
||||
pub fn get_gl_format_bgra(gl: &gl::Gl) -> gl::GLuint {
|
||||
match gl.get_type() {
|
||||
gl::GlType::Gl => {
|
||||
GL_FORMAT_BGRA_GL
|
||||
|
@ -190,7 +188,6 @@ impl VertexFormat {
|
|||
vertex_stride as gl::GLint,
|
||||
8 + vertex_stride * offset);
|
||||
}
|
||||
VertexFormat::Rectangles |
|
||||
VertexFormat::Triangles => {
|
||||
let vertex_stride = mem::size_of::<PackedVertex>() as gl::GLuint;
|
||||
gl.enable_vertex_attrib_array(VertexAttribute::Position as gl::GLuint);
|
||||
|
@ -206,53 +203,18 @@ impl VertexFormat {
|
|||
instance.bind(gl);
|
||||
let mut offset = 0;
|
||||
|
||||
for &attrib in [VertexAttribute::GlobalPrimId,
|
||||
VertexAttribute::PrimitiveAddress,
|
||||
VertexAttribute::TaskIndex,
|
||||
VertexAttribute::ClipTaskIndex,
|
||||
VertexAttribute::LayerIndex,
|
||||
VertexAttribute::ElementIndex,
|
||||
VertexAttribute::ZIndex,
|
||||
for &attrib in [VertexAttribute::Data0,
|
||||
VertexAttribute::Data1,
|
||||
].into_iter() {
|
||||
gl.enable_vertex_attrib_array(attrib as gl::GLuint);
|
||||
gl.vertex_attrib_divisor(attrib as gl::GLuint, 1);
|
||||
gl.vertex_attrib_i_pointer(attrib as gl::GLuint,
|
||||
1,
|
||||
4,
|
||||
gl::INT,
|
||||
instance_stride,
|
||||
offset);
|
||||
offset += 4;
|
||||
offset += 16;
|
||||
}
|
||||
|
||||
gl.enable_vertex_attrib_array(VertexAttribute::UserData as gl::GLuint);
|
||||
gl.vertex_attrib_divisor(VertexAttribute::UserData as gl::GLuint, 1);
|
||||
gl.vertex_attrib_i_pointer(VertexAttribute::UserData as gl::GLuint,
|
||||
2,
|
||||
gl::INT,
|
||||
instance_stride,
|
||||
offset);
|
||||
}
|
||||
VertexFormat::Clear => {
|
||||
let vertex_stride = mem::size_of::<PackedVertex>() as gl::GLuint;
|
||||
gl.enable_vertex_attrib_array(ClearAttribute::Position as gl::GLuint);
|
||||
gl.vertex_attrib_divisor(ClearAttribute::Position as gl::GLuint, 0);
|
||||
|
||||
gl.vertex_attrib_pointer(ClearAttribute::Position as gl::GLuint,
|
||||
2,
|
||||
gl::FLOAT,
|
||||
false,
|
||||
vertex_stride as gl::GLint,
|
||||
0);
|
||||
|
||||
instance.bind(gl);
|
||||
|
||||
gl.enable_vertex_attrib_array(ClearAttribute::Rectangle as gl::GLuint);
|
||||
gl.vertex_attrib_divisor(ClearAttribute::Rectangle as gl::GLuint, 1);
|
||||
gl.vertex_attrib_i_pointer(ClearAttribute::Rectangle as gl::GLuint,
|
||||
4,
|
||||
gl::INT,
|
||||
instance_stride,
|
||||
0);
|
||||
}
|
||||
VertexFormat::Blur => {
|
||||
let vertex_stride = mem::size_of::<PackedVertex>() as gl::GLuint;
|
||||
|
@ -412,24 +374,15 @@ impl Program {
|
|||
self.gl.attach_shader(self.id, fs_id);
|
||||
|
||||
match vertex_format {
|
||||
VertexFormat::Triangles | VertexFormat::Rectangles |
|
||||
VertexFormat::DebugFont | VertexFormat::DebugColor => {
|
||||
VertexFormat::Triangles |
|
||||
VertexFormat::DebugFont |
|
||||
VertexFormat::DebugColor => {
|
||||
self.gl.bind_attrib_location(self.id, VertexAttribute::Position as gl::GLuint, "aPosition");
|
||||
self.gl.bind_attrib_location(self.id, VertexAttribute::Color as gl::GLuint, "aColor");
|
||||
self.gl.bind_attrib_location(self.id, VertexAttribute::ColorTexCoord as gl::GLuint, "aColorTexCoord");
|
||||
|
||||
self.gl.bind_attrib_location(self.id, VertexAttribute::GlobalPrimId as gl::GLuint, "aGlobalPrimId");
|
||||
self.gl.bind_attrib_location(self.id, VertexAttribute::PrimitiveAddress as gl::GLuint, "aPrimitiveAddress");
|
||||
self.gl.bind_attrib_location(self.id, VertexAttribute::TaskIndex as gl::GLuint, "aTaskIndex");
|
||||
self.gl.bind_attrib_location(self.id, VertexAttribute::ClipTaskIndex as gl::GLuint, "aClipTaskIndex");
|
||||
self.gl.bind_attrib_location(self.id, VertexAttribute::LayerIndex as gl::GLuint, "aLayerIndex");
|
||||
self.gl.bind_attrib_location(self.id, VertexAttribute::ElementIndex as gl::GLuint, "aElementIndex");
|
||||
self.gl.bind_attrib_location(self.id, VertexAttribute::UserData as gl::GLuint, "aUserData");
|
||||
self.gl.bind_attrib_location(self.id, VertexAttribute::ZIndex as gl::GLuint, "aZIndex");
|
||||
}
|
||||
VertexFormat::Clear => {
|
||||
self.gl.bind_attrib_location(self.id, ClearAttribute::Position as gl::GLuint, "aPosition");
|
||||
self.gl.bind_attrib_location(self.id, ClearAttribute::Rectangle as gl::GLuint, "aClearRectangle");
|
||||
self.gl.bind_attrib_location(self.id, VertexAttribute::Data0 as gl::GLuint, "aData0");
|
||||
self.gl.bind_attrib_location(self.id, VertexAttribute::Data1 as gl::GLuint, "aData1");
|
||||
}
|
||||
VertexFormat::Blur => {
|
||||
self.gl.bind_attrib_location(self.id, BlurAttribute::Position as gl::GLuint, "aPosition");
|
||||
|
|
|
@ -118,22 +118,8 @@ pub enum VertexAttribute {
|
|||
Color,
|
||||
ColorTexCoord,
|
||||
// instance-frequency primitive attributes
|
||||
GlobalPrimId,
|
||||
PrimitiveAddress,
|
||||
TaskIndex,
|
||||
ClipTaskIndex,
|
||||
LayerIndex,
|
||||
ElementIndex,
|
||||
UserData,
|
||||
ZIndex,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug)]
|
||||
pub enum ClearAttribute {
|
||||
// vertex frequency
|
||||
Position,
|
||||
// instance frequency
|
||||
Rectangle,
|
||||
Data0,
|
||||
Data1,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug)]
|
||||
|
|
|
@ -73,6 +73,9 @@ mod texture_cache;
|
|||
mod tiling;
|
||||
mod util;
|
||||
|
||||
#[doc(hidden)] // for benchmarks
|
||||
pub use texture_cache::TexturePage;
|
||||
|
||||
#[cfg(feature = "webgl")]
|
||||
mod webgl_types;
|
||||
|
||||
|
@ -140,4 +143,4 @@ extern crate plane_split;
|
|||
extern crate gamma_lut;
|
||||
|
||||
pub use renderer::{ExternalImage, ExternalImageSource, ExternalImageHandler};
|
||||
pub use renderer::{Renderer, RendererOptions};
|
||||
pub use renderer::{GraphicsApi, GraphicsApiInfo, ReadPixelsFormat, Renderer, RendererOptions};
|
||||
|
|
|
@ -13,6 +13,7 @@ use debug_colors;
|
|||
use debug_render::DebugRenderer;
|
||||
use device::{DepthFunction, Device, FrameId, ProgramId, TextureId, VertexFormat, GpuMarker, GpuProfiler};
|
||||
use device::{GpuSample, TextureFilter, VAOId, VertexUsageHint, FileWatcherHandler, TextureTarget, ShaderError};
|
||||
use device::get_gl_format_bgra;
|
||||
use euclid::Matrix4D;
|
||||
use fnv::FnvHasher;
|
||||
use frame_builder::FrameBuilderConfig;
|
||||
|
@ -43,7 +44,7 @@ use std::thread;
|
|||
use texture_cache::TextureCache;
|
||||
use rayon::ThreadPool;
|
||||
use rayon::Configuration as ThreadPoolConfig;
|
||||
use tiling::{AlphaBatchKind, BlurCommand, Frame, PrimitiveBatch, RenderTarget};
|
||||
use tiling::{AlphaBatchKind, BlurCommand, CompositePrimitiveInstance, Frame, PrimitiveBatch, RenderTarget};
|
||||
use tiling::{AlphaRenderTarget, CacheClipInstance, PrimitiveInstance, ColorRenderTarget, RenderTargetKind};
|
||||
use time::precise_time_ns;
|
||||
use thread_profiler::{register_thread_with_profiler, write_profile};
|
||||
|
@ -51,7 +52,7 @@ use util::TransformedRectKind;
|
|||
use webgl_types::GLContextHandleWrapper;
|
||||
use webrender_traits::{ColorF, Epoch, PipelineId, RenderNotifier, RenderDispatcher};
|
||||
use webrender_traits::{ExternalImageId, ExternalImageType, ImageData, ImageFormat, RenderApiSender};
|
||||
use webrender_traits::{DeviceIntRect, DevicePoint, DeviceIntPoint, DeviceIntSize, DeviceUintSize};
|
||||
use webrender_traits::{DeviceIntRect, DeviceUintRect, DevicePoint, DeviceIntPoint, DeviceIntSize, DeviceUintSize};
|
||||
use webrender_traits::{ImageDescriptor, BlobImageRenderer};
|
||||
use webrender_traits::{channel, FontRenderMode};
|
||||
use webrender_traits::VRCompositorHandler;
|
||||
|
@ -83,6 +84,18 @@ const GPU_TAG_PRIM_BORDER_EDGE: GpuProfileTag = GpuProfileTag { label: "BorderEd
|
|||
const GPU_TAG_PRIM_CACHE_IMAGE: GpuProfileTag = GpuProfileTag { label: "CacheImage", color: debug_colors::SILVER };
|
||||
const GPU_TAG_BLUR: GpuProfileTag = GpuProfileTag { label: "Blur", color: debug_colors::VIOLET };
|
||||
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
pub enum GraphicsApi {
|
||||
OpenGL,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct GraphicsApiInfo {
|
||||
pub kind: GraphicsApi,
|
||||
pub renderer: String,
|
||||
pub version: String,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
|
||||
pub enum ImageBufferKind {
|
||||
Texture2D = 0,
|
||||
|
@ -502,6 +515,12 @@ impl GpuDataTextures {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
pub enum ReadPixelsFormat {
|
||||
Rgba8,
|
||||
Bgra8,
|
||||
}
|
||||
|
||||
/// The renderer is responsible for submitting to the GPU the work prepared by the
|
||||
/// RenderBackend.
|
||||
pub struct Renderer {
|
||||
|
@ -1136,12 +1155,16 @@ impl Renderer {
|
|||
Ok((renderer, sender))
|
||||
}
|
||||
|
||||
fn get_yuv_shader_index(buffer_kind: ImageBufferKind, format: YuvFormat, color_space: YuvColorSpace) -> usize {
|
||||
((buffer_kind as usize) * YUV_FORMATS.len() + (format as usize)) * YUV_COLOR_SPACES.len() + (color_space as usize)
|
||||
pub fn get_graphics_api_info(&self) -> GraphicsApiInfo {
|
||||
GraphicsApiInfo {
|
||||
kind: GraphicsApi::OpenGL,
|
||||
version: self.device.gl().get_string(gl::VERSION),
|
||||
renderer: self.device.gl().get_string(gl::RENDERER),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn gl(&self) -> &gl::Gl {
|
||||
self.device.gl()
|
||||
fn get_yuv_shader_index(buffer_kind: ImageBufferKind, format: YuvFormat, color_space: YuvColorSpace) -> usize {
|
||||
((buffer_kind as usize) * YUV_FORMATS.len() + (format as usize)) * YUV_COLOR_SPACES.len() + (color_space as usize)
|
||||
}
|
||||
|
||||
/// Sets the new RenderNotifier.
|
||||
|
@ -1505,8 +1528,12 @@ impl Renderer {
|
|||
let transform_kind = batch.key.flags.transform_kind();
|
||||
let needs_clipping = batch.key.flags.needs_clipping();
|
||||
debug_assert!(!needs_clipping ||
|
||||
batch.key.blend_mode == BlendMode::Alpha ||
|
||||
batch.key.blend_mode == BlendMode::PremultipliedAlpha);
|
||||
match batch.key.blend_mode {
|
||||
BlendMode::Alpha |
|
||||
BlendMode::PremultipliedAlpha |
|
||||
BlendMode::Subpixel(..) => true,
|
||||
BlendMode::None => false,
|
||||
});
|
||||
|
||||
let (marker, shader) = match batch.key.kind {
|
||||
AlphaBatchKind::Composite => {
|
||||
|
@ -1586,7 +1613,7 @@ impl Renderer {
|
|||
// composites can't be grouped together because
|
||||
// they may overlap and affect each other.
|
||||
debug_assert!(batch.instances.len() == 1);
|
||||
let instance = &batch.instances[0];
|
||||
let instance = CompositePrimitiveInstance::from(&batch.instances[0]);
|
||||
|
||||
// TODO(gw): This code branch is all a bit hacky. We rely
|
||||
// on pulling specific values from the render target data
|
||||
|
@ -1599,9 +1626,9 @@ impl Renderer {
|
|||
// composite operation in this batch.
|
||||
let cache_texture_dimensions = self.device.get_texture_dimensions(cache_texture);
|
||||
|
||||
let backdrop = &render_task_data[instance.task_index as usize];
|
||||
let readback = &render_task_data[instance.user_data[0] as usize];
|
||||
let source = &render_task_data[instance.user_data[1] as usize];
|
||||
let backdrop = &render_task_data[instance.task_index.0 as usize];
|
||||
let readback = &render_task_data[instance.backdrop_task_index.0 as usize];
|
||||
let source = &render_task_data[instance.src_task_index.0 as usize];
|
||||
|
||||
// Bind the FBO to blit the backdrop to.
|
||||
// Called per-instance in case the layer (and therefore FBO)
|
||||
|
@ -2144,6 +2171,31 @@ impl Renderer {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn read_pixels_rgba8(&self, rect: DeviceUintRect) -> Vec<u8> {
|
||||
let mut pixels = vec![0u8; (4 * rect.size.width * rect.size.height) as usize];
|
||||
self.read_pixels_into(rect, ReadPixelsFormat::Rgba8, &mut pixels);
|
||||
pixels
|
||||
}
|
||||
|
||||
pub fn read_pixels_into(&self,
|
||||
rect: DeviceUintRect,
|
||||
format: ReadPixelsFormat,
|
||||
output: &mut [u8]) {
|
||||
let (gl_format, gl_type, size) = match format {
|
||||
ReadPixelsFormat::Rgba8 => (gl::RGBA, gl::UNSIGNED_BYTE, 4),
|
||||
ReadPixelsFormat::Bgra8 => (get_gl_format_bgra(self.device.gl()), gl::UNSIGNED_BYTE, 4),
|
||||
};
|
||||
assert_eq!(output.len(), (size * rect.size.width * rect.size.height) as usize);
|
||||
self.device.gl().flush();
|
||||
self.device.gl().read_pixels_into_buffer(rect.origin.x as gl::GLint,
|
||||
rect.origin.y as gl::GLint,
|
||||
rect.size.width as gl::GLsizei,
|
||||
rect.size.height as gl::GLsizei,
|
||||
gl_format,
|
||||
gl_type,
|
||||
output);
|
||||
}
|
||||
|
||||
// De-initialize the Renderer safely, assuming the GL is still alive and active.
|
||||
pub fn deinit(mut self) {
|
||||
//Note: this is a fake frame, only needed because texture deletion is require to happen inside a frame
|
||||
|
|
|
@ -8,7 +8,7 @@ use freelist::{FreeList, FreeListItem, FreeListItemId};
|
|||
use internal_types::{TextureUpdate, TextureUpdateOp};
|
||||
use internal_types::{CacheTextureId, RenderTargetMode, TextureUpdateList, RectUv};
|
||||
use profiler::TextureCacheProfileCounters;
|
||||
use std::cmp::{self, Ordering};
|
||||
use std::cmp;
|
||||
use std::collections::HashMap;
|
||||
use std::collections::hash_map::Entry;
|
||||
use std::hash::BuildHasherDefault;
|
||||
|
@ -50,6 +50,12 @@ const COALESCING_TIMEOUT_CHECKING_INTERVAL: usize = 256;
|
|||
|
||||
pub type TextureCacheItemId = FreeListItemId;
|
||||
|
||||
enum CoalescingStatus {
|
||||
Changed,
|
||||
Unchanged,
|
||||
Timeout,
|
||||
}
|
||||
|
||||
/// A texture allocator using the guillotine algorithm with the rectangle merge improvement. See
|
||||
/// sections 2.2 and 2.2.5 in "A Thousand Ways to Pack the Bin - A Practical Approach to Two-
|
||||
/// Dimensional Rectangle Bin Packing":
|
||||
|
@ -62,6 +68,7 @@ pub struct TexturePage {
|
|||
texture_id: CacheTextureId,
|
||||
texture_size: DeviceUintSize,
|
||||
free_list: FreeRectList,
|
||||
coalesce_vec: Vec<DeviceUintRect>,
|
||||
allocations: u32,
|
||||
dirty: bool,
|
||||
}
|
||||
|
@ -72,6 +79,7 @@ impl TexturePage {
|
|||
texture_id: texture_id,
|
||||
texture_size: texture_size,
|
||||
free_list: FreeRectList::new(),
|
||||
coalesce_vec: Vec::new(),
|
||||
allocations: 0,
|
||||
dirty: false,
|
||||
};
|
||||
|
@ -117,6 +125,9 @@ impl TexturePage {
|
|||
|
||||
pub fn allocate(&mut self,
|
||||
requested_dimensions: &DeviceUintSize) -> Option<DeviceUintPoint> {
|
||||
if requested_dimensions.width == 0 || requested_dimensions.height == 0 {
|
||||
return Some(DeviceUintPoint::new(0, 0))
|
||||
}
|
||||
let index = match self.find_index_of_best_rect(requested_dimensions) {
|
||||
None => return None,
|
||||
Some(index) => index,
|
||||
|
@ -173,7 +184,66 @@ impl TexturePage {
|
|||
Some(chosen_rect.origin)
|
||||
}
|
||||
|
||||
#[inline(never)]
|
||||
fn coalesce_impl<F, U>(rects: &mut [DeviceUintRect], deadline: u64, fun_key: F, fun_union: U)
|
||||
-> CoalescingStatus where
|
||||
F: Fn(&DeviceUintRect) -> (u32, u32),
|
||||
U: Fn(&mut DeviceUintRect, &mut DeviceUintRect) -> usize,
|
||||
{
|
||||
let mut num_changed = 0;
|
||||
rects.sort_by_key(&fun_key);
|
||||
|
||||
for work_index in 0..rects.len() {
|
||||
if work_index % COALESCING_TIMEOUT_CHECKING_INTERVAL == 0 &&
|
||||
time::precise_time_ns() >= deadline {
|
||||
return CoalescingStatus::Timeout
|
||||
}
|
||||
|
||||
let (left, candidates) = rects.split_at_mut(work_index + 1);
|
||||
let mut item = left.last_mut().unwrap();
|
||||
if util::rect_is_empty(item) {
|
||||
continue
|
||||
}
|
||||
|
||||
let key = fun_key(item);
|
||||
for candidate in candidates.iter_mut()
|
||||
.take_while(|r| key == fun_key(r)) {
|
||||
num_changed += fun_union(item, candidate);
|
||||
}
|
||||
}
|
||||
|
||||
if num_changed > 0 {
|
||||
CoalescingStatus::Changed
|
||||
} else {
|
||||
CoalescingStatus::Unchanged
|
||||
}
|
||||
}
|
||||
|
||||
/// Combine rects that have the same width and are adjacent.
|
||||
fn coalesce_horisontal(rects: &mut [DeviceUintRect], deadline: u64) -> CoalescingStatus {
|
||||
Self::coalesce_impl(rects, deadline,
|
||||
|item| (item.size.width, item.origin.x),
|
||||
|item, candidate| {
|
||||
if item.origin.y == candidate.max_y() || item.max_y() == candidate.origin.y {
|
||||
*item = item.union(candidate);
|
||||
candidate.size.width = 0;
|
||||
1
|
||||
} else { 0 }
|
||||
})
|
||||
}
|
||||
|
||||
/// Combine rects that have the same height and are adjacent.
|
||||
fn coalesce_vertical(rects: &mut [DeviceUintRect], deadline: u64) -> CoalescingStatus {
|
||||
Self::coalesce_impl(rects, deadline,
|
||||
|item| (item.size.height, item.origin.y),
|
||||
|item, candidate| {
|
||||
if item.origin.x == candidate.max_x() || item.max_x() == candidate.origin.x {
|
||||
*item = item.union(candidate);
|
||||
candidate.size.height = 0;
|
||||
1
|
||||
} else { 0 }
|
||||
})
|
||||
}
|
||||
|
||||
pub fn coalesce(&mut self) -> bool {
|
||||
if !self.dirty {
|
||||
return false
|
||||
|
@ -181,84 +251,33 @@ impl TexturePage {
|
|||
|
||||
// Iterate to a fixed point or until a timeout is reached.
|
||||
let deadline = time::precise_time_ns() + COALESCING_TIMEOUT;
|
||||
let mut free_list = mem::replace(&mut self.free_list, FreeRectList::new()).into_vec();
|
||||
self.free_list.copy_to_vec(&mut self.coalesce_vec);
|
||||
let mut changed = false;
|
||||
|
||||
// Combine rects that have the same width and are adjacent.
|
||||
let mut new_free_list = Vec::new();
|
||||
free_list.sort_by(|a, b| {
|
||||
match a.size.width.cmp(&b.size.width) {
|
||||
Ordering::Equal => a.origin.x.cmp(&b.origin.x),
|
||||
ordering => ordering,
|
||||
}
|
||||
});
|
||||
for work_index in 0..free_list.len() {
|
||||
if work_index % COALESCING_TIMEOUT_CHECKING_INTERVAL == 0 &&
|
||||
time::precise_time_ns() >= deadline {
|
||||
self.free_list = FreeRectList::from_slice(&free_list[..]);
|
||||
self.dirty = true;
|
||||
//Note: we might want to consider try to use the last sorted order first
|
||||
// but the elements get shuffled around a bit anyway during the bin placement
|
||||
|
||||
match Self::coalesce_horisontal(&mut self.coalesce_vec, deadline) {
|
||||
CoalescingStatus::Changed => changed = true,
|
||||
CoalescingStatus::Unchanged => (),
|
||||
CoalescingStatus::Timeout => {
|
||||
self.free_list.init_from_slice(&self.coalesce_vec);
|
||||
return true
|
||||
}
|
||||
|
||||
if free_list[work_index].size.width == 0 {
|
||||
continue
|
||||
}
|
||||
for candidate_index in (work_index + 1)..free_list.len() {
|
||||
if free_list[work_index].size.width != free_list[candidate_index].size.width ||
|
||||
free_list[work_index].origin.x != free_list[candidate_index].origin.x {
|
||||
break
|
||||
}
|
||||
if free_list[work_index].origin.y == free_list[candidate_index].max_y() ||
|
||||
free_list[work_index].max_y() == free_list[candidate_index].origin.y {
|
||||
changed = true;
|
||||
free_list[work_index] =
|
||||
free_list[work_index].union(&free_list[candidate_index]);
|
||||
free_list[candidate_index].size.width = 0
|
||||
}
|
||||
new_free_list.push(free_list[work_index])
|
||||
}
|
||||
new_free_list.push(free_list[work_index])
|
||||
}
|
||||
free_list = new_free_list;
|
||||
|
||||
// Combine rects that have the same height and are adjacent.
|
||||
let mut new_free_list = Vec::new();
|
||||
free_list.sort_by(|a, b| {
|
||||
match a.size.height.cmp(&b.size.height) {
|
||||
Ordering::Equal => a.origin.y.cmp(&b.origin.y),
|
||||
ordering => ordering,
|
||||
}
|
||||
});
|
||||
for work_index in 0..free_list.len() {
|
||||
if work_index % COALESCING_TIMEOUT_CHECKING_INTERVAL == 0 &&
|
||||
time::precise_time_ns() >= deadline {
|
||||
self.free_list = FreeRectList::from_slice(&free_list[..]);
|
||||
self.dirty = true;
|
||||
match Self::coalesce_vertical(&mut self.coalesce_vec, deadline) {
|
||||
CoalescingStatus::Changed => changed = true,
|
||||
CoalescingStatus::Unchanged => (),
|
||||
CoalescingStatus::Timeout => {
|
||||
self.free_list.init_from_slice(&self.coalesce_vec);
|
||||
return true
|
||||
}
|
||||
|
||||
if free_list[work_index].size.height == 0 {
|
||||
continue
|
||||
}
|
||||
for candidate_index in (work_index + 1)..free_list.len() {
|
||||
if free_list[work_index].size.height !=
|
||||
free_list[candidate_index].size.height ||
|
||||
free_list[work_index].origin.y != free_list[candidate_index].origin.y {
|
||||
break
|
||||
}
|
||||
if free_list[work_index].origin.x == free_list[candidate_index].max_x() ||
|
||||
free_list[work_index].max_x() == free_list[candidate_index].origin.x {
|
||||
changed = true;
|
||||
free_list[work_index] =
|
||||
free_list[work_index].union(&free_list[candidate_index]);
|
||||
free_list[candidate_index].size.height = 0
|
||||
}
|
||||
}
|
||||
new_free_list.push(free_list[work_index])
|
||||
}
|
||||
free_list = new_free_list;
|
||||
|
||||
self.free_list = FreeRectList::from_slice(&free_list[..]);
|
||||
if changed {
|
||||
self.free_list.init_from_slice(&self.coalesce_vec);
|
||||
}
|
||||
self.dirty = changed;
|
||||
changed
|
||||
}
|
||||
|
@ -273,6 +292,9 @@ impl TexturePage {
|
|||
}
|
||||
|
||||
fn free(&mut self, rect: &DeviceUintRect) {
|
||||
if util::rect_is_empty(rect) {
|
||||
return
|
||||
}
|
||||
debug_assert!(self.allocations > 0);
|
||||
self.allocations -= 1;
|
||||
if self.allocations == 0 {
|
||||
|
@ -312,6 +334,25 @@ impl TexturePage {
|
|||
}
|
||||
}
|
||||
|
||||
// testing functionality
|
||||
impl TexturePage {
|
||||
#[doc(hidden)]
|
||||
pub fn new_dummy(size: DeviceUintSize) -> TexturePage {
|
||||
Self::new(CacheTextureId(0), size)
|
||||
}
|
||||
|
||||
#[doc(hidden)]
|
||||
pub fn fill_from(&mut self, other: &TexturePage) {
|
||||
self.dirty = true;
|
||||
self.free_list.small.clear();
|
||||
self.free_list.small.extend_from_slice(&other.free_list.small);
|
||||
self.free_list.medium.clear();
|
||||
self.free_list.medium.extend_from_slice(&other.free_list.medium);
|
||||
self.free_list.large.clear();
|
||||
self.free_list.large.extend_from_slice(&other.free_list.large);
|
||||
}
|
||||
}
|
||||
|
||||
/// A binning free list. Binning is important to avoid sifting through lots of small strips when
|
||||
/// allocating many texture items.
|
||||
struct FreeRectList {
|
||||
|
@ -329,12 +370,15 @@ impl FreeRectList {
|
|||
}
|
||||
}
|
||||
|
||||
fn from_slice(vector: &[DeviceUintRect]) -> FreeRectList {
|
||||
let mut free_list = FreeRectList::new();
|
||||
for rect in vector {
|
||||
free_list.push(rect)
|
||||
fn init_from_slice(&mut self, rects: &[DeviceUintRect]) {
|
||||
self.small.clear();
|
||||
self.medium.clear();
|
||||
self.large.clear();
|
||||
for rect in rects {
|
||||
if !util::rect_is_empty(rect) {
|
||||
self.push(rect)
|
||||
}
|
||||
}
|
||||
free_list
|
||||
}
|
||||
|
||||
fn push(&mut self, rect: &DeviceUintRect) {
|
||||
|
@ -361,10 +405,11 @@ impl FreeRectList {
|
|||
}
|
||||
}
|
||||
|
||||
fn into_vec(mut self) -> Vec<DeviceUintRect> {
|
||||
self.small.extend(self.medium.drain(..));
|
||||
self.small.extend(self.large.drain(..));
|
||||
self.small
|
||||
fn copy_to_vec(&self, rects: &mut Vec<DeviceUintRect>) {
|
||||
rects.clear();
|
||||
rects.extend_from_slice(&self.small);
|
||||
rects.extend_from_slice(&self.medium);
|
||||
rects.extend_from_slice(&self.large);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -379,13 +424,14 @@ enum FreeListBin {
|
|||
}
|
||||
|
||||
impl FreeListBin {
|
||||
pub fn for_size(size: &DeviceUintSize) -> FreeListBin {
|
||||
fn for_size(size: &DeviceUintSize) -> FreeListBin {
|
||||
if size.width >= MINIMUM_LARGE_RECT_SIZE && size.height >= MINIMUM_LARGE_RECT_SIZE {
|
||||
FreeListBin::Large
|
||||
} else if size.width >= MINIMUM_MEDIUM_RECT_SIZE &&
|
||||
size.height >= MINIMUM_MEDIUM_RECT_SIZE {
|
||||
FreeListBin::Medium
|
||||
} else {
|
||||
debug_assert!(size.width > 0 && size.height > 0);
|
||||
FreeListBin::Small
|
||||
}
|
||||
}
|
||||
|
|
|
@ -314,16 +314,14 @@ impl AlphaRenderItem {
|
|||
let amount = (amount * 65535.0).round() as i32;
|
||||
let batch = batch_list.get_suitable_batch(&key, &stacking_context.screen_bounds);
|
||||
|
||||
batch.add_instance(PrimitiveInstance {
|
||||
global_prim_id: -1,
|
||||
prim_address: GpuStoreAddress(0),
|
||||
task_index: task_index.0 as i32,
|
||||
clip_task_index: -1,
|
||||
layer_index: -1,
|
||||
sub_index: filter_mode,
|
||||
user_data: [src_task_index.0 as i32, amount],
|
||||
z_sort_index: z,
|
||||
});
|
||||
let instance = CompositePrimitiveInstance::new(task_index,
|
||||
src_task_index,
|
||||
RenderTaskIndex(0),
|
||||
filter_mode,
|
||||
amount,
|
||||
z);
|
||||
|
||||
batch.add_instance(PrimitiveInstance::from(instance));
|
||||
}
|
||||
AlphaRenderItem::HardwareComposite(stacking_context_index, src_id, composite_op, z) => {
|
||||
let stacking_context = &ctx.stacking_context_store[stacking_context_index.0];
|
||||
|
@ -333,16 +331,15 @@ impl AlphaRenderItem {
|
|||
composite_op.to_blend_mode(),
|
||||
BatchTextures::no_texture());
|
||||
let batch = batch_list.get_suitable_batch(&key, &stacking_context.screen_bounds);
|
||||
batch.add_instance(PrimitiveInstance {
|
||||
global_prim_id: -1,
|
||||
prim_address: GpuStoreAddress(0),
|
||||
task_index: task_index.0 as i32,
|
||||
clip_task_index: -1,
|
||||
layer_index: -1,
|
||||
sub_index: -1,
|
||||
user_data: [src_task_index.0 as i32, 0],
|
||||
z_sort_index: z,
|
||||
});
|
||||
|
||||
let instance = CompositePrimitiveInstance::new(task_index,
|
||||
src_task_index,
|
||||
RenderTaskIndex(0),
|
||||
0,
|
||||
0,
|
||||
z);
|
||||
|
||||
batch.add_instance(PrimitiveInstance::from(instance));
|
||||
}
|
||||
AlphaRenderItem::Composite(stacking_context_index,
|
||||
backdrop_id,
|
||||
|
@ -357,17 +354,15 @@ impl AlphaRenderItem {
|
|||
let batch = batch_list.get_suitable_batch(&key, &stacking_context.screen_bounds);
|
||||
let backdrop_task = render_tasks.get_task_index(&backdrop_id, child_pass_index);
|
||||
let src_task_index = render_tasks.get_static_task_index(&src_id);
|
||||
batch.add_instance(PrimitiveInstance {
|
||||
global_prim_id: -1,
|
||||
prim_address: GpuStoreAddress(0),
|
||||
task_index: task_index.0 as i32,
|
||||
clip_task_index: -1,
|
||||
layer_index: -1,
|
||||
sub_index: mode as u32 as i32,
|
||||
user_data: [ backdrop_task.0 as i32,
|
||||
src_task_index.0 as i32 ],
|
||||
z_sort_index: z,
|
||||
});
|
||||
|
||||
let instance = CompositePrimitiveInstance::new(task_index,
|
||||
src_task_index,
|
||||
backdrop_task,
|
||||
mode as u32 as i32,
|
||||
0,
|
||||
z);
|
||||
|
||||
batch.add_instance(PrimitiveInstance::from(instance));
|
||||
}
|
||||
AlphaRenderItem::Primitive(clip_scroll_group_index_opt, prim_index, z) => {
|
||||
let prim_metadata = ctx.prim_store.get_metadata(prim_index);
|
||||
|
@ -375,9 +370,9 @@ impl AlphaRenderItem {
|
|||
Some(group_index) => {
|
||||
let group = &ctx.clip_scroll_group_store[group_index.0];
|
||||
let bounding_rect = group.screen_bounding_rect.as_ref().unwrap();
|
||||
(bounding_rect.0, group.packed_layer_index.0 as i32)
|
||||
(bounding_rect.0, group.packed_layer_index)
|
||||
},
|
||||
None => (TransformedRectKind::AxisAligned, 0),
|
||||
None => (TransformedRectKind::AxisAligned, PackedLayerIndex(0)),
|
||||
};
|
||||
let needs_clipping = prim_metadata.needs_clipping();
|
||||
let mut flags = AlphaBatchKeyFlags::empty();
|
||||
|
@ -398,24 +393,18 @@ impl AlphaRenderItem {
|
|||
None => {
|
||||
OPAQUE_TASK_INDEX
|
||||
}
|
||||
}.0 as i32;
|
||||
let global_prim_id = prim_index.0 as i32;
|
||||
let prim_address = prim_metadata.gpu_prim_index;
|
||||
let task_index = task_index.0 as i32;
|
||||
};
|
||||
let needs_blending = !prim_metadata.is_opaque ||
|
||||
needs_clipping ||
|
||||
transform_kind == TransformedRectKind::Complex;
|
||||
let blend_mode = ctx.prim_store.get_blend_mode(needs_blending, prim_metadata);
|
||||
let base_instance = PrimitiveInstance {
|
||||
task_index: task_index,
|
||||
clip_task_index: clip_task_index,
|
||||
layer_index: packed_layer_index,
|
||||
global_prim_id: global_prim_id,
|
||||
prim_address: prim_address,
|
||||
sub_index: 0,
|
||||
user_data: [0, 0],
|
||||
z_sort_index: z,
|
||||
};
|
||||
|
||||
let base_instance = SimplePrimitiveInstance::new(prim_index,
|
||||
prim_metadata.gpu_prim_index,
|
||||
task_index,
|
||||
clip_task_index,
|
||||
packed_layer_index,
|
||||
z);
|
||||
|
||||
match prim_metadata.prim_kind {
|
||||
PrimitiveKind::Border => {
|
||||
|
@ -430,16 +419,13 @@ impl AlphaRenderItem {
|
|||
match *instance_kind {
|
||||
BorderCornerInstance::Single => {
|
||||
batch.add_instance(base_instance.build(sub_index,
|
||||
BorderCornerSide::Both as i32,
|
||||
0));
|
||||
BorderCornerSide::Both as i32,));
|
||||
}
|
||||
BorderCornerInstance::Double => {
|
||||
batch.add_instance(base_instance.build(sub_index,
|
||||
BorderCornerSide::First as i32,
|
||||
0));
|
||||
BorderCornerSide::First as i32));
|
||||
batch.add_instance(base_instance.build(sub_index,
|
||||
BorderCornerSide::Second as i32,
|
||||
0));
|
||||
BorderCornerSide::Second as i32));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -447,14 +433,14 @@ impl AlphaRenderItem {
|
|||
|
||||
batch_list.with_suitable_batch(&edge_key, item_bounding_rect, |batch| {
|
||||
for border_segment in 0..4 {
|
||||
batch.add_instance(base_instance.build(border_segment, 0, 0));
|
||||
batch.add_instance(base_instance.build(border_segment, 0));
|
||||
}
|
||||
});
|
||||
}
|
||||
PrimitiveKind::Rectangle => {
|
||||
let key = AlphaBatchKey::new(AlphaBatchKind::Rectangle, flags, blend_mode, textures);
|
||||
let batch = batch_list.get_suitable_batch(&key, item_bounding_rect);
|
||||
batch.add_instance(base_instance);
|
||||
batch.add_instance(base_instance.build(0, 0));
|
||||
}
|
||||
PrimitiveKind::Image => {
|
||||
let image_cpu = &ctx.prim_store.cpu_images[prim_metadata.cpu_prim_index.0];
|
||||
|
@ -479,7 +465,7 @@ impl AlphaRenderItem {
|
|||
|
||||
let key = AlphaBatchKey::new(batch_kind, flags, blend_mode, textures);
|
||||
let batch = batch_list.get_suitable_batch(&key, item_bounding_rect);
|
||||
batch.add_instance(base_instance.build(0, image_cpu.resource_address.0, 0));
|
||||
batch.add_instance(base_instance.build(image_cpu.resource_address.0, 0));
|
||||
}
|
||||
PrimitiveKind::TextRun => {
|
||||
let text_cpu = &ctx.prim_store.cpu_text_runs[prim_metadata.cpu_prim_index.0];
|
||||
|
@ -504,36 +490,33 @@ impl AlphaRenderItem {
|
|||
};
|
||||
|
||||
for glyph_index in 0..prim_metadata.gpu_data_count {
|
||||
let user_data0 = match batch_kind {
|
||||
let user_data1 = match batch_kind {
|
||||
AlphaBatchKind::TextRun => text_cpu.resource_address.0 + glyph_index,
|
||||
AlphaBatchKind::CacheImage => cache_task_index,
|
||||
_ => unreachable!(),
|
||||
};
|
||||
|
||||
batch.add_instance(base_instance.build(prim_metadata.gpu_data_address.0 + glyph_index,
|
||||
user_data0,
|
||||
0));
|
||||
user_data1));
|
||||
}
|
||||
}
|
||||
PrimitiveKind::AlignedGradient => {
|
||||
let key = AlphaBatchKey::new(AlphaBatchKind::AlignedGradient, flags, blend_mode, textures);
|
||||
let batch = batch_list.get_suitable_batch(&key, item_bounding_rect);
|
||||
for part_index in 0..(prim_metadata.gpu_data_count - 1) {
|
||||
batch.add_instance(base_instance.build(prim_metadata.gpu_data_address.0 + part_index, 0, 0));
|
||||
batch.add_instance(base_instance.build(prim_metadata.gpu_data_address.0 + part_index, 0));
|
||||
}
|
||||
}
|
||||
PrimitiveKind::AngleGradient => {
|
||||
let key = AlphaBatchKey::new(AlphaBatchKind::AngleGradient, flags, blend_mode, textures);
|
||||
let batch = batch_list.get_suitable_batch(&key, item_bounding_rect);
|
||||
batch.add_instance(base_instance.build(prim_metadata.gpu_data_address.0,
|
||||
prim_metadata.gpu_data_count,
|
||||
0));
|
||||
}
|
||||
PrimitiveKind::RadialGradient => {
|
||||
let key = AlphaBatchKey::new(AlphaBatchKind::RadialGradient, flags, blend_mode, textures);
|
||||
let batch = batch_list.get_suitable_batch(&key, item_bounding_rect);
|
||||
batch.add_instance(base_instance.build(prim_metadata.gpu_data_address.0,
|
||||
prim_metadata.gpu_data_count,
|
||||
0));
|
||||
}
|
||||
PrimitiveKind::YuvImage => {
|
||||
|
@ -571,8 +554,7 @@ impl AlphaRenderItem {
|
|||
textures);
|
||||
let batch = batch_list.get_suitable_batch(&key, item_bounding_rect);
|
||||
|
||||
batch.add_instance(base_instance.build(0,
|
||||
image_yuv_cpu.yuv_resource_address.0,
|
||||
batch.add_instance(base_instance.build(image_yuv_cpu.yuv_resource_address.0,
|
||||
0));
|
||||
}
|
||||
PrimitiveKind::BoxShadow => {
|
||||
|
@ -585,8 +567,7 @@ impl AlphaRenderItem {
|
|||
|
||||
for rect_index in 0..prim_metadata.gpu_data_count {
|
||||
batch.add_instance(base_instance.build(prim_metadata.gpu_data_address.0 + rect_index,
|
||||
cache_task_index.0 as i32,
|
||||
0));
|
||||
cache_task_index.0 as i32));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -599,16 +580,15 @@ impl AlphaRenderItem {
|
|||
let stacking_context = &ctx.stacking_context_store[sc_index.0];
|
||||
let batch = batch_list.get_suitable_batch(&key, &stacking_context.screen_bounds);
|
||||
let source_task = render_tasks.get_task_index(&task_id, child_pass_index);
|
||||
batch.add_instance(PrimitiveInstance {
|
||||
global_prim_id: -1,
|
||||
prim_address: gpu_address,
|
||||
task_index: task_index.0 as i32,
|
||||
clip_task_index: -1,
|
||||
layer_index: -1, // not be used
|
||||
sub_index: 0,
|
||||
user_data: [ source_task.0 as i32, 0 ],
|
||||
z_sort_index: z,
|
||||
});
|
||||
|
||||
let instance = CompositePrimitiveInstance::new(task_index,
|
||||
source_task,
|
||||
RenderTaskIndex(0),
|
||||
gpu_address.0,
|
||||
0,
|
||||
z);
|
||||
|
||||
batch.add_instance(PrimitiveInstance::from(instance));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -970,16 +950,13 @@ impl RenderTarget for ColorRenderTarget {
|
|||
|
||||
match prim_metadata.prim_kind {
|
||||
PrimitiveKind::BoxShadow => {
|
||||
self.box_shadow_cache_prims.push(PrimitiveInstance {
|
||||
global_prim_id: prim_index.0 as i32,
|
||||
prim_address: prim_metadata.gpu_prim_index,
|
||||
task_index: render_tasks.get_task_index(&task.id, pass_index).0 as i32,
|
||||
clip_task_index: 0,
|
||||
layer_index: 0,
|
||||
sub_index: 0,
|
||||
user_data: [0; 2],
|
||||
z_sort_index: 0, // z is disabled for rendering cache primitives
|
||||
});
|
||||
let instance = SimplePrimitiveInstance::new(prim_index,
|
||||
prim_metadata.gpu_prim_index,
|
||||
render_tasks.get_task_index(&task.id, pass_index),
|
||||
RenderTaskIndex(0),
|
||||
PackedLayerIndex(0),
|
||||
0); // z is disabled for rendering cache primitives
|
||||
self.box_shadow_cache_prims.push(instance.build(0, 0));
|
||||
}
|
||||
PrimitiveKind::TextRun => {
|
||||
let text = &ctx.prim_store.cpu_text_runs[prim_metadata.cpu_prim_index.0];
|
||||
|
@ -998,17 +975,16 @@ impl RenderTarget for ColorRenderTarget {
|
|||
self.text_run_textures.colors[0] == textures.colors[0]);
|
||||
self.text_run_textures = textures;
|
||||
|
||||
let instance = SimplePrimitiveInstance::new(prim_index,
|
||||
prim_metadata.gpu_prim_index,
|
||||
render_tasks.get_task_index(&task.id, pass_index),
|
||||
RenderTaskIndex(0),
|
||||
PackedLayerIndex(0),
|
||||
0); // z is disabled for rendering cache primitives
|
||||
|
||||
for glyph_index in 0..prim_metadata.gpu_data_count {
|
||||
self.text_run_cache_prims.push(PrimitiveInstance {
|
||||
global_prim_id: prim_index.0 as i32,
|
||||
prim_address: prim_metadata.gpu_prim_index,
|
||||
task_index: render_tasks.get_task_index(&task.id, pass_index).0 as i32,
|
||||
clip_task_index: 0,
|
||||
layer_index: 0,
|
||||
sub_index: prim_metadata.gpu_data_address.0 + glyph_index,
|
||||
user_data: [ text.resource_address.0 + glyph_index, 0],
|
||||
z_sort_index: 0, // z is disabled for rendering cache primitives
|
||||
});
|
||||
self.text_run_cache_prims.push(instance.build(prim_metadata.gpu_data_address.0 + glyph_index,
|
||||
text.resource_address.0 + glyph_index));
|
||||
}
|
||||
}
|
||||
_ => {
|
||||
|
@ -1289,27 +1265,107 @@ pub struct CacheClipInstance {
|
|||
segment: i32,
|
||||
}
|
||||
|
||||
// 32 bytes per instance should be enough for anyone!
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct PrimitiveInstance {
|
||||
global_prim_id: i32,
|
||||
prim_address: GpuStoreAddress,
|
||||
pub task_index: i32,
|
||||
clip_task_index: i32,
|
||||
layer_index: i32,
|
||||
sub_index: i32,
|
||||
z_sort_index: i32,
|
||||
pub user_data: [i32; 2],
|
||||
data: [i32; 8],
|
||||
}
|
||||
|
||||
impl PrimitiveInstance {
|
||||
pub fn build(&self,
|
||||
sub_index: i32,
|
||||
user_data0: i32,
|
||||
user_data1: i32) -> PrimitiveInstance {
|
||||
struct SimplePrimitiveInstance {
|
||||
pub global_prim_index: i32,
|
||||
pub specific_prim_address: i32,
|
||||
pub task_index: i32,
|
||||
pub clip_task_index: i32,
|
||||
pub layer_index: i32,
|
||||
pub z_sort_index: i32,
|
||||
}
|
||||
|
||||
impl SimplePrimitiveInstance {
|
||||
fn new(prim_index: PrimitiveIndex,
|
||||
specific_prim_address: GpuStoreAddress,
|
||||
task_index: RenderTaskIndex,
|
||||
clip_task_index: RenderTaskIndex,
|
||||
layer_index: PackedLayerIndex,
|
||||
z_sort_index: i32) -> SimplePrimitiveInstance {
|
||||
SimplePrimitiveInstance {
|
||||
global_prim_index: prim_index.0 as i32,
|
||||
specific_prim_address: specific_prim_address.0 as i32,
|
||||
task_index: task_index.0 as i32,
|
||||
clip_task_index: clip_task_index.0 as i32,
|
||||
layer_index: layer_index.0 as i32,
|
||||
z_sort_index: z_sort_index,
|
||||
}
|
||||
}
|
||||
|
||||
fn build(&self, data0: i32, data1: i32) -> PrimitiveInstance {
|
||||
PrimitiveInstance {
|
||||
sub_index: sub_index,
|
||||
user_data: [user_data0, user_data1],
|
||||
..*self
|
||||
data: [
|
||||
self.global_prim_index,
|
||||
self.specific_prim_address,
|
||||
self.task_index,
|
||||
self.clip_task_index,
|
||||
self.layer_index,
|
||||
self.z_sort_index,
|
||||
data0,
|
||||
data1,
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub struct CompositePrimitiveInstance {
|
||||
pub task_index: RenderTaskIndex,
|
||||
pub src_task_index: RenderTaskIndex,
|
||||
pub backdrop_task_index: RenderTaskIndex,
|
||||
pub data0: i32,
|
||||
pub data1: i32,
|
||||
pub z: i32,
|
||||
}
|
||||
|
||||
impl CompositePrimitiveInstance {
|
||||
fn new(task_index: RenderTaskIndex,
|
||||
src_task_index: RenderTaskIndex,
|
||||
backdrop_task_index: RenderTaskIndex,
|
||||
data0: i32,
|
||||
data1: i32,
|
||||
z: i32) -> CompositePrimitiveInstance {
|
||||
CompositePrimitiveInstance {
|
||||
task_index: task_index,
|
||||
src_task_index: src_task_index,
|
||||
backdrop_task_index: backdrop_task_index,
|
||||
data0: data0,
|
||||
data1: data1,
|
||||
z: z,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<CompositePrimitiveInstance> for PrimitiveInstance {
|
||||
fn from(instance: CompositePrimitiveInstance) -> PrimitiveInstance {
|
||||
PrimitiveInstance {
|
||||
data: [
|
||||
instance.task_index.0 as i32,
|
||||
instance.src_task_index.0 as i32,
|
||||
instance.backdrop_task_index.0 as i32,
|
||||
instance.z,
|
||||
instance.data0,
|
||||
instance.data1,
|
||||
0,
|
||||
0,
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> From<&'a PrimitiveInstance> for CompositePrimitiveInstance {
|
||||
fn from(instance: &'a PrimitiveInstance) -> CompositePrimitiveInstance {
|
||||
CompositePrimitiveInstance {
|
||||
task_index: RenderTaskIndex(instance.data[0] as usize),
|
||||
src_task_index: RenderTaskIndex(instance.data[1] as usize),
|
||||
backdrop_task_index: RenderTaskIndex(instance.data[2] as usize),
|
||||
z: instance.data[3],
|
||||
data0: instance.data[4],
|
||||
data1: instance.data[5],
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1457,7 +1513,6 @@ pub struct PackedLayer {
|
|||
pub transform: LayerToWorldTransform,
|
||||
pub inv_transform: WorldToLayerTransform,
|
||||
pub local_clip_rect: LayerRect,
|
||||
pub screen_vertices: [WorldPoint4D; 4],
|
||||
}
|
||||
|
||||
impl Default for PackedLayer {
|
||||
|
@ -1466,7 +1521,6 @@ impl Default for PackedLayer {
|
|||
transform: LayerToWorldTransform::identity(),
|
||||
inv_transform: WorldToLayerTransform::identity(),
|
||||
local_clip_rect: LayerRect::zero(),
|
||||
screen_vertices: [WorldPoint4D::zero(); 4],
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1488,7 +1542,6 @@ impl PackedLayer {
|
|||
-> Option<(TransformedRectKind, DeviceIntRect)> {
|
||||
let xf_rect = TransformedRect::new(&local_rect, &self.transform, device_pixel_ratio);
|
||||
xf_rect.bounding_rect.intersection(screen_rect).map(|rect| {
|
||||
self.screen_vertices = xf_rect.vertices.clone();
|
||||
self.local_clip_rect = *local_rect;
|
||||
(xf_rect.kind, rect)
|
||||
})
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include "WebRenderAPI.h"
|
||||
#include "LayersLogging.h"
|
||||
#include "mozilla/webrender/RendererOGL.h"
|
||||
#include "mozilla/gfx/gfxVars.h"
|
||||
#include "mozilla/layers/CompositorThread.h"
|
||||
|
@ -11,9 +12,14 @@
|
|||
#include "mozilla/widget/CompositorWidget.h"
|
||||
#include "mozilla/layers/SynchronousTask.h"
|
||||
|
||||
#define WRDL_LOG(...)
|
||||
//#define WRDL_LOG(...) printf_stderr("WRDL: " __VA_ARGS__)
|
||||
|
||||
namespace mozilla {
|
||||
namespace wr {
|
||||
|
||||
using layers::Stringify;
|
||||
|
||||
class NewRenderer : public RendererEvent
|
||||
{
|
||||
public:
|
||||
|
@ -556,6 +562,8 @@ DisplayListBuilder::PushStackingContext(const WrRect& aBounds,
|
|||
matrix = ToWrMatrix(*aTransform);
|
||||
}
|
||||
const WrMatrix* maybeTransform = aTransform ? &matrix : nullptr;
|
||||
WRDL_LOG("PushStackingContext b=%s t=%s\n", Stringify(aBounds).c_str(),
|
||||
aTransform ? Stringify(*aTransform).c_str() : "none");
|
||||
wr_dp_push_stacking_context(mWrState, aBounds, aAnimationId, aOpacity,
|
||||
maybeTransform, aMixBlendMode);
|
||||
}
|
||||
|
@ -573,6 +581,7 @@ DisplayListBuilder::PushStackingContext(const WrRect& aBounds,
|
|||
void
|
||||
DisplayListBuilder::PopStackingContext()
|
||||
{
|
||||
WRDL_LOG("PopStackingContext\n");
|
||||
wr_dp_pop_stacking_context(mWrState);
|
||||
}
|
||||
|
||||
|
@ -580,12 +589,14 @@ void
|
|||
DisplayListBuilder::PushClip(const WrRect& aClipRect,
|
||||
const WrImageMask* aMask)
|
||||
{
|
||||
WRDL_LOG("PushClip r=%s m=%p\n", Stringify(aClipRect).c_str(), aMask);
|
||||
wr_dp_push_clip(mWrState, aClipRect, aMask);
|
||||
}
|
||||
|
||||
void
|
||||
DisplayListBuilder::PopClip()
|
||||
{
|
||||
WRDL_LOG("PopClip\n");
|
||||
wr_dp_pop_clip(mWrState);
|
||||
}
|
||||
|
||||
|
@ -602,12 +613,15 @@ DisplayListBuilder::PushScrollLayer(const layers::FrameMetrics::ViewID& aScrollI
|
|||
const WrRect& aContentRect,
|
||||
const WrRect& aClipRect)
|
||||
{
|
||||
WRDL_LOG("PushScrollLayer id=%" PRIu64 " co=%s cl=%s\n",
|
||||
aScrollId, Stringify(aContentRect).c_str(), Stringify(aClipRect).c_str());
|
||||
wr_dp_push_scroll_layer(mWrState, aScrollId, aContentRect, aClipRect);
|
||||
}
|
||||
|
||||
void
|
||||
DisplayListBuilder::PopScrollLayer()
|
||||
{
|
||||
WRDL_LOG("PopScrollLayer\n");
|
||||
wr_dp_pop_scroll_layer(mWrState);
|
||||
}
|
||||
|
||||
|
@ -616,6 +630,9 @@ DisplayListBuilder::PushRect(const WrRect& aBounds,
|
|||
const WrClipRegionToken aClip,
|
||||
const WrColor& aColor)
|
||||
{
|
||||
WRDL_LOG("PushRect b=%s c=%s\n",
|
||||
Stringify(aBounds).c_str(),
|
||||
Stringify(aColor).c_str());
|
||||
wr_dp_push_rect(mWrState, aBounds, aClip, aColor);
|
||||
}
|
||||
|
||||
|
@ -675,6 +692,8 @@ DisplayListBuilder::PushImage(const WrRect& aBounds,
|
|||
wr::ImageRendering aFilter,
|
||||
wr::ImageKey aImage)
|
||||
{
|
||||
WRDL_LOG("PushImage b=%s s=%s t=%s\n", Stringify(aBounds).c_str(),
|
||||
Stringify(aStretchSize).c_str(), Stringify(aTileSpacing).c_str());
|
||||
wr_dp_push_image(mWrState, aBounds, aClip, aStretchSize, aTileSpacing, aFilter, aImage);
|
||||
}
|
||||
|
||||
|
@ -828,6 +847,7 @@ WrClipRegionToken
|
|||
DisplayListBuilder::PushClipRegion(const WrRect& aMain,
|
||||
const WrImageMask* aMask)
|
||||
{
|
||||
WRDL_LOG("PushClipRegion r=%s m=%p\n", Stringify(aMain).c_str(), aMask);
|
||||
return wr_dp_push_clip_region(mWrState,
|
||||
aMain,
|
||||
nullptr, 0,
|
||||
|
@ -839,6 +859,8 @@ DisplayListBuilder::PushClipRegion(const WrRect& aMain,
|
|||
const nsTArray<WrComplexClipRegion>& aComplex,
|
||||
const WrImageMask* aMask)
|
||||
{
|
||||
WRDL_LOG("PushClipRegion r=%s cl=%d m=%p\n", Stringify(aMain).c_str(),
|
||||
(int)aComplex.Length(), aMask);
|
||||
return wr_dp_push_clip_region(mWrState,
|
||||
aMain,
|
||||
aComplex.Elements(), aComplex.Length(),
|
||||
|
|
|
@ -7,7 +7,7 @@ use std::collections::HashMap;
|
|||
use gleam::gl;
|
||||
|
||||
use webrender_traits::*;
|
||||
use webrender::renderer::{Renderer, RendererOptions};
|
||||
use webrender::renderer::{ReadPixelsFormat, Renderer, RendererOptions};
|
||||
use webrender::renderer::{ExternalImage, ExternalImageHandler, ExternalImageSource};
|
||||
use webrender::{ApiRecordingReceiver, BinaryRecorder};
|
||||
use app_units::Au;
|
||||
|
@ -70,16 +70,6 @@ impl Into<WrExternalImageId> for ExternalImageId {
|
|||
}
|
||||
}
|
||||
|
||||
const GL_FORMAT_BGRA_GL: gl::GLuint = gl::BGRA;
|
||||
const GL_FORMAT_BGRA_GLES: gl::GLuint = gl::BGRA_EXT;
|
||||
|
||||
fn get_gl_format_bgra(gl: &gl::Gl) -> gl::GLuint {
|
||||
match gl.get_type() {
|
||||
gl::GlType::Gl => GL_FORMAT_BGRA_GL,
|
||||
gl::GlType::Gles => GL_FORMAT_BGRA_GLES,
|
||||
}
|
||||
}
|
||||
|
||||
fn make_slice<'a, T>(ptr: *const T, len: usize) -> &'a [T] {
|
||||
if ptr.is_null() {
|
||||
&[]
|
||||
|
@ -790,17 +780,12 @@ pub unsafe extern "C" fn wr_renderer_readback(renderer: &mut WrRenderer,
|
|||
buffer_size: usize) {
|
||||
assert!(is_in_render_thread());
|
||||
|
||||
renderer.gl().flush();
|
||||
|
||||
let mut slice = make_slice_mut(dst_buffer, buffer_size);
|
||||
renderer.gl()
|
||||
.read_pixels_into_buffer(0,
|
||||
0,
|
||||
width as gl::GLsizei,
|
||||
height as gl::GLsizei,
|
||||
get_gl_format_bgra(renderer.gl()),
|
||||
gl::UNSIGNED_BYTE,
|
||||
slice);
|
||||
renderer.read_pixels_into(DeviceUintRect::new(
|
||||
DeviceUintPoint::new(0, 0),
|
||||
DeviceUintSize::new(width, height)),
|
||||
ReadPixelsFormat::Bgra8,
|
||||
&mut slice);
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
|
|
|
@ -1046,6 +1046,10 @@ description =
|
|||
description =
|
||||
[PWebRenderBridge::DPGetSnapshot]
|
||||
description =
|
||||
[PWebRenderBridge::SetAsyncScrollOffset]
|
||||
description = test only
|
||||
[PWebRenderBridge::SetAsyncZoom]
|
||||
description = test only
|
||||
[PVRManager::GetSensorState]
|
||||
description =
|
||||
[PHal::GetCurrentBatteryInformation]
|
||||
|
|
|
@ -1013,11 +1013,10 @@ nsCSSGradientRenderer::BuildWebRenderParameters(float aOpacity,
|
|||
|
||||
aStops.SetLength(mStops.Length());
|
||||
for(uint32_t i = 0; i < mStops.Length(); i++) {
|
||||
Float alpha = mStops[i].mColor.a * aOpacity;
|
||||
aStops[i].color.r = mStops[i].mColor.r * alpha;
|
||||
aStops[i].color.g = mStops[i].mColor.g * alpha;
|
||||
aStops[i].color.b = mStops[i].mColor.b * alpha;
|
||||
aStops[i].color.a = alpha;
|
||||
aStops[i].color.r = mStops[i].mColor.r;
|
||||
aStops[i].color.g = mStops[i].mColor.g;
|
||||
aStops[i].color.b = mStops[i].mColor.b;
|
||||
aStops[i].color.a = mStops[i].mColor.a * aOpacity;
|
||||
aStops[i].offset = mStops[i].mPosition;
|
||||
}
|
||||
|
||||
|
|
|
@ -5362,18 +5362,6 @@ nsDisplayBoxShadowInner::CanCreateWebRenderCommands(nsDisplayListBuilder* aBuild
|
|||
return true;
|
||||
}
|
||||
|
||||
for (uint32_t i = shadows->Length(); i > 0; --i) {
|
||||
nsCSSShadowItem *shadowItem = shadows->ShadowAt(i - 1);
|
||||
if (!shadowItem->mInset) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (shadowItem->mXOffset <= 0 || shadowItem->mYOffset <= 0) {
|
||||
// Need to wait for WR to support clip out.
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ random != boxshadow-blur-2.html boxshadow-blur-2-notref.html # fixedpoint divisi
|
|||
== boxshadow-rounding.html boxshadow-rounding-ref.html
|
||||
# One uses old path, one uses WR box shadow.
|
||||
fails-if(Android) fuzzy-if(webrender,50,3310) == boxshadow-button.html boxshadow-button-ref.html
|
||||
fuzzy-if(OSX==1010,1,24) fuzzy-if(d2d,16,908) fuzzy-if(webrender,19,1680) == boxshadow-large-border-radius.html boxshadow-large-border-radius-ref.html # Bug 1209649
|
||||
fuzzy-if(OSX==1010,1,24) fuzzy-if(d2d,16,908) fuzzy-if(webrender,48,2040) == boxshadow-large-border-radius.html boxshadow-large-border-radius-ref.html # Bug 1209649
|
||||
|
||||
fails-if(Android) == boxshadow-fileupload.html boxshadow-fileupload-ref.html
|
||||
fuzzy-if(skiaContent,13,28) == boxshadow-inner-basic.html boxshadow-inner-basic-ref.svg
|
||||
|
@ -25,8 +25,8 @@ fuzzy(2,440) fuzzy-if(webrender,25,1300) == boxshadow-skiprect.html boxshadow-sk
|
|||
== boxshadow-opacity.html boxshadow-opacity-ref.html
|
||||
== boxshadow-color-rounding.html boxshadow-color-rounding-ref.html
|
||||
== boxshadow-color-rounding-middle.html boxshadow-color-rounding-middle-ref.html
|
||||
fuzzy(3,500) fuzzy-if(d2d,2,1080) == boxshadow-border-radius-int.html boxshadow-border-radius-int-ref.html
|
||||
== boxshadow-inset-neg-spread.html about:blank
|
||||
fuzzy(3,500) fuzzy-if(d2d,2,1080) fuzzy-if(webrender,12,1500) == boxshadow-border-radius-int.html boxshadow-border-radius-int-ref.html
|
||||
fuzzy-if(webrender,1,4) == boxshadow-inset-neg-spread.html about:blank
|
||||
== boxshadow-inset-neg-spread2.html boxshadow-inset-neg-spread2-ref.html
|
||||
fuzzy(26,3610) fuzzy-if(d2d,26,5910) fuzzy-if(webrender,43,200) == boxshadow-rotated.html boxshadow-rotated-ref.html # Bug 1211264
|
||||
== boxshadow-inset-large-border-radius.html boxshadow-inset-large-border-radius-ref.html
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
default-preferences pref(layout.css.box-decoration-break.enabled,true)
|
||||
|
||||
== box-decoration-break-1.html box-decoration-break-1-ref.html
|
||||
fuzzy(1,20) fuzzy-if(skiaContent,1,700) == box-decoration-break-with-inset-box-shadow-1.html box-decoration-break-with-inset-box-shadow-1-ref.html
|
||||
fuzzy(1,20) fuzzy-if(skiaContent,1,700) fuzzy-if(webrender,5,450) == box-decoration-break-with-inset-box-shadow-1.html box-decoration-break-with-inset-box-shadow-1-ref.html
|
||||
fuzzy(16,460) fuzzy-if(Android,10,3673) fuzzy-if(skiaContent,57,374) == box-decoration-break-with-outset-box-shadow-1.html box-decoration-break-with-outset-box-shadow-1-ref.html
|
||||
random-if(!gtkWidget) HTTP(..) == box-decoration-break-border-image.html box-decoration-break-border-image-ref.html
|
||||
== box-decoration-break-block-border-padding.html box-decoration-break-block-border-padding-ref.html
|
||||
|
|
|
@ -1161,4 +1161,4 @@ static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = {
|
|||
|
||||
static const int32_t kUnknownId = -1;
|
||||
|
||||
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1504538105890000);
|
||||
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1504624357975000);
|
||||
|
|
|
@ -32,13 +32,13 @@
|
|||
1a-jva.de: could not connect to host
|
||||
1cover.com: could not connect to host
|
||||
1k8b.com: could not connect to host
|
||||
1km.ro: could not connect to host
|
||||
1password.com: did not receive HSTS header
|
||||
1s.tn: did not receive HSTS header
|
||||
1stcapital.com.sg: did not receive HSTS header
|
||||
1xcess.com: did not receive HSTS header
|
||||
1years.cc: could not connect to host
|
||||
206rc.net: max-age too low: 2592000
|
||||
21lg.co: could not connect to host
|
||||
247loan.com: max-age too low: 0
|
||||
24hourpaint.com: could not connect to host
|
||||
24sihu.com: could not connect to host
|
||||
|
@ -47,9 +47,8 @@
|
|||
2brokegirls.org: could not connect to host
|
||||
2intermediate.co.uk: did not receive HSTS header
|
||||
2or3.tk: could not connect to host
|
||||
2smart4food.com: could not connect to host
|
||||
2ss.jp: did not receive HSTS header
|
||||
300651.ru: could not connect to host
|
||||
300651.ru: did not receive HSTS header
|
||||
300m.com: did not receive HSTS header
|
||||
300mbmovies4u.cc: did not receive HSTS header
|
||||
301.website: could not connect to host
|
||||
|
@ -88,9 +87,9 @@
|
|||
6120.eu: did not receive HSTS header
|
||||
69square.com: could not connect to host
|
||||
7kovrikov.ru: did not receive HSTS header
|
||||
7trade8.com: could not connect to host
|
||||
808.lv: could not connect to host
|
||||
83i.net: could not connect to host
|
||||
89955.com: could not connect to host
|
||||
911911.pw: could not connect to host
|
||||
922.be: could not connect to host
|
||||
960news.ca: could not connect to host
|
||||
|
@ -120,7 +119,6 @@ about.ge: did not receive HSTS header
|
|||
aboutmyip.info: did not receive HSTS header
|
||||
aboutyou-deals.de: did not receive HSTS header
|
||||
abt.de: did not receive HSTS header
|
||||
abthorpe.org: could not connect to host
|
||||
abtom.de: did not receive HSTS header
|
||||
abury.fr: did not receive HSTS header
|
||||
abury.me: did not receive HSTS header
|
||||
|
@ -137,6 +135,7 @@ acevik.de: could not connect to host
|
|||
acg18.us: did not receive HSTS header
|
||||
acgmoon.org: did not receive HSTS header
|
||||
acisonline.net: did not receive HSTS header
|
||||
acoffeeshops.com: could not connect to host
|
||||
acorns.com: did not receive HSTS header
|
||||
acr.im: could not connect to host
|
||||
acslimited.co.uk: did not receive HSTS header
|
||||
|
@ -178,7 +177,6 @@ aes256.ru: could not connect to host
|
|||
aether.pw: could not connect to host
|
||||
aeyoun.com: did not receive HSTS header
|
||||
af-fotografie.net: did not receive HSTS header
|
||||
affiliatetest.azurewebsites.net: could not connect to host
|
||||
affilie.de: did not receive HSTS header
|
||||
affordableracingparts.com.au: did not receive HSTS header
|
||||
aficotroceni.ro: did not receive HSTS header
|
||||
|
@ -225,7 +223,13 @@ alenan.org: could not connect to host
|
|||
alessandro.pw: did not receive HSTS header
|
||||
alethearose.com: did not receive HSTS header
|
||||
alexandre.sh: did not receive HSTS header
|
||||
alexismeza.com: could not connect to host
|
||||
alexismeza.com.mx: could not connect to host
|
||||
alexismeza.dk: could not connect to host
|
||||
alexismeza.es: could not connect to host
|
||||
alexismeza.nl: could not connect to host
|
||||
alfa24.pro: could not connect to host
|
||||
alicialab.org: could not connect to host
|
||||
alittlebitcheeky.com: did not receive HSTS header
|
||||
alkami.com: did not receive HSTS header
|
||||
all-subtitles.com: could not connect to host
|
||||
|
@ -259,8 +263,12 @@ ameho.me: did not receive HSTS header
|
|||
american-truck-simulator.de: could not connect to host
|
||||
american-truck-simulator.net: could not connect to host
|
||||
americanworkwear.nl: did not receive HSTS header
|
||||
ameza.co.uk: could not connect to host
|
||||
ameza.com.mx: could not connect to host
|
||||
ameza.io: could not connect to host
|
||||
ameza.me: could not connect to host
|
||||
ameza.net: could not connect to host
|
||||
amigogeek.net: could not connect to host
|
||||
amihub.com: could not connect to host
|
||||
amilx.com: could not connect to host
|
||||
amilx.org: could not connect to host
|
||||
amimoto-ami.com: max-age too low: 3153600
|
||||
|
@ -285,7 +293,6 @@ andrewmichaud.beer: could not connect to host
|
|||
andrewmichaud.com: could not connect to host
|
||||
andrewmichaud.me: could not connect to host
|
||||
andrewregan.me: could not connect to host
|
||||
andrewyg.net: did not receive HSTS header
|
||||
andreypopp.com: could not connect to host
|
||||
androidprosmart.com: could not connect to host
|
||||
androoz.se: did not receive HSTS header
|
||||
|
@ -306,7 +313,7 @@ ankaraprofesyonelnakliyat.com: did not receive HSTS header
|
|||
ankaraprofesyonelnakliyat.com.tr: did not receive HSTS header
|
||||
annabellaw.com: did not receive HSTS header
|
||||
anomaly.ws: did not receive HSTS header
|
||||
anongoth.pl: did not receive HSTS header
|
||||
anongoth.pl: could not connect to host
|
||||
anonymo.co.uk: could not connect to host
|
||||
anonymo.uk: could not connect to host
|
||||
anonymousstatecollegelulzsec.com: could not connect to host
|
||||
|
@ -455,6 +462,7 @@ avantmfg.com: did not receive HSTS header
|
|||
avec-ou-sans-ordonnance.fr: could not connect to host
|
||||
avepol.cz: did not receive HSTS header
|
||||
avepol.eu: did not receive HSTS header
|
||||
avi9526.pp.ua: could not connect to host
|
||||
aviacao.pt: did not receive HSTS header
|
||||
avinet.com: max-age too low: 0
|
||||
avqueen.cn: did not receive HSTS header
|
||||
|
@ -548,7 +556,6 @@ bedabox.com: max-age too low: 0
|
|||
bedeta.de: could not connect to host
|
||||
bedreid.dk: did not receive HSTS header
|
||||
bedrijvenadministratie.nl: did not receive HSTS header
|
||||
beeksnetwork.nl: could not connect to host
|
||||
behere.be: could not connect to host
|
||||
beholdthehurricane.com: could not connect to host
|
||||
beier.io: did not receive HSTS header
|
||||
|
@ -581,7 +588,7 @@ bethditto.com: did not receive HSTS header
|
|||
betnet.fr: could not connect to host
|
||||
betplanning.it: did not receive HSTS header
|
||||
bets.de: did not receive HSTS header
|
||||
bettween.com: could not connect to host
|
||||
bettween.com: did not receive HSTS header
|
||||
betz.ro: did not receive HSTS header
|
||||
bevapehappy.com: did not receive HSTS header
|
||||
beyond-edge.com: could not connect to host
|
||||
|
@ -593,6 +600,7 @@ bf.am: max-age too low: 0
|
|||
bfelob.gov: max-age too low: 86400
|
||||
bffm.biz: max-age too low: 0
|
||||
bgcparkstad.nl: did not receive HSTS header
|
||||
bgeo.io: could not connect to host
|
||||
bgmn.net: could not connect to host
|
||||
bhatia.at: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
|
||||
bi.search.yahoo.com: did not receive HSTS header
|
||||
|
@ -641,7 +649,7 @@ bivsi.com: could not connect to host
|
|||
bizcms.com: did not receive HSTS header
|
||||
bizon.sk: did not receive HSTS header
|
||||
bjornhelmersson.se: could not connect to host
|
||||
bkb-skandal.ch: did not receive HSTS header
|
||||
bkb-skandal.ch: could not connect to host
|
||||
black-armada.com.pl: could not connect to host
|
||||
black-armada.pl: could not connect to host
|
||||
black-octopus.ru: could not connect to host
|
||||
|
@ -696,6 +704,7 @@ booked.holiday: could not connect to host
|
|||
bookofraonlinecasinos.com: did not receive HSTS header
|
||||
bookourdjs.com: max-age too low: 0
|
||||
boomerang.com: did not receive HSTS header
|
||||
boomshelf.com: could not connect to host
|
||||
boomshelf.org: could not connect to host
|
||||
boosterlearnpro.com: did not receive HSTS header
|
||||
bootjp.me: did not receive HSTS header
|
||||
|
@ -784,7 +793,6 @@ buyfox.de: did not receive HSTS header
|
|||
bw81.xyz: could not connect to host
|
||||
bwear4all.de: did not receive HSTS header
|
||||
bwilkinson.co.uk: could not connect to host
|
||||
bws16.de: did not receive HSTS header
|
||||
by4cqb.cn: could not connect to host
|
||||
bydisk.com: could not connect to host
|
||||
bypassed.press: could not connect to host
|
||||
|
@ -875,10 +883,10 @@ catinmay.com: did not receive HSTS header
|
|||
catnapstudios.com: could not connect to host
|
||||
cavaleria.ro: did not receive HSTS header
|
||||
caveclan.org: did not receive HSTS header
|
||||
cavedevs.de: could not connect to host
|
||||
cavedroid.xyz: could not connect to host
|
||||
cbhq.net: could not connect to host
|
||||
ccblog.de: did not receive HSTS header
|
||||
ccsys.com: could not connect to host
|
||||
cctech.ph: did not receive HSTS header
|
||||
cd.search.yahoo.com: did not receive HSTS header
|
||||
cd0.us: could not connect to host
|
||||
|
@ -938,6 +946,7 @@ chensir.net: could not connect to host
|
|||
chepaofen.com: did not receive HSTS header
|
||||
cherekerry.com: could not connect to host
|
||||
cherysunzhang.com: did not receive HSTS header
|
||||
chicisimo.com: did not receive HSTS header
|
||||
chicolawfirm.com: did not receive HSTS header
|
||||
chihiro.xyz: did not receive HSTS header
|
||||
chijiokeindustries.co.uk: could not connect to host
|
||||
|
@ -946,7 +955,6 @@ chinawhale.com: did not receive HSTS header
|
|||
chirgui.eu: could not connect to host
|
||||
chlouis.net: could not connect to host
|
||||
chm.vn: did not receive HSTS header
|
||||
chokladfantasi.net: could not connect to host
|
||||
chontalpa.pw: could not connect to host
|
||||
choruscrowd.com: could not connect to host
|
||||
chotu.net: could not connect to host
|
||||
|
@ -959,7 +967,7 @@ christiaandruif.nl: could not connect to host
|
|||
christianbargon.de: did not receive HSTS header
|
||||
christianbro.gq: could not connect to host
|
||||
christianhoffmann.info: could not connect to host
|
||||
christianscholz.de: could not connect to host
|
||||
christianscholz.de: did not receive HSTS header
|
||||
christophercolumbusfoundation.gov: did not receive HSTS header
|
||||
christophheich.me: could not connect to host
|
||||
chrisupjohn.com: could not connect to host
|
||||
|
@ -1007,7 +1015,6 @@ clip.ovh: could not connect to host
|
|||
cloud-project.com: did not receive HSTS header
|
||||
cloud.wtf: could not connect to host
|
||||
cloudapi.vc: could not connect to host
|
||||
cloudbleed.info: could not connect to host
|
||||
cloudcert.org: did not receive HSTS header
|
||||
cloudcy.net: could not connect to host
|
||||
clouddesktop.co.nz: could not connect to host
|
||||
|
@ -1075,6 +1082,7 @@ colorlib.com: did not receive HSTS header
|
|||
comfortdom.ua: did not receive HSTS header
|
||||
comfortticket.de: did not receive HSTS header
|
||||
comicspines.com: could not connect to host
|
||||
comitesaustria.at: could not connect to host
|
||||
comotalk.com: could not connect to host
|
||||
compalytics.com: could not connect to host
|
||||
compareinsurance.com.au: did not receive HSTS header
|
||||
|
@ -1218,7 +1226,6 @@ cyber-computer.club: did not receive HSTS header
|
|||
cyberdos.de: did not receive HSTS header
|
||||
cyberpunk.ca: could not connect to host
|
||||
cybershambles.com: could not connect to host
|
||||
cybersins.com: did not receive HSTS header
|
||||
cybersmart.co.uk: did not receive HSTS header
|
||||
cyberxpert.nl: could not connect to host
|
||||
cycleluxembourg.lu: did not receive HSTS header
|
||||
|
@ -1231,7 +1238,6 @@ dadtheimpaler.com: could not connect to host
|
|||
dah5.com: did not receive HSTS header
|
||||
dailybits.be: did not receive HSTS header
|
||||
dailystormerpodcasts.com: could not connect to host
|
||||
dailytopix.com: could not connect to host
|
||||
daimadi.com: could not connect to host
|
||||
dakrib.net: could not connect to host
|
||||
daku.gdn: could not connect to host
|
||||
|
@ -1264,6 +1270,7 @@ darkpony.ru: could not connect to host
|
|||
darksideof.it: could not connect to host
|
||||
darkstance.org: could not connect to host
|
||||
darrenellis.xyz: could not connect to host
|
||||
daryl.moe: could not connect to host
|
||||
dashburst.com: did not receive HSTS header
|
||||
dashnimorad.com: did not receive HSTS header
|
||||
data-abundance.com: could not connect to host
|
||||
|
@ -1343,6 +1350,10 @@ destinationbijoux.fr: could not connect to host
|
|||
destom.be: could not connect to host
|
||||
detector.exposed: could not connect to host
|
||||
detest.org: could not connect to host
|
||||
deux.solutions: could not connect to host
|
||||
deuxsol.co: could not connect to host
|
||||
deuxsol.com: could not connect to host
|
||||
deuxsolutions.com: could not connect to host
|
||||
deuxvia.com: could not connect to host
|
||||
devafterdark.com: could not connect to host
|
||||
devcu.com: could not connect to host
|
||||
|
@ -1370,6 +1381,8 @@ dietrich-spielwaren.de: max-age too low: 86400
|
|||
diewebstube.de: could not connect to host
|
||||
diezel.com: could not connect to host
|
||||
diferenca.com: did not receive HSTS header
|
||||
diff2html.xyz: could not connect to host
|
||||
digidroom.be: did not receive HSTS header
|
||||
digioccumss.ddns.net: could not connect to host
|
||||
digitalbank.kz: could not connect to host
|
||||
digitaldaddy.net: could not connect to host
|
||||
|
@ -1435,7 +1448,7 @@ dollywiki.co.uk: could not connect to host
|
|||
dolphin-cloud.com: could not connect to host
|
||||
dolphincorp.co.uk: could not connect to host
|
||||
domaine-aigoual-cevennes.com: did not receive HSTS header
|
||||
domaris.de: could not connect to host
|
||||
domaris.de: did not receive HSTS header
|
||||
domesticwatermeters.com.au: did not receive HSTS header
|
||||
dominicpratt.de: did not receive HSTS header
|
||||
dominioanimal.com: could not connect to host
|
||||
|
@ -1484,7 +1497,7 @@ droomhuis-in-zuid-holland-kopen.nl: did not receive HSTS header
|
|||
dropcam.com: did not receive HSTS header
|
||||
drtroyhendrickson.com: could not connect to host
|
||||
drumbandesperanto.nl: could not connect to host
|
||||
ds-christiansen.de: did not receive HSTS header
|
||||
ds-christiansen.de: could not connect to host
|
||||
dshiv.io: could not connect to host
|
||||
dtub.co: did not receive HSTS header
|
||||
dubrovskiy.net: could not connect to host
|
||||
|
@ -1616,7 +1629,6 @@ enigmacpt.com: did not receive HSTS header
|
|||
enigmail.net: did not receive HSTS header
|
||||
enjoy-nepal.de: max-age too low: 0
|
||||
enjoymayfield.com: max-age too low: 0
|
||||
enlightenment.org: did not receive HSTS header
|
||||
enskat.de: could not connect to host
|
||||
enskatson-sippe.de: could not connect to host
|
||||
enteente.club: could not connect to host
|
||||
|
@ -1644,7 +1656,7 @@ erawanarifnugroho.com: did not receive HSTS header
|
|||
eressea.xyz: could not connect to host
|
||||
ericbond.net: could not connect to host
|
||||
erichalv.com: could not connect to host
|
||||
eridanus.uk: could not connect to host
|
||||
eridanus.uk: did not receive HSTS header
|
||||
ernaehrungsberatung-zurich.ch: could not connect to host
|
||||
ernesto.at: could not connect to host
|
||||
eromixx.com: did not receive HSTS header
|
||||
|
@ -1744,7 +1756,7 @@ fail4free.de: did not receive HSTS header
|
|||
failforward.org: did not receive HSTS header
|
||||
fairkey.dk: did not receive HSTS header
|
||||
fairlyoddtreasures.com: did not receive HSTS header
|
||||
faizan.net: did not receive HSTS header
|
||||
faizan.net: could not connect to host
|
||||
faizan.xyz: could not connect to host
|
||||
fakeletters.org: did not receive HSTS header
|
||||
faktura.pl: did not receive HSTS header
|
||||
|
@ -1911,7 +1923,6 @@ freeutopia.org: did not receive HSTS header
|
|||
frenzel.dk: could not connect to host
|
||||
freqlabs.com: did not receive HSTS header
|
||||
freshfind.xyz: could not connect to host
|
||||
freshlymind.com: did not receive HSTS header
|
||||
frforms.com: did not receive HSTS header
|
||||
friendica.ch: could not connect to host
|
||||
friendlyfiregameshow.com: could not connect to host
|
||||
|
@ -2042,11 +2053,13 @@ getlantern.org: did not receive HSTS header
|
|||
getlifti.com: could not connect to host
|
||||
getlittleapps.com: did not receive HSTS header
|
||||
getlolaccount.com: could not connect to host
|
||||
getmango.com: did not receive HSTS header
|
||||
getmassage.com.ng: could not connect to host
|
||||
getpake.com: could not connect to host
|
||||
getremembrall.com: could not connect to host
|
||||
getsello.com: could not connect to host
|
||||
getspire.com: could not connect to host
|
||||
getts.ro: did not receive HSTS header
|
||||
getwashdaddy.com: could not connect to host
|
||||
gfelot.xyz: did not receive HSTS header
|
||||
gfm.tech: could not connect to host
|
||||
|
@ -2083,10 +2096,12 @@ globalexpert.co.nz: could not connect to host
|
|||
globalittech.com: could not connect to host
|
||||
globalmusic.ga: could not connect to host
|
||||
globalsites.nl: did not receive HSTS header
|
||||
gloomyvancouver.com: could not connect to host
|
||||
gm-assicurazioni.it: could not connect to host
|
||||
gm.search.yahoo.com: did not receive HSTS header
|
||||
gmail.com: did not receive HSTS header (error ignored - included regardless)
|
||||
gmoes.at: max-age too low: 600000
|
||||
gnetion.com: could not connect to host
|
||||
go.ax: did not receive HSTS header
|
||||
go2sh.de: did not receive HSTS header
|
||||
goabonga.com: could not connect to host
|
||||
|
@ -2103,7 +2118,7 @@ gogenenglish.com: could not connect to host
|
|||
gogetssl.com: did not receive HSTS header
|
||||
goggs.eu: did not receive HSTS header
|
||||
gogold-g.com: could not connect to host
|
||||
gokhankesici.com: could not connect to host
|
||||
gokhankesici.com: did not receive HSTS header
|
||||
gold24.in: did not receive HSTS header
|
||||
goldegg-training.com: did not receive HSTS header
|
||||
goldendata.io: could not connect to host
|
||||
|
@ -2135,6 +2150,7 @@ goverage.org: could not connect to host
|
|||
govillemo.ca: did not receive HSTS header
|
||||
gozel.com.tr: did not receive HSTS header
|
||||
gparent.org: did not receive HSTS header
|
||||
gpfclan.de: could not connect to host
|
||||
gpsfix.cz: did not receive HSTS header
|
||||
gpstuner.com: did not receive HSTS header
|
||||
grabi.ga: could not connect to host
|
||||
|
@ -2149,6 +2165,7 @@ gratisonlinesex.com: could not connect to host
|
|||
gravito.nl: did not receive HSTS header
|
||||
gravity-net.de: could not connect to host
|
||||
graycell.net: could not connect to host
|
||||
graysonsmith.co.uk: did not receive HSTS header
|
||||
grazetech.com: did not receive HSTS header
|
||||
grcnode.co.uk: could not connect to host
|
||||
greatnet.de: did not receive HSTS header
|
||||
|
@ -2226,6 +2243,7 @@ habanaavenue.com: did not receive HSTS header
|
|||
habbo.life: could not connect to host
|
||||
habbotalk.nl: could not connect to host
|
||||
hablemosdetecnologia.com.ve: could not connect to host
|
||||
hac30.com: could not connect to host
|
||||
hack.li: could not connect to host
|
||||
hackbubble.me: did not receive HSTS header
|
||||
hackercat.ninja: did not receive HSTS header
|
||||
|
@ -2263,8 +2281,8 @@ happygastro.com: could not connect to host
|
|||
harabuhouse.com: did not receive HSTS header
|
||||
harbor-light.net: could not connect to host
|
||||
harbourweb.net: could not connect to host
|
||||
hardfalcon.net: could not connect to host
|
||||
hardline.xyz: could not connect to host
|
||||
hardyboyplant.com: did not receive HSTS header
|
||||
haribosupermix.com: could not connect to host
|
||||
harisht.me: could not connect to host
|
||||
harmonycosmetic.com: max-age too low: 300
|
||||
|
@ -2300,7 +2318,7 @@ hdrboundless.com: could not connect to host
|
|||
hdsmigrationtool.com: could not connect to host
|
||||
hduin.xyz: could not connect to host
|
||||
hdwallpapers.net: did not receive HSTS header
|
||||
healtious.com: could not connect to host
|
||||
healtious.com: did not receive HSTS header
|
||||
heart.ge: did not receive HSTS header
|
||||
heartlandrentals.com: did not receive HSTS header
|
||||
heartyme.net: could not connect to host
|
||||
|
@ -2318,11 +2336,9 @@ helpium.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR
|
|||
helpmebuild.com: did not receive HSTS header
|
||||
hemdal.se: could not connect to host
|
||||
hencagon.com: could not connect to host
|
||||
henkverlinde.com: did not receive HSTS header
|
||||
henryphan.com: could not connect to host
|
||||
hepteract.us: could not connect to host
|
||||
heritagedentistry.ca: did not receive HSTS header
|
||||
hermes-net.de: could not connect to host
|
||||
herrenfahrt.com: did not receive HSTS header
|
||||
herzbotschaft.de: did not receive HSTS header
|
||||
heutger.net: did not receive HSTS header
|
||||
|
@ -2375,7 +2391,7 @@ hostedtalkgadget.google.com: did not receive HSTS header (error ignored - includ
|
|||
hostelite.com: did not receive HSTS header
|
||||
hostgarou.com: did not receive HSTS header
|
||||
hostinaus.com.au: did not receive HSTS header
|
||||
hostisan.com: did not receive HSTS header
|
||||
hostisan.com: could not connect to host
|
||||
hotchillibox.co.za: could not connect to host
|
||||
hotchillibox.com: max-age too low: 0
|
||||
hotchoc.io: did not receive HSTS header
|
||||
|
@ -2401,7 +2417,6 @@ hugosleep.com.au: did not receive HSTS header
|
|||
humankode.com: did not receive HSTS header
|
||||
humblefinances.com: could not connect to host
|
||||
humeurs.net: could not connect to host
|
||||
humortuga.pt: could not connect to host
|
||||
humpi.at: could not connect to host
|
||||
humpteedumptee.in: did not receive HSTS header
|
||||
hup.blue: could not connect to host
|
||||
|
@ -2413,6 +2428,7 @@ hydra.ws: could not connect to host
|
|||
hydronium.cf: could not connect to host
|
||||
hydronium.ga: could not connect to host
|
||||
hydronium.me: could not connect to host
|
||||
hydronium.ml: could not connect to host
|
||||
hydronium.tk: could not connect to host
|
||||
hypa.net.au: did not receive HSTS header
|
||||
hyper69.com: did not receive HSTS header
|
||||
|
@ -2450,6 +2466,7 @@ idecode.net: could not connect to host
|
|||
idedr.com: could not connect to host
|
||||
identitylabs.uk: could not connect to host
|
||||
idgsupply.com: could not connect to host
|
||||
idinby.dk: did not receive HSTS header
|
||||
idlekernel.com: could not connect to host
|
||||
idontexist.me: did not receive HSTS header
|
||||
ie.search.yahoo.com: did not receive HSTS header
|
||||
|
@ -2461,7 +2478,6 @@ ifastuniversity.com: did not receive HSTS header
|
|||
ifleurs.com: could not connect to host
|
||||
ifx.ee: could not connect to host
|
||||
ignatisd.gr: did not receive HSTS header
|
||||
igotoffer.com: did not receive HSTS header
|
||||
igule.net: did not receive HSTS header
|
||||
ihrlotto.de: could not connect to host
|
||||
ihrnationalrat.ch: could not connect to host
|
||||
|
@ -2480,12 +2496,13 @@ iluvscotland.co.uk: did not receive HSTS header
|
|||
imakepoems.net: could not connect to host
|
||||
imanolbarba.net: could not connect to host
|
||||
ime.moe: could not connect to host
|
||||
imim.pw: did not receive HSTS header
|
||||
imim.pw: could not connect to host
|
||||
imirhil.fr: did not receive HSTS header
|
||||
immoprotect.ca: did not receive HSTS header
|
||||
immortals-co.com: did not receive HSTS header
|
||||
immoverkauf24.at: did not receive HSTS header
|
||||
immoverkauf24.de: did not receive HSTS header
|
||||
immunicity.date: could not connect to host
|
||||
immunicity.eu: did not receive HSTS header
|
||||
immunicity.info: could not connect to host
|
||||
immunicity.press: could not connect to host
|
||||
|
@ -2613,10 +2630,12 @@ istanbultravelguide.info: could not connect to host
|
|||
istaspirtslietas.lv: did not receive HSTS header
|
||||
it-go.net: did not receive HSTS header
|
||||
itechgeek.com: max-age too low: 0
|
||||
iteli.eu: could not connect to host
|
||||
ithakama.com: did not receive HSTS header
|
||||
ithakama.cz: did not receive HSTS header
|
||||
itos.asia: did not receive HSTS header
|
||||
itos.pl: did not receive HSTS header
|
||||
itpros.ru: did not receive HSTS header
|
||||
itriskltd.com: could not connect to host
|
||||
itsadog.co.uk: did not receive HSTS header
|
||||
itsagadget.com: did not receive HSTS header
|
||||
|
@ -2716,6 +2735,7 @@ jhburton.uk: could not connect to host
|
|||
jhejderup.me: could not connect to host
|
||||
jia1hao.com: could not connect to host
|
||||
jiaidu.com: could not connect to host
|
||||
jialinwu.com: could not connect to host
|
||||
jiangzm.com: could not connect to host
|
||||
jichi.io: did not receive HSTS header
|
||||
jikken.de: could not connect to host
|
||||
|
@ -2738,6 +2758,7 @@ johnbrownphotography.ch: did not receive HSTS header
|
|||
johners.me: could not connect to host
|
||||
johnhgaunt.com: did not receive HSTS header
|
||||
johnrom.com: did not receive HSTS header
|
||||
jointoweb.com: could not connect to host
|
||||
jonas-keidel.de: did not receive HSTS header
|
||||
jonasgroth.se: did not receive HSTS header
|
||||
jonathan.ir: could not connect to host
|
||||
|
@ -2754,6 +2775,7 @@ joshi.su: could not connect to host
|
|||
joshstroup.me: could not connect to host
|
||||
jotpics.com: could not connect to host
|
||||
jottit.com: could not connect to host
|
||||
jovic.hamburg: could not connect to host
|
||||
jpbike.cz: could not connect to host
|
||||
jrc9.ca: did not receive HSTS header
|
||||
jrgold.me: could not connect to host
|
||||
|
@ -2788,6 +2810,7 @@ k258059.net: could not connect to host
|
|||
ka-clan.com: could not connect to host
|
||||
kabinapp.com: could not connect to host
|
||||
kabuabc.com: did not receive HSTS header
|
||||
kabus.org: could not connect to host
|
||||
kadioglumakina.com.tr: did not receive HSTS header
|
||||
kaela.design: could not connect to host
|
||||
kahopoon.net: could not connect to host
|
||||
|
@ -2797,7 +2820,6 @@ kalami.nl: could not connect to host
|
|||
kalevlamps.co.uk: could not connect to host
|
||||
kamalame.co: did not receive HSTS header
|
||||
kamikano.com: could not connect to host
|
||||
kamitech.ch: could not connect to host
|
||||
kanar.nl: could not connect to host
|
||||
kaneo-gmbh.de: did not receive HSTS header
|
||||
kaohub.com: could not connect to host
|
||||
|
@ -2829,7 +2851,6 @@ keeley.ml: could not connect to host
|
|||
keeleysam.me: could not connect to host
|
||||
keepassa.co: could not connect to host
|
||||
keepclean.me: could not connect to host
|
||||
kefaloniatoday.com: could not connect to host
|
||||
kellyandantony.com: did not receive HSTS header
|
||||
kennethlim.me: could not connect to host
|
||||
kerangalam.com: could not connect to host
|
||||
|
@ -2908,7 +2929,6 @@ kolaykaydet.com: did not receive HSTS header
|
|||
kolozsvaricsuhe.hu: did not receive HSTS header
|
||||
komikito.com: could not connect to host
|
||||
kompetenzwerft.de: did not receive HSTS header
|
||||
konsertoversikt.no: could not connect to host
|
||||
kontaxis.network: could not connect to host
|
||||
kontorhaus-schlachte.de: could not connect to host
|
||||
koopjesnel.nl: did not receive HSTS header
|
||||
|
@ -2946,14 +2966,13 @@ ksfh-mail.de: could not connect to host
|
|||
kstan.me: could not connect to host
|
||||
kswriter.com: could not connect to host
|
||||
kucom.it: did not receive HSTS header
|
||||
kuechenplan.online: could not connect to host
|
||||
kueulangtahunanak.net: could not connect to host
|
||||
kummerlaender.eu: did not receive HSTS header
|
||||
kupelne-ptacek.sk: did not receive HSTS header
|
||||
kuppingercole.com: did not receive HSTS header
|
||||
kura.io: could not connect to host
|
||||
kurehun.org: could not connect to host
|
||||
kurofuku.me: could not connect to host
|
||||
kurrietv.nl: did not receive HSTS header
|
||||
kurtmclester.com: did not receive HSTS header
|
||||
kurz.pw: could not connect to host
|
||||
kusaka-abacus.jp: max-age too low: 0
|
||||
|
@ -2989,6 +3008,7 @@ laf.in.net: could not connect to host
|
|||
lagalerievirtuelle.fr: did not receive HSTS header
|
||||
lagoza.name: could not connect to host
|
||||
lamaland.ru: did not receive HSTS header
|
||||
lambda-complex.org: could not connect to host
|
||||
lambdafive.co.uk: could not connect to host
|
||||
lampl.info: could not connect to host
|
||||
lana.swedbank.se: did not receive HSTS header
|
||||
|
@ -3206,6 +3226,7 @@ lumi.do: did not receive HSTS header
|
|||
lunarift.com: could not connect to host
|
||||
lunarlog.com: could not connect to host
|
||||
lunarrift.net: could not connect to host
|
||||
lunarshark.com: could not connect to host
|
||||
luneta.nearbuysystems.com: could not connect to host
|
||||
luno.io: could not connect to host
|
||||
luody.info: could not connect to host
|
||||
|
@ -3221,6 +3242,7 @@ luxwatch.com: could not connect to host
|
|||
luzat.com: could not connect to host
|
||||
lv.search.yahoo.com: did not receive HSTS header
|
||||
lydiagorstein.com: could not connect to host
|
||||
lylares.com: did not receive HSTS header
|
||||
lzahq.tech: did not receive HSTS header
|
||||
lzkill.com: did not receive HSTS header
|
||||
m-ali.xyz: could not connect to host
|
||||
|
@ -3229,7 +3251,6 @@ m.nu: did not receive HSTS header
|
|||
m0wef.uk: could not connect to host
|
||||
m2tc.fr: could not connect to host
|
||||
m3-gmbh.de: did not receive HSTS header
|
||||
m4570.xyz: could not connect to host
|
||||
m82labs.com: did not receive HSTS header
|
||||
maarten.nyc: could not connect to host
|
||||
mabulledu.net: did not receive HSTS header
|
||||
|
@ -3239,6 +3260,8 @@ macchaberrycream.com: could not connect to host
|
|||
macchedil.com: did not receive HSTS header
|
||||
macdj.tk: could not connect to host
|
||||
macgeneral.de: did not receive HSTS header
|
||||
machbach.net: did not receive HSTS header
|
||||
maco.org.uk: could not connect to host
|
||||
macsandcheesedreams.com: could not connect to host
|
||||
madars.org: did not receive HSTS header
|
||||
maddin.ga: could not connect to host
|
||||
|
@ -3248,6 +3271,7 @@ mae-berlinistanbul.com: could not connect to host
|
|||
mafamane.com: could not connect to host
|
||||
mafiareturns.com: max-age too low: 2592000
|
||||
magenx.com: did not receive HSTS header
|
||||
magia360.com: did not receive HSTS header
|
||||
magneticattraction.com.au: did not receive HSTS header
|
||||
mahamed91.pw: could not connect to host
|
||||
mail-settings.google.com: did not receive HSTS header (error ignored - included regardless)
|
||||
|
@ -3322,6 +3346,7 @@ masty.nl: did not receive HSTS header
|
|||
matatall.com: did not receive HSTS header
|
||||
matchneedle.com: could not connect to host
|
||||
maternalsafety.org: did not receive HSTS header
|
||||
matillat.ovh: could not connect to host
|
||||
matrict.com: could not connect to host
|
||||
matrip.de: could not connect to host
|
||||
matrix.ac: could not connect to host
|
||||
|
@ -3408,7 +3433,7 @@ metis.pw: could not connect to host
|
|||
meuemail.pro: could not connect to host
|
||||
mexbt.com: could not connect to host
|
||||
mexicanbusinessweb.mx: did not receive HSTS header
|
||||
mexicansbook.ru: could not connect to host
|
||||
mexicansbook.ru: did not receive HSTS header
|
||||
mfcatalin.com: could not connect to host
|
||||
mh-bloemen.co.jp: could not connect to host
|
||||
mhdsyarif.com: did not receive HSTS header
|
||||
|
@ -3480,8 +3505,8 @@ mittenhacks.com: could not connect to host
|
|||
mivcon.net: could not connect to host
|
||||
mizd.at: could not connect to host
|
||||
mizi.name: could not connect to host
|
||||
mjacobson.net: could not connect to host
|
||||
mkasu.org: did not receive HSTS header
|
||||
mkfs.fr: did not receive HSTS header
|
||||
mkw.st: could not connect to host
|
||||
mlcdn.co: could not connect to host
|
||||
mlp.ee: could not connect to host
|
||||
|
@ -3522,7 +3547,7 @@ momoka.moe: could not connect to host
|
|||
mona.lu: did not receive HSTS header
|
||||
monarca.systems: could not connect to host
|
||||
monasterialis.eu: could not connect to host
|
||||
mondar.io: did not receive HSTS header
|
||||
mondar.io: could not connect to host
|
||||
mondopoint.com: did not receive HSTS header
|
||||
mondwandler.de: could not connect to host
|
||||
moneromerchant.com: could not connect to host
|
||||
|
@ -3530,6 +3555,7 @@ moneycrownmedia.com: could not connect to host
|
|||
moneytoday.com: max-age too low: 0
|
||||
monika-sokol.de: did not receive HSTS header
|
||||
monitman.com: did not receive HSTS header
|
||||
monnyonle.hu: could not connect to host
|
||||
monsieurbureau.com: did not receive HSTS header
|
||||
monstrus.de: max-age too low: 86400
|
||||
montanacures.org: could not connect to host
|
||||
|
@ -3621,6 +3647,7 @@ mygate.at: could not connect to host
|
|||
mygdut.com: did not receive HSTS header
|
||||
mygov.scot: did not receive HSTS header
|
||||
myiocc.org: could not connect to host
|
||||
mykeepsake.xyz: could not connect to host
|
||||
mykolab.com: did not receive HSTS header
|
||||
mykreuzfahrt.de: could not connect to host
|
||||
myni.io: could not connect to host
|
||||
|
@ -3632,6 +3659,7 @@ myphonebox.de: could not connect to host
|
|||
mysecretrewards.com: did not receive HSTS header
|
||||
mystery-science-theater-3000.de: did not receive HSTS header
|
||||
mythlogic.com: did not receive HSTS header
|
||||
mythslegendscollection.com: did not receive HSTS header
|
||||
myweb360.de: did not receive HSTS header
|
||||
myzone.com: did not receive HSTS header
|
||||
n0psled.nl: could not connect to host
|
||||
|
@ -3671,11 +3699,12 @@ nationwidevehiclecontracts.co.uk: did not receive HSTS header
|
|||
natural-progesterone.net: could not connect to host
|
||||
naturecoaster.com: did not receive HSTS header
|
||||
naturesystems.cz: max-age too low: 0
|
||||
naturline.com: did not receive HSTS header
|
||||
natuurbehangnederland.nl: could not connect to host
|
||||
nauck.org: could not connect to host
|
||||
nav.jobs: could not connect to host
|
||||
naval.tf: could not connect to host
|
||||
navenlle.com: could not connect to host
|
||||
navenlle.com: did not receive HSTS header
|
||||
navjobs.com: did not receive HSTS header
|
||||
nbb.io: could not connect to host
|
||||
nbg-ha.de: could not connect to host
|
||||
|
@ -3722,6 +3751,7 @@ neuronfactor.com: max-age too low: 1000
|
|||
never-afk.de: did not receive HSTS header
|
||||
neveta.com: could not connect to host
|
||||
newbieboss.com: did not receive HSTS header
|
||||
newcarrentalubon.com: did not receive HSTS header
|
||||
newcitygas.ca: max-age too low: 0
|
||||
newedivideo.it: could not connect to host
|
||||
newgenerationplus.org: could not connect to host
|
||||
|
@ -3765,6 +3795,7 @@ ninhs.org: could not connect to host
|
|||
nippler.org: did not receive HSTS header
|
||||
nippombashi.net: did not receive HSTS header
|
||||
nipponcareers.com: did not receive HSTS header
|
||||
nitrix.me: could not connect to host
|
||||
niva.synology.me: could not connect to host
|
||||
nixien.fr: could not connect to host
|
||||
nixmag.net: could not connect to host
|
||||
|
@ -3785,7 +3816,6 @@ nolberg.net: did not receive HSTS header
|
|||
nolimitsbook.de: did not receive HSTS header
|
||||
nolte.work: could not connect to host
|
||||
nomorebytes.de: could not connect to host
|
||||
noobunbox.net: did not receive HSTS header
|
||||
nope.website: could not connect to host
|
||||
nopex.no: could not connect to host
|
||||
nopol.de: could not connect to host
|
||||
|
@ -3809,6 +3839,7 @@ npol.de: could not connect to host
|
|||
nqesh.com: could not connect to host
|
||||
nrechn.de: could not connect to host
|
||||
nrizzio.me: could not connect to host
|
||||
nsworks.com: could not connect to host
|
||||
ntbs.pro: could not connect to host
|
||||
ntse.xyz: could not connect to host
|
||||
nu3.at: did not receive HSTS header
|
||||
|
@ -3890,7 +3921,6 @@ oneb4nk.com: could not connect to host
|
|||
oneclickloan.com: could not connect to host
|
||||
onecycling.my: max-age too low: 0
|
||||
onecycling.world: max-age too low: 0
|
||||
onedrive.live.com: could not connect to host
|
||||
onefour.co: could not connect to host
|
||||
onehourloan.com: could not connect to host
|
||||
onehourloan.sg: did not receive HSTS header
|
||||
|
@ -3956,6 +3986,7 @@ orbograph-hrcm.com: could not connect to host
|
|||
ordereat.fr: could not connect to host
|
||||
orf-digitalsatkarte.at: could not connect to host
|
||||
organiplan.com: could not connect to host
|
||||
orhideous.name: could not connect to host
|
||||
originpc.com: did not receive HSTS header
|
||||
orioncustompcs.com: could not connect to host
|
||||
orionfcu.com: did not receive HSTS header
|
||||
|
@ -4023,7 +4054,6 @@ panoranordic.net: could not connect to host
|
|||
pansu.space: could not connect to host
|
||||
pants-off.xyz: could not connect to host
|
||||
pantsu.cat: did not receive HSTS header
|
||||
panzer72.ru: did not receive HSTS header
|
||||
papalytics.com: could not connect to host
|
||||
papeda.net: could not connect to host
|
||||
papercard.co.uk: did not receive HSTS header
|
||||
|
@ -4044,7 +4074,6 @@ partijtjevoordevrijheid.nl: [Exception... "Component returned failure code: 0x80
|
|||
partirkyoto.jp: did not receive HSTS header
|
||||
partou.de: did not receive HSTS header
|
||||
partyhaus.ovh: did not receive HSTS header
|
||||
partyvan.io: could not connect to host
|
||||
partyvan.it: could not connect to host
|
||||
partyvan.moe: could not connect to host
|
||||
partyvan.nl: could not connect to host
|
||||
|
@ -4061,7 +4090,6 @@ paster.li: did not receive HSTS header
|
|||
pastie.se: could not connect to host
|
||||
pataua.kiwi: did not receive HSTS header
|
||||
paternitydnatest.com: could not connect to host
|
||||
patflix.com: could not connect to host
|
||||
patientinsight.net: could not connect to host
|
||||
patt.us: did not receive HSTS header
|
||||
patterson.mp: could not connect to host
|
||||
|
@ -4088,9 +4116,10 @@ pdf.yt: could not connect to host
|
|||
peakapp.nl: could not connect to host
|
||||
peerherrmann.de: could not connect to host
|
||||
peetah.com: max-age too low: 0
|
||||
peissen.com: could not connect to host
|
||||
peissen.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
|
||||
pekkapikkarainen.fi: did not receive HSTS header
|
||||
pekkarik.ru: could not connect to host
|
||||
pengi.me: could not connect to host
|
||||
pengui.uk: could not connect to host
|
||||
penguinclientsystem.com: did not receive HSTS header
|
||||
pentano.net: could not connect to host
|
||||
|
@ -4111,8 +4140,8 @@ personalizedtouch.co: could not connect to host
|
|||
persson.im: could not connect to host
|
||||
persson.me: could not connect to host
|
||||
perthdevicelab.com: did not receive HSTS header
|
||||
pesmyclub.com: did not receive HSTS header
|
||||
pet-nsk.ru: could not connect to host
|
||||
petcarvers.com: did not receive HSTS header
|
||||
petchart.net: could not connect to host
|
||||
pethub.com: did not receive HSTS header
|
||||
petit.site: could not connect to host
|
||||
|
@ -4163,6 +4192,7 @@ pirati.cz: did not receive HSTS header
|
|||
pirlitu.com: could not connect to host
|
||||
pisexy.me: did not receive HSTS header
|
||||
pisidia.de: could not connect to host
|
||||
pitonarms.com: could not connect to host
|
||||
pittonpreschool.com: did not receive HSTS header
|
||||
pixdigital.net: did not receive HSTS header
|
||||
pixel.google.com: did not receive HSTS header (error ignored - included regardless)
|
||||
|
@ -4185,7 +4215,6 @@ playmaker.io: could not connect to host
|
|||
playmyplay.com: did not receive HSTS header
|
||||
playnation.io: could not connect to host
|
||||
playsharp.com: could not connect to host
|
||||
pleasure.forsale: could not connect to host
|
||||
pleier-it.de: did not receive HSTS header
|
||||
pleier.it: did not receive HSTS header
|
||||
plfgr.eu.org: could not connect to host
|
||||
|
@ -4203,8 +4232,6 @@ plueschvirus.de: max-age too low: 86400
|
|||
pluff.nl: did not receive HSTS header
|
||||
plur.com.au: did not receive HSTS header
|
||||
plushmania.de: max-age too low: 86400
|
||||
pm-onboarding-external-dev.azurewebsites.net: could not connect to host
|
||||
pm-partners-management-dev.azurewebsites.net: could not connect to host
|
||||
pmnts.io: could not connect to host
|
||||
po.gl: did not receive HSTS header
|
||||
pocketsix.com: could not connect to host
|
||||
|
@ -4225,7 +4252,6 @@ polycoise.com: could not connect to host
|
|||
polypho.nyc: could not connect to host
|
||||
pompefunebrilariviera.it: could not connect to host
|
||||
pompompoes.com: could not connect to host
|
||||
pontokay.com.br: could not connect to host
|
||||
pontualcomp.com: could not connect to host
|
||||
pony.today: could not connect to host
|
||||
poolsandstuff.com: did not receive HSTS header
|
||||
|
@ -4233,8 +4259,10 @@ poon.tech: could not connect to host
|
|||
porno-gif.ru: did not receive HSTS header
|
||||
pornstars.me: did not receive HSTS header
|
||||
portalplatform.net: could not connect to host
|
||||
portalzine.de: did not receive HSTS header
|
||||
poshpak.com: max-age too low: 86400
|
||||
postcodewise.co.uk: did not receive HSTS header
|
||||
posterspy.com: did not receive HSTS header
|
||||
postscheduler.org: could not connect to host
|
||||
posylka.de: did not receive HSTS header
|
||||
potatoheads.net: could not connect to host
|
||||
|
@ -4282,7 +4310,6 @@ profivps.com: could not connect to host
|
|||
profundr.com: could not connect to host
|
||||
profusion.io: could not connect to host
|
||||
progblog.net: could not connect to host
|
||||
progg.no: could not connect to host
|
||||
progress-technologies.com: could not connect to host
|
||||
prohostonline.fi: could not connect to host
|
||||
proitconsulting.com.au: could not connect to host
|
||||
|
@ -4334,6 +4361,7 @@ pyol.org: could not connect to host
|
|||
pypi-status.org: could not connect to host
|
||||
pyplo.org: did not receive HSTS header
|
||||
pypt.lt: did not receive HSTS header
|
||||
pzme.me: could not connect to host
|
||||
q2.si: did not receive HSTS header
|
||||
qbik.de: did not receive HSTS header
|
||||
qccqld.org.au: could not connect to host
|
||||
|
@ -4343,7 +4371,7 @@ qinxi1992.com: could not connect to host
|
|||
qionglu.pw: could not connect to host
|
||||
qirinus.com: could not connect to host
|
||||
qldconservation.org: could not connect to host
|
||||
qonqa.de: did not receive HSTS header
|
||||
qonqa.de: could not connect to host
|
||||
qop.io: could not connect to host
|
||||
qorm.co.uk: did not receive HSTS header
|
||||
qqq.gg: could not connect to host
|
||||
|
@ -4373,6 +4401,7 @@ r3bl.me: did not receive HSTS header
|
|||
ra-schaal.de: could not connect to host
|
||||
raajheshkannaa.com: could not connect to host
|
||||
radicaleducation.net: could not connect to host
|
||||
radio-utopie.de: did not receive HSTS header
|
||||
radtke.bayern: could not connect to host
|
||||
rafaelcz.de: could not connect to host
|
||||
raidstone.com: could not connect to host
|
||||
|
@ -4414,6 +4443,7 @@ raydan.space: could not connect to host
|
|||
raydobe.me: could not connect to host
|
||||
razlaw.name: did not receive HSTS header
|
||||
rbhighinc.org: could not connect to host
|
||||
rbose.org: could not connect to host
|
||||
rbti.me: could not connect to host
|
||||
rc-rp.com: did not receive HSTS header
|
||||
rc4.io: could not connect to host
|
||||
|
@ -4430,7 +4460,6 @@ realmofespionage.com: could not connect to host
|
|||
reaper.rip: could not connect to host
|
||||
reardenporn.com: could not connect to host
|
||||
rebekaesgabor.online: could not connect to host
|
||||
rechenknaecht.de: could not connect to host
|
||||
recommended.reviews: could not connect to host
|
||||
redable.hosting: could not connect to host
|
||||
redar.xyz: could not connect to host
|
||||
|
@ -4551,6 +4580,7 @@ rolemaster.net: could not connect to host
|
|||
rolroer.co.za: could not connect to host
|
||||
romab.com: did not receive HSTS header
|
||||
romans-place.me.uk: could not connect to host
|
||||
romeoferraris.com: did not receive HSTS header
|
||||
romulusapp.com: could not connect to host
|
||||
ron2k.za.net: could not connect to host
|
||||
ronvandordt.info: could not connect to host
|
||||
|
@ -4578,6 +4608,7 @@ rsajeey.info: could not connect to host
|
|||
rsampaio.info: could not connect to host
|
||||
rsf.io: could not connect to host
|
||||
rsmaps.org: could not connect to host
|
||||
rtfpessoa.xyz: could not connect to host
|
||||
rubbereggs.ca: could not connect to host
|
||||
rubberfurs.org: did not receive HSTS header
|
||||
rubecodeberg.com: could not connect to host
|
||||
|
@ -4697,7 +4728,7 @@ scrapings.net: could not connect to host
|
|||
screencaster.io: did not receive HSTS header
|
||||
screenresolution.space: could not connect to host
|
||||
screensaversplanet.com: did not receive HSTS header
|
||||
scribbleserver.com: could not connect to host
|
||||
scribbleserver.com: did not receive HSTS header
|
||||
scribe.systems: could not connect to host
|
||||
scrion.com: could not connect to host
|
||||
script.google.com: did not receive HSTS header (error ignored - included regardless)
|
||||
|
@ -4706,9 +4737,9 @@ scriptict.nl: could not connect to host
|
|||
sdmoscow.ru: could not connect to host
|
||||
sdrobs.com: did not receive HSTS header
|
||||
sdsl-speedtest.de: could not connect to host
|
||||
sealbaker.com: could not connect to host
|
||||
search-one.de: did not receive HSTS header
|
||||
sebastian-lutsch.de: could not connect to host
|
||||
sebastianblade.com: could not connect to host
|
||||
sebster.com: did not receive HSTS header
|
||||
secandtech.com: could not connect to host
|
||||
seccom.ch: did not receive HSTS header
|
||||
|
@ -4762,6 +4793,7 @@ seo.consulting: did not receive HSTS header
|
|||
seomobo.com: could not connect to host
|
||||
seosanantonioinc.com: did not receive HSTS header
|
||||
seowarp.net: did not receive HSTS header
|
||||
sep23.ru: did not receive HSTS header
|
||||
seq.tf: did not receive HSTS header
|
||||
serathius.ovh: could not connect to host
|
||||
serbanpaun.ro: could not connect to host
|
||||
|
@ -4790,7 +4822,7 @@ shang-yu.cn: did not receive HSTS header
|
|||
shapesedinburgh.co.uk: did not receive HSTS header
|
||||
shareimg.xyz: could not connect to host
|
||||
sharepass.pw: could not connect to host
|
||||
sharevari.com: could not connect to host
|
||||
sharevari.com: did not receive HSTS header
|
||||
shauncrowley.co.uk: could not connect to host
|
||||
shaunwheelhou.se: could not connect to host
|
||||
shellj.me: max-age too low: 86400
|
||||
|
@ -4894,6 +4926,7 @@ slovakiana.sk: did not receive HSTS header
|
|||
sluitkampzeist.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
|
||||
slycurity.de: did not receive HSTS header
|
||||
smallcdn.rocks: could not connect to host
|
||||
smallpath.me: could not connect to host
|
||||
smart-mirror.de: did not receive HSTS header
|
||||
smart-ov.nl: could not connect to host
|
||||
smartcoin.com.br: could not connect to host
|
||||
|
@ -4918,6 +4951,7 @@ snel4u.nl: could not connect to host
|
|||
snelwerk.be: could not connect to host
|
||||
sng.my: could not connect to host
|
||||
sniderman.eu.org: could not connect to host
|
||||
snille.com: could not connect to host
|
||||
snip.host: could not connect to host
|
||||
snoozedds.com: max-age too low: 600
|
||||
snoqualmiefiber.org: did not receive HSTS header
|
||||
|
@ -4942,6 +4976,7 @@ soll-i.ch: did not receive HSTS header
|
|||
solsystems.ru: could not connect to host
|
||||
someshit.xyz: could not connect to host
|
||||
somethingnew.xyz: could not connect to host
|
||||
songzhuolun.com: could not connect to host
|
||||
sonic.network: did not receive HSTS header
|
||||
sonicrainboom.rocks: did not receive HSTS header
|
||||
soobi.org: did not receive HSTS header
|
||||
|
@ -4952,7 +4987,6 @@ sotor.de: did not receive HSTS header
|
|||
soucorneteiro.com.br: could not connect to host
|
||||
soulema.com: could not connect to host
|
||||
soulfulglamour.uk: could not connect to host
|
||||
sourcebox.be: could not connect to host
|
||||
sourcelair.com: did not receive HSTS header
|
||||
southgale.condos: could not connect to host
|
||||
southside-crew.club: could not connect to host
|
||||
|
@ -4992,7 +5026,7 @@ spititout.it: could not connect to host
|
|||
spittersberger.recipes: did not receive HSTS header
|
||||
spodelime.com: did not receive HSTS header
|
||||
sponsortobias.com: could not connect to host
|
||||
sportchirp-internal.azurewebsites.net: could not connect to host
|
||||
sportchirp-internal.azurewebsites.net: did not receive HSTS header
|
||||
sporthit.ru: did not receive HSTS header
|
||||
sportwette.eu: did not receive HSTS header
|
||||
spot-events.com: could not connect to host
|
||||
|
@ -5059,6 +5093,7 @@ stephenschrauger.net: did not receive HSTS header
|
|||
stephenschrauger.org: did not receive HSTS header
|
||||
stevensononthe.net: did not receive HSTS header
|
||||
stewartremodelingadvantage.com: did not receive HSTS header
|
||||
sticklerjs.org: could not connect to host
|
||||
stig.io: did not receive HSTS header
|
||||
stigroom.com: could not connect to host
|
||||
stillblackhat.id: could not connect to host
|
||||
|
@ -5066,7 +5101,6 @@ stinkytrashhound.com: could not connect to host
|
|||
stirlingpoon.com: did not receive HSTS header
|
||||
stirlingpoon.net: did not receive HSTS header
|
||||
stirlingpoon.xyz: could not connect to host
|
||||
stjohnin.com: could not connect to host
|
||||
stkbn.com: did not receive HSTS header
|
||||
stmbgr.com: could not connect to host
|
||||
stn.me.uk: did not receive HSTS header
|
||||
|
@ -5117,13 +5151,14 @@ subrosa.io: could not connect to host
|
|||
subsys.no: did not receive HSTS header
|
||||
subtitle.rip: could not connect to host
|
||||
sudo.li: did not receive HSTS header
|
||||
sufix.cz: did not receive HSTS header
|
||||
suian.or.jp: max-age too low: 86400
|
||||
suite73.org: could not connect to host
|
||||
suksit.com: could not connect to host
|
||||
sumoatm.com: did not receive HSTS header
|
||||
sumoscout.de: did not receive HSTS header
|
||||
suncountrymarine.com: did not receive HSTS header
|
||||
sunflyer.cn: did not receive HSTS header
|
||||
sunfulong.me: could not connect to host
|
||||
sunnyfruit.ru: did not receive HSTS header
|
||||
sunshinepress.org: could not connect to host
|
||||
sunyanzi.tk: could not connect to host
|
||||
|
@ -5172,7 +5207,7 @@ synapticconsulting.co.uk: could not connect to host
|
|||
syncappate.com: could not connect to host
|
||||
syncclinicalstudy.com: could not connect to host
|
||||
syncer.jp: did not receive HSTS header
|
||||
syneic.com: could not connect to host
|
||||
syneic.com: did not receive HSTS header
|
||||
syno.gq: could not connect to host
|
||||
syntheticmotoroil.org: did not receive HSTS header
|
||||
syriatalk.biz: could not connect to host
|
||||
|
@ -5205,7 +5240,7 @@ tamex.xyz: could not connect to host
|
|||
tandarts-haarlem.nl: did not receive HSTS header
|
||||
tangel.me: could not connect to host
|
||||
tangibilizing.com: could not connect to host
|
||||
tante-bugil.net: did not receive HSTS header
|
||||
tante-bugil.net: could not connect to host
|
||||
tanze-jetzt.de: could not connect to host
|
||||
taozj.org: did not receive HSTS header
|
||||
tapfinder.ca: could not connect to host
|
||||
|
@ -5260,7 +5295,6 @@ techtoy.store: did not receive HSTS header
|
|||
techtraveller.com.au: did not receive HSTS header
|
||||
tecnimotos.com: did not receive HSTS header
|
||||
tecnogaming.com: did not receive HSTS header
|
||||
teehaus-shila.de: did not receive HSTS header
|
||||
tegelsensanitaironline.nl: did not receive HSTS header
|
||||
teknotes.co.uk: could not connect to host
|
||||
tekshrek.com: did not receive HSTS header
|
||||
|
@ -5317,7 +5351,6 @@ thecoffeehouse.xyz: could not connect to host
|
|||
theelitebuzz.com: did not receive HSTS header
|
||||
theendofzion.com: did not receive HSTS header
|
||||
theescapistswiki.com: could not connect to host
|
||||
theeyeopener.com: did not receive HSTS header
|
||||
thefarbeyond.com: could not connect to host
|
||||
theflowerbasketonline.com: could not connect to host
|
||||
thefootballanalyst.com: did not receive HSTS header
|
||||
|
@ -5358,7 +5391,7 @@ theworkingeye.nl: could not connect to host
|
|||
thewp.pro: could not connect to host
|
||||
thezonders.com: did not receive HSTS header
|
||||
thierfreund.de: could not connect to host
|
||||
thierryhayoz.ch: could not connect to host
|
||||
thingies.site: could not connect to host
|
||||
thinkcoding.de: could not connect to host
|
||||
thinkcoding.org: could not connect to host
|
||||
thinlyveiledcontempt.com: could not connect to host
|
||||
|
@ -5474,7 +5507,7 @@ toyotamotala.se: could not connect to host
|
|||
tpbcdn.com: could not connect to host
|
||||
tpe-edu.com: could not connect to host
|
||||
tpms4u.at: did not receive HSTS header
|
||||
tracktivity.com.au: could not connect to host
|
||||
tracktivity.com.au: did not receive HSTS header
|
||||
tradinews.com: could not connect to host
|
||||
tradinews.fr: could not connect to host
|
||||
tradingcentre.com.au: did not receive HSTS header
|
||||
|
@ -5518,7 +5551,7 @@ tssouthernpower.com: max-age too low: 0
|
|||
tsurimap.com: could not connect to host
|
||||
ttchan.org: could not connect to host
|
||||
tuamoronline.com: could not connect to host
|
||||
tubepro.de: max-age too low: 600000
|
||||
tubepro.de: did not receive HSTS header
|
||||
tubetoon.com: did not receive HSTS header
|
||||
tucker.wales: could not connect to host
|
||||
tuingereedschappen.net: could not connect to host
|
||||
|
@ -5926,7 +5959,6 @@ wnmm.nl: could not connect to host
|
|||
wobblylang.org: could not connect to host
|
||||
wod-stavby.cz: could not connect to host
|
||||
wodice.com: could not connect to host
|
||||
wofford-ecs.org: could not connect to host
|
||||
wohnungsbau-ludwigsburg.de: did not receive HSTS header
|
||||
woima.fi: max-age too low: 604800
|
||||
wolfesden.com: could not connect to host
|
||||
|
@ -5955,6 +5987,7 @@ wpmetadatastandardsproject.org: did not receive HSTS header
|
|||
writeapp.me: did not receive HSTS header
|
||||
wrldevelopment.com: did not receive HSTS header
|
||||
wsscompany.com.ve: could not connect to host
|
||||
wtf.ninja: could not connect to host
|
||||
wufu.org: did not receive HSTS header
|
||||
wuhengmin.com: could not connect to host
|
||||
wukongmusic.us: did not receive HSTS header
|
||||
|
@ -5994,6 +6027,7 @@ xa.search.yahoo.com: did not receive HSTS header
|
|||
xandocs.com: could not connect to host
|
||||
xatr0z.org: could not connect to host
|
||||
xavierbarroso.com: could not connect to host
|
||||
xboxdownloadthat.com: could not connect to host
|
||||
xbt.co: could not connect to host
|
||||
xcoop.me: could not connect to host
|
||||
xehoivn.vn: did not receive HSTS header
|
||||
|
@ -6126,6 +6160,7 @@ yzal.io: did not receive HSTS header
|
|||
z3liff.com: could not connect to host
|
||||
z3liff.net: could not connect to host
|
||||
za.search.yahoo.com: did not receive HSTS header
|
||||
zaclys.com: could not connect to host
|
||||
zadieheimlich.com: did not receive HSTS header
|
||||
zahyantechnologies.com: could not connect to host
|
||||
zakoncontrol.com: could not connect to host
|
||||
|
@ -6135,7 +6170,6 @@ zamos.ru: max-age too low: 0
|
|||
zanthra.com: could not connect to host
|
||||
zao.fi: could not connect to host
|
||||
zap.yt: could not connect to host
|
||||
zaratan.fr: could not connect to host
|
||||
zarooba.com: could not connect to host
|
||||
zary.me: did not receive HSTS header
|
||||
zbigniewgalucki.eu: did not receive HSTS header
|
||||
|
@ -6177,7 +6211,7 @@ zk.gd: did not receive HSTS header
|
|||
zkillboard.com: did not receive HSTS header
|
||||
zking.ga: could not connect to host
|
||||
zmsastro.co.za: could not connect to host
|
||||
zmy.im: did not receive HSTS header
|
||||
zmy.im: could not connect to host
|
||||
zocken.com: did not receive HSTS header
|
||||
zoe.vc: could not connect to host
|
||||
zomiac.pp.ua: could not connect to host
|
||||
|
@ -6185,7 +6219,6 @@ zoneminder.com: did not receive HSTS header
|
|||
zoo24.de: did not receive HSTS header
|
||||
zoomingin.net: max-age too low: 5184000
|
||||
zoommailing.com: did not receive HSTS header
|
||||
zooom.azurewebsites.net: could not connect to host
|
||||
zorasvobodova.cz: did not receive HSTS header
|
||||
zortium.report: could not connect to host
|
||||
zoznamrealit.sk: did not receive HSTS header
|
||||
|
@ -6200,3 +6233,4 @@ zvncloud.com: did not receive HSTS header
|
|||
zwollemagazine.nl: did not receive HSTS header
|
||||
zwy.me: could not connect to host
|
||||
zyf.pw: could not connect to host
|
||||
zymbit.com: could not connect to host
|
||||
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -232,7 +232,7 @@ PUSH_APK_SCOPES = {
|
|||
|
||||
# See https://github.com/mozilla-releng/pushapkscript#aurora-beta-release-vs-alpha-beta-production
|
||||
PUSH_APK_GOOGLE_PLAY_TRACT = {
|
||||
'central': 'alpha',
|
||||
'central': 'beta',
|
||||
'beta': 'rollout',
|
||||
'release': 'rollout',
|
||||
'default': 'invalid',
|
||||
|
|
|
@ -1100,11 +1100,6 @@ this.Extension = class extends ExtensionData {
|
|||
|
||||
Services.ppmm.broadcastAsyncMessage("Extension:Shutdown", {id: this.id});
|
||||
|
||||
if (this.rootURI instanceof Ci.nsIJARURI) {
|
||||
let file = this.rootURI.JARFile.QueryInterface(Ci.nsIFileURL).file;
|
||||
Services.ppmm.broadcastAsyncMessage("Extension:FlushJarCache", {path: file.path});
|
||||
}
|
||||
|
||||
MessageChannel.abortResponses({extensionId: this.id});
|
||||
|
||||
ExtensionManagement.shutdownExtension(this.uuid);
|
||||
|
|
|
@ -58,7 +58,6 @@ MOCHITEST_MANIFESTS += [
|
|||
MOCHITEST_CHROME_MANIFESTS += ['test/mochitest/chrome.ini']
|
||||
XPCSHELL_TESTS_MANIFESTS += [
|
||||
'test/xpcshell/native_messaging.ini',
|
||||
'test/xpcshell/xpcshell-e10s.ini',
|
||||
'test/xpcshell/xpcshell-remote.ini',
|
||||
'test/xpcshell/xpcshell.ini',
|
||||
]
|
||||
|
|
|
@ -5,7 +5,6 @@ const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
|
|||
/* exported createHttpServer, promiseConsoleOutput, cleanupDir */
|
||||
|
||||
Components.utils.import("resource://gre/modules/AppConstants.jsm");
|
||||
Components.utils.import("resource://gre/modules/Services.jsm");
|
||||
Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
Components.utils.import("resource://gre/modules/Timer.jsm");
|
||||
Components.utils.import("resource://testing-common/AddonTestUtils.jsm");
|
||||
|
@ -28,8 +27,8 @@ XPCOMUtils.defineLazyModuleGetter(this, "NetUtil",
|
|||
"resource://gre/modules/NetUtil.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "Schemas",
|
||||
"resource://gre/modules/Schemas.jsm");
|
||||
|
||||
Services.prefs.setBoolPref("extensions.webextensions.remote", false);
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "Services",
|
||||
"resource://gre/modules/Services.jsm");
|
||||
|
||||
ExtensionTestUtils.init(this);
|
||||
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
"use strict";
|
||||
|
||||
/* globals ExtensionTestUtils */
|
||||
|
||||
ExtensionTestUtils.remoteContentScripts = true;
|
|
@ -1,4 +1,5 @@
|
|||
"use strict";
|
||||
|
||||
Services.prefs.setBoolPref("extensions.webextensions.remote", true);
|
||||
Services.prefs.setIntPref("dom.ipc.keepProcessesAlive.extension", 1);
|
||||
/* globals ExtensionTestUtils */
|
||||
|
||||
ExtensionTestUtils.remoteContentScripts = true;
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
[test_ext_alarms_does_not_fire.js]
|
||||
[test_ext_alarms_periodic.js]
|
||||
[test_ext_alarms_replaces.js]
|
||||
[test_ext_api_permissions.js]
|
||||
[test_ext_background_generated_load_events.js]
|
||||
[test_ext_background_generated_reload.js]
|
||||
[test_ext_background_global_history.js]
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
[DEFAULT]
|
||||
head = head.js head_e10s.js
|
||||
tail =
|
||||
firefox-appdir = browser
|
||||
skip-if = appname == "thunderbird" || os == "android"
|
||||
dupe-manifest =
|
||||
support-files =
|
||||
data/**
|
||||
xpcshell-content.ini
|
||||
tags = webextensions webextensions-e10s
|
||||
|
||||
[include:xpcshell-content.ini]
|
|
@ -1,5 +1,5 @@
|
|||
[DEFAULT]
|
||||
head = head.js head_remote.js head_e10s.js
|
||||
head = head.js head_remote.js
|
||||
tail =
|
||||
firefox-appdir = browser
|
||||
skip-if = appname == "thunderbird" || os == "android"
|
||||
|
@ -7,7 +7,6 @@ dupe-manifest =
|
|||
support-files =
|
||||
data/**
|
||||
xpcshell-content.ini
|
||||
tags = webextensions remote-webextensions
|
||||
tags = webextensions webextensions-e10s
|
||||
|
||||
[include:xpcshell-common.ini]
|
||||
[include:xpcshell-content.ini]
|
||||
|
|
|
@ -7,48 +7,86 @@ support-files =
|
|||
data/**
|
||||
head_sync.js
|
||||
xpcshell-content.ini
|
||||
tags = webextensions in-process-webextensions
|
||||
|
||||
# This file contains tests which are not affected by multi-process
|
||||
# configuration, or do not support out-of-process content or extensions
|
||||
# for one reason or another.
|
||||
#
|
||||
# Tests which are affected by remote content or remote extensions should
|
||||
# go in one of:
|
||||
#
|
||||
# - xpcshell-common.ini
|
||||
# For tests which should run in all configurations.
|
||||
# - xpcshell-remote.ini
|
||||
# For tests which should only run with both remote extensions and remote content.
|
||||
# - xpcshell-content.ini
|
||||
# For tests which rely on content pages, and should run in all configurations.
|
||||
# - xpcshell-e10s.ini
|
||||
# For tests which rely on conetn pages, and should only run with remote content
|
||||
# but in-process extensions.
|
||||
tags = webextensions
|
||||
|
||||
[test_csp_custom_policies.js]
|
||||
[test_csp_validator.js]
|
||||
[test_ext_alarms.js]
|
||||
[test_ext_alarms_does_not_fire.js]
|
||||
[test_ext_alarms_periodic.js]
|
||||
[test_ext_alarms_replaces.js]
|
||||
[test_ext_api_permissions.js]
|
||||
[test_ext_background_generated_load_events.js]
|
||||
[test_ext_background_generated_reload.js]
|
||||
[test_ext_background_global_history.js]
|
||||
skip-if = os == "android" # Android does not use Places for history.
|
||||
[test_ext_background_private_browsing.js]
|
||||
[test_ext_background_runtime_connect_params.js]
|
||||
[test_ext_background_sub_windows.js]
|
||||
[test_ext_background_window_properties.js]
|
||||
skip-if = os == "android"
|
||||
[test_ext_contexts.js]
|
||||
[test_ext_contextual_identities.js]
|
||||
skip-if = os == "android" # Containers are not exposed to android.
|
||||
[test_ext_debugging_utils.js]
|
||||
[test_ext_downloads.js]
|
||||
[test_ext_downloads_download.js]
|
||||
skip-if = os == "android"
|
||||
[test_ext_downloads_misc.js]
|
||||
skip-if = os == "android" || (os=='linux' && bits==32) # linux32: bug 1324870
|
||||
[test_ext_downloads_search.js]
|
||||
skip-if = os == "android"
|
||||
[test_ext_experiments.js]
|
||||
skip-if = release_or_beta
|
||||
[test_ext_extension.js]
|
||||
[test_ext_extensionPreferencesManager.js]
|
||||
[test_ext_extensionSettingsStore.js]
|
||||
[test_ext_idle.js]
|
||||
[test_ext_json_parser.js]
|
||||
[test_ext_localStorage.js]
|
||||
[test_ext_management.js]
|
||||
[test_ext_management_uninstall_self.js]
|
||||
[test_ext_manifest_content_security_policy.js]
|
||||
[test_ext_manifest_incognito.js]
|
||||
[test_ext_manifest_minimum_chrome_version.js]
|
||||
[test_ext_manifest_themes.js]
|
||||
[test_ext_onmessage_removelistener.js]
|
||||
skip-if = true # This test no longer tests what it is meant to test.
|
||||
[test_ext_permissions.js]
|
||||
skip-if = os == "android" # Bug 1350559
|
||||
[test_ext_privacy.js]
|
||||
[test_ext_privacy_disable.js]
|
||||
[test_ext_privacy_update.js]
|
||||
[test_ext_runtime_connect_no_receiver.js]
|
||||
[test_ext_runtime_getBrowserInfo.js]
|
||||
[test_ext_runtime_getPlatformInfo.js]
|
||||
[test_ext_runtime_onInstalled_and_onStartup.js]
|
||||
[test_ext_runtime_sendMessage.js]
|
||||
[test_ext_runtime_sendMessage_args.js]
|
||||
[test_ext_runtime_sendMessage_errors.js]
|
||||
[test_ext_runtime_sendMessage_no_receiver.js]
|
||||
[test_ext_runtime_sendMessage_self.js]
|
||||
[test_ext_schemas.js]
|
||||
[test_ext_schemas_async.js]
|
||||
[test_ext_schemas_allowed_contexts.js]
|
||||
[test_ext_schemas_revoke.js]
|
||||
[test_ext_shutdown_cleanup.js]
|
||||
[test_ext_simple.js]
|
||||
[test_ext_startup_cache.js]
|
||||
[test_ext_storage.js]
|
||||
[test_ext_storage_sync.js]
|
||||
head = head.js head_sync.js
|
||||
skip-if = os == "android"
|
||||
[test_ext_storage_sync_crypto.js]
|
||||
skip-if = os == "android"
|
||||
[test_ext_themes_supported_properties.js]
|
||||
[test_locale_converter.js]
|
||||
[test_locale_data.js]
|
||||
|
||||
[test_ext_permissions.js]
|
||||
skip-if = os == "android" # Bug 1350559
|
||||
[test_ext_api_permissions.js]
|
||||
|
||||
[test_ext_topSites.js]
|
||||
skip-if = os == "android"
|
||||
[test_ext_legacy_extension_context.js]
|
||||
[test_ext_legacy_extension_embedding.js]
|
||||
[test_locale_converter.js]
|
||||
[test_locale_data.js]
|
||||
[test_native_messaging.js]
|
||||
skip-if = os == "android"
|
||||
[test_proxy_scripts.js]
|
||||
|
||||
[include:xpcshell-common.ini]
|
||||
[include:xpcshell-content.ini]
|
||||
|
|
Загрузка…
Ссылка в новой задаче