Merge remote-tracking branch 'origin/tracking' into custom

This commit is contained in:
roytam1 2022-04-10 23:03:50 +08:00
commit be997daa6b
7 changed files with 60 additions and 20 deletions

View file

@ -23,6 +23,19 @@ function enableSourceMaps() {
function _resolveSourceMapURL(source) {
const { url = "", sourceMapURL = "" } = source;
const UNSUPPORTED_PROTOCOLS = ["chrome://", "resource://"];
if (path.isURL(sourceMapURL) && UNSUPPORTED_PROTOCOLS.some(protocol => sourceMapURL.startsWith(protocol))) {
// If it's an internal protocol, don't allow it and return empty.
return "";
}
if (path.isURL(sourceMapURL) && sourceMapURL.startsWith("file://")) {
// Only allow file:// source maps from file:// docs
if (!url.startsWith("file://")) {
return "";
}
}
if (path.isURL(sourceMapURL) || url == "") {
// If it's already a full URL or the source doesn't have a URL,
// don't resolve anything.

View file

@ -1066,6 +1066,15 @@ WebGLContext::DoFakeVertexAttrib0(const char* funcName, GLuint vertexCount)
vertexCount = 1;
}
if (gl->WorkAroundDriverBugs() && gl->Vendor() == gl::GLVendor::Nouveau) {
// Padded/strided to vec4, so 4x4bytes.
const auto effectiveVertAttribBytes = CheckedInt<int32_t>(vertexCount) * 4 * 4;
if (!effectiveVertAttribBytes.isValid()) {
ErrorOutOfMemory("`offset + count` too large for Mesa.");
return false;
}
}
const auto whatDoesAttrib0Need = WhatDoesVertexAttrib0Need();
if (MOZ_LIKELY(whatDoesAttrib0Need == WebGLVertexAttrib0Status::Default))
return true;

View file

@ -10113,7 +10113,7 @@ class MLoadTypedArrayElementHole
return congruentIfOperandsEqual(other);
}
AliasSet getAliasSet() const override {
return AliasSet::Load(AliasSet::UnboxedElement);
return AliasSet::Load(AliasSet::UnboxedElement | AliasSet::ObjectFields);
}
bool canProduceFloat32() const override { return arrayType_ == Scalar::Float32; }

View file

@ -137,10 +137,15 @@ LazyIdleThread::EnsureThread()
return NS_OK;
}
MOZ_ASSERT(!mPendingEventCount, "Shouldn't have events yet!");
MOZ_ASSERT(!mIdleNotificationCount, "Shouldn't have idle events yet!");
MOZ_ASSERT(!mIdleTimer, "Should have killed this long ago!");
MOZ_ASSERT(!mThreadIsShuttingDown, "Should have cleared that!");
#ifdef DEBUG
{ // Lock scope
MutexAutoLock lock(mMutex);
MOZ_ASSERT(!mPendingEventCount, "Shouldn't have events yet!");
MOZ_ASSERT(!mIdleNotificationCount, "Shouldn't have idle events yet!");
MOZ_ASSERT(!mIdleTimer, "Should have killed this long ago!");
MOZ_ASSERT(!mThreadIsShuttingDown, "Should have cleared that!");
}
#endif
nsresult rv;

View file

@ -152,9 +152,10 @@ private:
nsCOMPtr<nsIThread> mThread;
/**
* Protected by mMutex. Created when mThread has no pending events and fired
* Created when mThread has no pending events and fired
* at mOwningThread. Any thread that dispatches to mThread will take ownership
* of the timer and fire a separate cancel event to the owning thread.
* Only accessed from the owning thread.
*/
nsCOMPtr<nsITimer> mIdleTimer;

View file

@ -280,10 +280,13 @@ nsProcess::ProcessComplete()
}
const char* topic;
if (mExitValue < 0) {
topic = "process-failed";
} else {
topic = "process-finished";
{ // Lock scope
MutexAutoLock lock(mLock);
if (mExitValue < 0) {
topic = "process-failed";
} else {
topic = "process-finished";
}
}
mPid = -1;
@ -412,8 +415,11 @@ nsProcess::RunProcess(bool aBlocking, char** aMyArgv, nsIObserver* aObserver,
}
}
mExitValue = -1;
mPid = -1;
{
MutexAutoLock lock(mLock);
mExitValue = -1;
mPid = -1;
}
#if defined(PROCESSMODEL_WINAPI)
BOOL retVal;
@ -477,6 +483,7 @@ nsProcess::RunProcess(bool aBlocking, char** aMyArgv, nsIObserver* aObserver,
mBlocking = aBlocking;
if (aBlocking) {
Monitor(this);
MutexAutoLock lock(mLock);
if (mExitValue < 0) {
return NS_ERROR_FILE_EXECUTION_FAILED;
}

View file

@ -155,8 +155,6 @@ nsThreadPool::Run()
{
mThreadNaming.SetThreadPoolName(mName);
LOG(("THRD-P(%p) enter %s\n", this, mName.BeginReading()));
nsCOMPtr<nsIThread> current;
nsThreadManager::get().GetCurrentThread(getter_AddRefs(current));
@ -169,6 +167,7 @@ nsThreadPool::Run()
{
MutexAutoLock lock(mMutex);
listener = mListener;
LOG(("THRD-P(%p) enter %s\n", this, mName.BeginReading()));
}
if (listener) {
@ -223,7 +222,12 @@ nsThreadPool::Run()
}
}
if (event) {
LOG(("THRD-P(%p) %s running [%p]\n", this, mName.BeginReading(), event.get()));
#ifdef DEBUG
{
MutexAutoLock lock(mMutex);
LOG(("THRD-P(%p) %s running [%p]\n", this, mName.BeginReading(), event.get()));
}
#endif
event->Run();
}
} while (!exitThread);
@ -335,6 +339,7 @@ nsThreadPool::Shutdown()
NS_IMETHODIMP
nsThreadPool::GetThreadLimit(uint32_t* aValue)
{
MutexAutoLock lock(mMutex);
*aValue = mThreadLimit;
return NS_OK;
}
@ -358,6 +363,7 @@ nsThreadPool::SetThreadLimit(uint32_t aValue)
NS_IMETHODIMP
nsThreadPool::GetIdleThreadLimit(uint32_t* aValue)
{
MutexAutoLock lock(mMutex);
*aValue = mIdleThreadLimit;
return NS_OK;
}
@ -382,6 +388,7 @@ nsThreadPool::SetIdleThreadLimit(uint32_t aValue)
NS_IMETHODIMP
nsThreadPool::GetIdleThreadTimeout(uint32_t* aValue)
{
MutexAutoLock lock(mMutex);
*aValue = mIdleThreadTimeout;
return NS_OK;
}
@ -438,11 +445,9 @@ nsThreadPool::SetListener(nsIThreadPoolListener* aListener)
NS_IMETHODIMP
nsThreadPool::SetName(const nsACString& aName)
{
{
MutexAutoLock lock(mMutex);
if (mThreads.Count()) {
return NS_ERROR_NOT_AVAILABLE;
}
MutexAutoLock lock(mMutex);
if (mThreads.Count()) {
return NS_ERROR_NOT_AVAILABLE;
}
mName = aName;