mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-13 13:25:37 +00:00
Merge mozilla-central to autoland r=merge a=merge on a CLOSED TREE
--HG-- extra : amend_source : 777464d07da7436d409117fd825c624c4870380b
This commit is contained in:
commit
ae041e25fc
@ -240,6 +240,94 @@ EvictEntries(nsIFile* aDirectory, const nsACString& aGroup,
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Client
|
||||
******************************************************************************/
|
||||
|
||||
class Client
|
||||
: public quota::Client
|
||||
{
|
||||
static Client* sInstance;
|
||||
|
||||
bool mShutdownRequested;
|
||||
|
||||
public:
|
||||
Client();
|
||||
|
||||
static bool
|
||||
IsShuttingDownOnBackgroundThread()
|
||||
{
|
||||
AssertIsOnBackgroundThread();
|
||||
|
||||
if (sInstance) {
|
||||
return sInstance->IsShuttingDown();
|
||||
}
|
||||
|
||||
return QuotaManager::IsShuttingDown();
|
||||
}
|
||||
|
||||
static bool
|
||||
IsShuttingDownOnNonBackgroundThread()
|
||||
{
|
||||
MOZ_ASSERT(!IsOnBackgroundThread());
|
||||
|
||||
return QuotaManager::IsShuttingDown();
|
||||
}
|
||||
|
||||
bool
|
||||
IsShuttingDown() const
|
||||
{
|
||||
AssertIsOnBackgroundThread();
|
||||
|
||||
return mShutdownRequested;
|
||||
}
|
||||
|
||||
NS_INLINE_DECL_REFCOUNTING(Client, override)
|
||||
|
||||
Type
|
||||
GetType() override;
|
||||
|
||||
nsresult
|
||||
InitOrigin(PersistenceType aPersistenceType,
|
||||
const nsACString& aGroup,
|
||||
const nsACString& aOrigin,
|
||||
const AtomicBool& aCanceled,
|
||||
UsageInfo* aUsageInfo) override;
|
||||
|
||||
nsresult
|
||||
GetUsageForOrigin(PersistenceType aPersistenceType,
|
||||
const nsACString& aGroup,
|
||||
const nsACString& aOrigin,
|
||||
const AtomicBool& aCanceled,
|
||||
UsageInfo* aUsageInfo) override;
|
||||
|
||||
void
|
||||
OnOriginClearCompleted(PersistenceType aPersistenceType,
|
||||
const nsACString& aOrigin)
|
||||
override;
|
||||
|
||||
void
|
||||
ReleaseIOThreadObjects() override;
|
||||
|
||||
void
|
||||
AbortOperations(const nsACString& aOrigin) override;
|
||||
|
||||
void
|
||||
AbortOperationsForProcess(ContentParentId aContentParentId) override;
|
||||
|
||||
void
|
||||
StartIdleMaintenance() override;
|
||||
|
||||
void
|
||||
StopIdleMaintenance() override;
|
||||
|
||||
void
|
||||
ShutdownWorkThreads() override;
|
||||
|
||||
private:
|
||||
~Client() override;
|
||||
};
|
||||
|
||||
// FileDescriptorHolder owns a file descriptor and its memory mapping.
|
||||
// FileDescriptorHolder is derived by two runnable classes (that is,
|
||||
// (Parent|Child)Runnable.
|
||||
@ -1044,6 +1132,10 @@ AllocEntryParent(OpenMode aOpenMode,
|
||||
{
|
||||
AssertIsOnBackgroundThread();
|
||||
|
||||
if (NS_WARN_IF(Client::IsShuttingDownOnBackgroundThread())) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (NS_WARN_IF(aPrincipalInfo.type() == PrincipalInfo::TNullPrincipalInfo)) {
|
||||
MOZ_ASSERT(false);
|
||||
return nullptr;
|
||||
@ -1593,136 +1685,160 @@ CloseEntryForWrite(size_t aSize,
|
||||
}
|
||||
}
|
||||
|
||||
class Client : public quota::Client
|
||||
/*******************************************************************************
|
||||
* Client
|
||||
******************************************************************************/
|
||||
|
||||
Client* Client::sInstance = nullptr;
|
||||
|
||||
Client::Client()
|
||||
: mShutdownRequested(false)
|
||||
{
|
||||
~Client() override = default;
|
||||
AssertIsOnBackgroundThread();
|
||||
MOZ_ASSERT(!sInstance, "We expect this to be a singleton!");
|
||||
|
||||
public:
|
||||
NS_IMETHOD_(MozExternalRefCountType)
|
||||
AddRef() override;
|
||||
sInstance = this;
|
||||
}
|
||||
|
||||
NS_IMETHOD_(MozExternalRefCountType)
|
||||
Release() override;
|
||||
Client::~Client()
|
||||
{
|
||||
AssertIsOnBackgroundThread();
|
||||
MOZ_ASSERT(sInstance == this, "We expect this to be a singleton!");
|
||||
|
||||
Type
|
||||
GetType() override
|
||||
{
|
||||
return ASMJS;
|
||||
}
|
||||
sInstance = nullptr;
|
||||
}
|
||||
|
||||
nsresult
|
||||
InitOrigin(PersistenceType aPersistenceType,
|
||||
const nsACString& aGroup,
|
||||
const nsACString& aOrigin,
|
||||
const AtomicBool& aCanceled,
|
||||
UsageInfo* aUsageInfo) override
|
||||
{
|
||||
if (!aUsageInfo) {
|
||||
return NS_OK;
|
||||
}
|
||||
return GetUsageForOrigin(aPersistenceType,
|
||||
aGroup,
|
||||
aOrigin,
|
||||
aCanceled,
|
||||
aUsageInfo);
|
||||
}
|
||||
|
||||
nsresult
|
||||
GetUsageForOrigin(PersistenceType aPersistenceType,
|
||||
const nsACString& aGroup,
|
||||
const nsACString& aOrigin,
|
||||
const AtomicBool& aCanceled,
|
||||
UsageInfo* aUsageInfo) override
|
||||
{
|
||||
QuotaManager* qm = QuotaManager::Get();
|
||||
MOZ_ASSERT(qm, "We were being called by the QuotaManager");
|
||||
|
||||
nsCOMPtr<nsIFile> directory;
|
||||
nsresult rv = qm->GetDirectoryForOrigin(aPersistenceType, aOrigin,
|
||||
getter_AddRefs(directory));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
MOZ_ASSERT(directory, "We're here because the origin directory exists");
|
||||
|
||||
rv = directory->Append(NS_LITERAL_STRING(ASMJSCACHE_DIRECTORY_NAME));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
DebugOnly<bool> exists;
|
||||
MOZ_ASSERT(NS_SUCCEEDED(directory->Exists(&exists)) && exists);
|
||||
|
||||
nsCOMPtr<nsISimpleEnumerator> entries;
|
||||
rv = directory->GetDirectoryEntries(getter_AddRefs(entries));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
bool hasMore;
|
||||
while (NS_SUCCEEDED((rv = entries->HasMoreElements(&hasMore))) &&
|
||||
hasMore && !aCanceled) {
|
||||
nsCOMPtr<nsISupports> entry;
|
||||
rv = entries->GetNext(getter_AddRefs(entry));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCOMPtr<nsIFile> file = do_QueryInterface(entry);
|
||||
NS_ENSURE_TRUE(file, NS_NOINTERFACE);
|
||||
|
||||
int64_t fileSize;
|
||||
rv = file->GetFileSize(&fileSize);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
MOZ_ASSERT(fileSize >= 0, "Negative size?!");
|
||||
|
||||
// Since the client is not explicitly storing files, append to database
|
||||
// usage which represents implicit storage allocation.
|
||||
aUsageInfo->AppendToDatabaseUsage(uint64_t(fileSize));
|
||||
}
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
Client::Type
|
||||
Client::GetType()
|
||||
{
|
||||
return ASMJS;
|
||||
}
|
||||
|
||||
nsresult
|
||||
Client::InitOrigin(PersistenceType aPersistenceType,
|
||||
const nsACString& aGroup,
|
||||
const nsACString& aOrigin,
|
||||
const AtomicBool& aCanceled,
|
||||
UsageInfo* aUsageInfo)
|
||||
{
|
||||
if (!aUsageInfo) {
|
||||
return NS_OK;
|
||||
}
|
||||
return GetUsageForOrigin(aPersistenceType,
|
||||
aGroup,
|
||||
aOrigin,
|
||||
aCanceled,
|
||||
aUsageInfo);
|
||||
}
|
||||
|
||||
void
|
||||
OnOriginClearCompleted(PersistenceType aPersistenceType,
|
||||
const nsACString& aOrigin)
|
||||
override
|
||||
{ }
|
||||
nsresult
|
||||
Client::GetUsageForOrigin(PersistenceType aPersistenceType,
|
||||
const nsACString& aGroup,
|
||||
const nsACString& aOrigin,
|
||||
const AtomicBool& aCanceled,
|
||||
UsageInfo* aUsageInfo)
|
||||
{
|
||||
QuotaManager* qm = QuotaManager::Get();
|
||||
MOZ_ASSERT(qm, "We were being called by the QuotaManager");
|
||||
|
||||
void
|
||||
ReleaseIOThreadObjects() override
|
||||
{ }
|
||||
|
||||
void
|
||||
AbortOperations(const nsACString& aOrigin) override
|
||||
{ }
|
||||
|
||||
void
|
||||
AbortOperationsForProcess(ContentParentId aContentParentId) override
|
||||
{ }
|
||||
|
||||
void
|
||||
StartIdleMaintenance() override
|
||||
{ }
|
||||
|
||||
void
|
||||
StopIdleMaintenance() override
|
||||
{ }
|
||||
|
||||
void
|
||||
ShutdownWorkThreads() override
|
||||
{
|
||||
AssertIsOnBackgroundThread();
|
||||
|
||||
if (sLiveParentActors) {
|
||||
MOZ_ALWAYS_TRUE(SpinEventLoopUntil([&]() {
|
||||
return !sLiveParentActors;
|
||||
}));
|
||||
}
|
||||
nsCOMPtr<nsIFile> directory;
|
||||
nsresult rv = qm->GetDirectoryForOrigin(aPersistenceType, aOrigin,
|
||||
getter_AddRefs(directory));
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
private:
|
||||
nsAutoRefCnt mRefCnt;
|
||||
NS_DECL_OWNINGTHREAD
|
||||
};
|
||||
MOZ_ASSERT(directory, "We're here because the origin directory exists");
|
||||
|
||||
NS_IMPL_ADDREF(asmjscache::Client)
|
||||
NS_IMPL_RELEASE(asmjscache::Client)
|
||||
rv = directory->Append(NS_LITERAL_STRING(ASMJSCACHE_DIRECTORY_NAME));
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
DebugOnly<bool> exists;
|
||||
MOZ_ASSERT(NS_SUCCEEDED(directory->Exists(&exists)) && exists);
|
||||
|
||||
nsCOMPtr<nsISimpleEnumerator> entries;
|
||||
rv = directory->GetDirectoryEntries(getter_AddRefs(entries));
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
bool hasMore;
|
||||
while (NS_SUCCEEDED((rv = entries->HasMoreElements(&hasMore))) &&
|
||||
hasMore && !aCanceled) {
|
||||
nsCOMPtr<nsISupports> entry;
|
||||
rv = entries->GetNext(getter_AddRefs(entry));
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIFile> file = do_QueryInterface(entry);
|
||||
if (NS_WARN_IF(!file)) {
|
||||
return NS_NOINTERFACE;
|
||||
}
|
||||
|
||||
int64_t fileSize;
|
||||
rv = file->GetFileSize(&fileSize);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
MOZ_ASSERT(fileSize >= 0, "Negative size?!");
|
||||
|
||||
// Since the client is not explicitly storing files, append to database
|
||||
// usage which represents implicit storage allocation.
|
||||
aUsageInfo->AppendToDatabaseUsage(uint64_t(fileSize));
|
||||
}
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
void
|
||||
Client::OnOriginClearCompleted(PersistenceType aPersistenceType,
|
||||
const nsACString& aOrigin)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
Client::ReleaseIOThreadObjects()
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
Client::AbortOperations(const nsACString& aOrigin)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
Client::AbortOperationsForProcess(ContentParentId aContentParentId)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
Client::StartIdleMaintenance()
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
Client::StopIdleMaintenance()
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
Client::ShutdownWorkThreads()
|
||||
{
|
||||
AssertIsOnBackgroundThread();
|
||||
|
||||
if (sLiveParentActors) {
|
||||
MOZ_ALWAYS_TRUE(SpinEventLoopUntil([&]() {
|
||||
return !sLiveParentActors;
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
quota::Client*
|
||||
CreateClient()
|
||||
|
@ -17984,11 +17984,22 @@ QuotaClient::ShutdownWorkThreads()
|
||||
|
||||
mShutdownRequested = true;
|
||||
|
||||
// Shutdown maintenance thread pool (this spins the event loop until all
|
||||
// threads are gone). This should release any maintenance related quota
|
||||
// objects.
|
||||
if (mMaintenanceThreadPool) {
|
||||
mMaintenanceThreadPool->Shutdown();
|
||||
mMaintenanceThreadPool = nullptr;
|
||||
}
|
||||
|
||||
// Let any runnables dispatched from dying maintenance threads to be
|
||||
// processed. This should release any maintenance related directory locks.
|
||||
if (mCurrentMaintenance) {
|
||||
MOZ_ALWAYS_TRUE(SpinEventLoopUntil([&]() {
|
||||
return !mCurrentMaintenance;
|
||||
}));
|
||||
}
|
||||
|
||||
RefPtr<ConnectionPool> connectionPool = gConnectionPool.get();
|
||||
if (connectionPool) {
|
||||
connectionPool->Shutdown();
|
||||
@ -18312,7 +18323,8 @@ Maintenance::Start()
|
||||
AssertIsOnBackgroundThread();
|
||||
MOZ_ASSERT(mState == State::Initial);
|
||||
|
||||
if (IsAborted()) {
|
||||
if (NS_WARN_IF(QuotaClient::IsShuttingDownOnBackgroundThread()) ||
|
||||
IsAborted()) {
|
||||
return NS_ERROR_ABORT;
|
||||
}
|
||||
|
||||
@ -18336,7 +18348,8 @@ Maintenance::CreateIndexedDatabaseManager()
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
MOZ_ASSERT(mState == State::CreateIndexedDatabaseManager);
|
||||
|
||||
if (IsAborted()) {
|
||||
if (NS_WARN_IF(QuotaClient::IsShuttingDownOnNonBackgroundThread()) ||
|
||||
IsAborted()) {
|
||||
return NS_ERROR_ABORT;
|
||||
}
|
||||
|
||||
@ -18361,7 +18374,8 @@ Maintenance::OpenDirectory()
|
||||
MOZ_ASSERT(!mDirectoryLock);
|
||||
MOZ_ASSERT(QuotaManager::Get());
|
||||
|
||||
if (IsAborted()) {
|
||||
if (NS_WARN_IF(QuotaClient::IsShuttingDownOnBackgroundThread()) ||
|
||||
IsAborted()) {
|
||||
return NS_ERROR_ABORT;
|
||||
}
|
||||
|
||||
@ -18385,7 +18399,8 @@ Maintenance::DirectoryOpen()
|
||||
MOZ_ASSERT(mState == State::DirectoryOpenPending);
|
||||
MOZ_ASSERT(mDirectoryLock);
|
||||
|
||||
if (IsAborted()) {
|
||||
if (NS_WARN_IF(QuotaClient::IsShuttingDownOnBackgroundThread()) ||
|
||||
IsAborted()) {
|
||||
return NS_ERROR_ABORT;
|
||||
}
|
||||
|
||||
@ -18415,7 +18430,8 @@ Maintenance::DirectoryWork()
|
||||
// We have to find all database files that match any persistence type and any
|
||||
// origin. We ignore anything out of the ordinary for now.
|
||||
|
||||
if (IsAborted()) {
|
||||
if (NS_WARN_IF(QuotaClient::IsShuttingDownOnNonBackgroundThread()) ||
|
||||
IsAborted()) {
|
||||
return NS_ERROR_ABORT;
|
||||
}
|
||||
|
||||
@ -18754,6 +18770,11 @@ Maintenance::BeginDatabaseMaintenance()
|
||||
}
|
||||
};
|
||||
|
||||
if (NS_WARN_IF(QuotaClient::IsShuttingDownOnBackgroundThread()) ||
|
||||
IsAborted()) {
|
||||
return NS_ERROR_ABORT;
|
||||
}
|
||||
|
||||
RefPtr<nsThreadPool> threadPool;
|
||||
|
||||
for (DirectoryInfo& directoryInfo : mDirectoryInfos) {
|
||||
@ -18940,6 +18961,11 @@ DatabaseMaintenance::PerformMaintenanceOnDatabase()
|
||||
}
|
||||
};
|
||||
|
||||
if (NS_WARN_IF(QuotaClient::IsShuttingDownOnNonBackgroundThread()) ||
|
||||
mMaintenance->IsAborted()) {
|
||||
return;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIFile> databaseFile = GetFileForPath(mDatabasePath);
|
||||
MOZ_ASSERT(databaseFile);
|
||||
|
||||
@ -18956,10 +18982,6 @@ DatabaseMaintenance::PerformMaintenanceOnDatabase()
|
||||
|
||||
AutoClose autoClose(connection);
|
||||
|
||||
if (mMaintenance->IsAborted()) {
|
||||
return;
|
||||
}
|
||||
|
||||
AutoProgressHandler progressHandler(mMaintenance);
|
||||
if (NS_WARN_IF(NS_FAILED(progressHandler.Register(connection)))) {
|
||||
return;
|
||||
@ -18978,20 +19000,12 @@ DatabaseMaintenance::PerformMaintenanceOnDatabase()
|
||||
return;
|
||||
}
|
||||
|
||||
if (mMaintenance->IsAborted()) {
|
||||
return;
|
||||
}
|
||||
|
||||
MaintenanceAction maintenanceAction;
|
||||
rv = DetermineMaintenanceAction(connection, databaseFile, &maintenanceAction);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (mMaintenance->IsAborted()) {
|
||||
return;
|
||||
}
|
||||
|
||||
switch (maintenanceAction) {
|
||||
case MaintenanceAction::Nothing:
|
||||
break;
|
||||
@ -19018,6 +19032,11 @@ DatabaseMaintenance::CheckIntegrity(mozIStorageConnection* aConnection,
|
||||
MOZ_ASSERT(aConnection);
|
||||
MOZ_ASSERT(aOk);
|
||||
|
||||
if (NS_WARN_IF(QuotaClient::IsShuttingDownOnNonBackgroundThread()) ||
|
||||
mMaintenance->IsAborted()) {
|
||||
return NS_ERROR_ABORT;
|
||||
}
|
||||
|
||||
nsresult rv;
|
||||
|
||||
// First do a full integrity_check. Scope statements tightly here because
|
||||
@ -19135,6 +19154,11 @@ DatabaseMaintenance::DetermineMaintenanceAction(
|
||||
MOZ_ASSERT(aDatabaseFile);
|
||||
MOZ_ASSERT(aMaintenanceAction);
|
||||
|
||||
if (NS_WARN_IF(QuotaClient::IsShuttingDownOnNonBackgroundThread()) ||
|
||||
mMaintenance->IsAborted()) {
|
||||
return NS_ERROR_ABORT;
|
||||
}
|
||||
|
||||
int32_t schemaVersion;
|
||||
nsresult rv = aConnection->GetSchemaVersion(&schemaVersion);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
@ -19344,6 +19368,11 @@ DatabaseMaintenance::IncrementalVacuum(mozIStorageConnection* aConnection)
|
||||
MOZ_ASSERT(!IsOnBackgroundThread());
|
||||
MOZ_ASSERT(aConnection);
|
||||
|
||||
if (NS_WARN_IF(QuotaClient::IsShuttingDownOnNonBackgroundThread()) ||
|
||||
mMaintenance->IsAborted()) {
|
||||
return;
|
||||
}
|
||||
|
||||
nsresult rv = aConnection->ExecuteSimpleSQL(NS_LITERAL_CSTRING(
|
||||
"PRAGMA incremental_vacuum;"
|
||||
));
|
||||
@ -19361,6 +19390,11 @@ DatabaseMaintenance::FullVacuum(mozIStorageConnection* aConnection,
|
||||
MOZ_ASSERT(aConnection);
|
||||
MOZ_ASSERT(aDatabaseFile);
|
||||
|
||||
if (NS_WARN_IF(QuotaClient::IsShuttingDownOnNonBackgroundThread()) ||
|
||||
mMaintenance->IsAborted()) {
|
||||
return;
|
||||
}
|
||||
|
||||
nsresult rv = aConnection->ExecuteSimpleSQL(NS_LITERAL_CSTRING(
|
||||
"VACUUM;"
|
||||
));
|
||||
|
@ -157,7 +157,6 @@ enum {
|
||||
JS_TELEMETRY_DEPRECATED_LANGUAGE_EXTENSIONS_IN_CONTENT,
|
||||
JS_TELEMETRY_DEPRECATED_LANGUAGE_EXTENSIONS_IN_ADDONS,
|
||||
JS_TELEMETRY_ADDON_EXCEPTIONS,
|
||||
JS_TELEMETRY_AOT_USAGE,
|
||||
JS_TELEMETRY_PRIVILEGED_PARSER_COMPILE_LAZY_AFTER_MS,
|
||||
JS_TELEMETRY_WEB_PARSER_COMPILE_LAZY_AFTER_MS,
|
||||
JS_TELEMETRY_END
|
||||
|
@ -478,15 +478,6 @@ enum class NameType
|
||||
Local = 2
|
||||
};
|
||||
|
||||
// Telemetry sample values for the JS_AOT_USAGE key, indicating whether asm.js
|
||||
// or WebAssembly is used.
|
||||
|
||||
enum class Telemetry
|
||||
{
|
||||
ASMJS = 0,
|
||||
WASM = 1
|
||||
};
|
||||
|
||||
// These limits are agreed upon with other engines for consistency.
|
||||
|
||||
static const unsigned MaxTypes = 1000000;
|
||||
|
@ -1220,9 +1220,6 @@ Module::instantiate(JSContext* cx,
|
||||
return false;
|
||||
}
|
||||
|
||||
uint32_t mode = uint32_t(metadata().isAsmJS() ? Telemetry::ASMJS : Telemetry::WASM);
|
||||
cx->runtime()->addTelemetry(JS_TELEMETRY_AOT_USAGE, mode);
|
||||
|
||||
JSUseCounter useCounter = metadata().isAsmJS() ? JSUseCounter::ASMJS : JSUseCounter::WASM;
|
||||
cx->runtime()->setUseCounter(instance, useCounter);
|
||||
|
||||
|
@ -2669,9 +2669,6 @@ AccumulateTelemetryCallback(int id, uint32_t sample, const char* key)
|
||||
case JS_TELEMETRY_ADDON_EXCEPTIONS:
|
||||
Telemetry::Accumulate(Telemetry::JS_TELEMETRY_ADDON_EXCEPTIONS, nsDependentCString(key), sample);
|
||||
break;
|
||||
case JS_TELEMETRY_AOT_USAGE:
|
||||
Telemetry::Accumulate(Telemetry::JS_AOT_USAGE, sample);
|
||||
break;
|
||||
case JS_TELEMETRY_PRIVILEGED_PARSER_COMPILE_LAZY_AFTER_MS:
|
||||
Telemetry::Accumulate(Telemetry::JS_PRIVILEGED_PARSER_COMPILE_LAZY_AFTER_MS, sample);
|
||||
break;
|
||||
|
@ -345,8 +345,6 @@ nsBufferedInputStream::Close()
|
||||
};
|
||||
#endif
|
||||
|
||||
mAsyncWaitCallback = nullptr;
|
||||
|
||||
if (NS_FAILED(rv1)) {
|
||||
return rv1;
|
||||
}
|
||||
|
@ -153,7 +153,7 @@ nsHtml5Parser::UnblockParser()
|
||||
if (MOZ_LIKELY(mBlocked > 0)) {
|
||||
mBlocked--;
|
||||
}
|
||||
if (MOZ_LIKELY(mBlocked == 0)) {
|
||||
if (MOZ_LIKELY(mBlocked == 0) && mExecutor) {
|
||||
mExecutor->ContinueInterruptedParsingAsync();
|
||||
}
|
||||
}
|
||||
@ -161,7 +161,9 @@ nsHtml5Parser::UnblockParser()
|
||||
NS_IMETHODIMP_(void)
|
||||
nsHtml5Parser::ContinueInterruptedParsingAsync()
|
||||
{
|
||||
mExecutor->ContinueInterruptedParsingAsync();
|
||||
if (mExecutor) {
|
||||
mExecutor->ContinueInterruptedParsingAsync();
|
||||
}
|
||||
}
|
||||
|
||||
NS_IMETHODIMP_(bool)
|
||||
|
@ -13030,15 +13030,6 @@
|
||||
"n_values": 6,
|
||||
"description": "Number of revoke actions on permissions in the control center, keyed by permission id. Values represent the permission type that was revoked. (0=unknown, 1=permanently allowed, 2=permanently blocked, 3=temporarily allowed, 4=temporarily blocked)"
|
||||
},
|
||||
"JS_AOT_USAGE": {
|
||||
"record_in_processes": ["main", "content"],
|
||||
"alert_emails": ["luke@mozilla.com", "bbouvier@mozilla.com"],
|
||||
"bug_numbers": [1288778],
|
||||
"expires_in_version": "60",
|
||||
"kind": "enumerated",
|
||||
"n_values": 4,
|
||||
"description": "Counts the number of asm.js vs WebAssembly modules instanciations, at the time modules are getting instanciated."
|
||||
},
|
||||
"TIME_TO_FIRST_CLICK_MS": {
|
||||
"record_in_processes": ["main", "content"],
|
||||
"alert_emails": ["hkirschner@mozilla.com"],
|
||||
|
Loading…
Reference in New Issue
Block a user