mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-26 09:07:30 +09:00
parent
10e41a57b5
commit
53acd97766
2 changed files with 32 additions and 2 deletions
|
|
@ -112,7 +112,8 @@ nsNodeInfoManager::nsNodeInfoManager()
|
||||||
mNonDocumentNodeInfos(0),
|
mNonDocumentNodeInfos(0),
|
||||||
mTextNodeInfo(nullptr),
|
mTextNodeInfo(nullptr),
|
||||||
mCommentNodeInfo(nullptr),
|
mCommentNodeInfo(nullptr),
|
||||||
mDocumentNodeInfo(nullptr)
|
mDocumentNodeInfo(nullptr),
|
||||||
|
mRecentlyUsedNodeInfos{}
|
||||||
{
|
{
|
||||||
nsLayoutStatics::AddRef();
|
nsLayoutStatics::AddRef();
|
||||||
|
|
||||||
|
|
@ -232,11 +233,19 @@ nsNodeInfoManager::GetNodeInfo(nsIAtom *aName, nsIAtom *aPrefix,
|
||||||
NodeInfo::NodeInfoInner tmpKey(aName, aPrefix, aNamespaceID, aNodeType,
|
NodeInfo::NodeInfoInner tmpKey(aName, aPrefix, aNamespaceID, aNodeType,
|
||||||
aExtraName);
|
aExtraName);
|
||||||
|
|
||||||
|
uint32_t index =
|
||||||
|
GetNodeInfoInnerHashValue(&tmpKey) % RECENTLY_USED_NODEINFOS_SIZE;
|
||||||
|
NodeInfo* ni = mRecentlyUsedNodeInfos[index];
|
||||||
|
if (ni && NodeInfoInnerKeyCompare(&(ni->mInner), &tmpKey)) {
|
||||||
|
RefPtr<NodeInfo> nodeInfo = ni;
|
||||||
|
return nodeInfo.forget();
|
||||||
|
}
|
||||||
|
|
||||||
void *node = PL_HashTableLookup(mNodeInfoHash, &tmpKey);
|
void *node = PL_HashTableLookup(mNodeInfoHash, &tmpKey);
|
||||||
|
|
||||||
if (node) {
|
if (node) {
|
||||||
RefPtr<NodeInfo> nodeInfo = static_cast<NodeInfo*>(node);
|
RefPtr<NodeInfo> nodeInfo = static_cast<NodeInfo*>(node);
|
||||||
|
mRecentlyUsedNodeInfos[index] = nodeInfo;
|
||||||
return nodeInfo.forget();
|
return nodeInfo.forget();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -254,6 +263,7 @@ nsNodeInfoManager::GetNodeInfo(nsIAtom *aName, nsIAtom *aPrefix,
|
||||||
NS_IF_ADDREF(mDocument);
|
NS_IF_ADDREF(mDocument);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mRecentlyUsedNodeInfos[index] = newNodeInfo;
|
||||||
return newNodeInfo.forget();
|
return newNodeInfo.forget();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -272,10 +282,20 @@ nsNodeInfoManager::GetNodeInfo(const nsAString& aName, nsIAtom *aPrefix,
|
||||||
|
|
||||||
NodeInfo::NodeInfoInner tmpKey(aName, aPrefix, aNamespaceID, aNodeType);
|
NodeInfo::NodeInfoInner tmpKey(aName, aPrefix, aNamespaceID, aNodeType);
|
||||||
|
|
||||||
|
uint32_t index =
|
||||||
|
GetNodeInfoInnerHashValue(&tmpKey) % RECENTLY_USED_NODEINFOS_SIZE;
|
||||||
|
NodeInfo* ni = mRecentlyUsedNodeInfos[index];
|
||||||
|
if (ni && NodeInfoInnerKeyCompare(&(ni->mInner), &tmpKey)) {
|
||||||
|
RefPtr<NodeInfo> nodeInfo = ni;
|
||||||
|
nodeInfo.forget(aNodeInfo);
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
void *node = PL_HashTableLookup(mNodeInfoHash, &tmpKey);
|
void *node = PL_HashTableLookup(mNodeInfoHash, &tmpKey);
|
||||||
|
|
||||||
if (node) {
|
if (node) {
|
||||||
RefPtr<NodeInfo> nodeInfo = static_cast<NodeInfo*>(node);
|
RefPtr<NodeInfo> nodeInfo = static_cast<NodeInfo*>(node);
|
||||||
|
mRecentlyUsedNodeInfos[index] = nodeInfo;
|
||||||
nodeInfo.forget(aNodeInfo);
|
nodeInfo.forget(aNodeInfo);
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
|
@ -297,6 +317,7 @@ nsNodeInfoManager::GetNodeInfo(const nsAString& aName, nsIAtom *aPrefix,
|
||||||
NS_IF_ADDREF(mDocument);
|
NS_IF_ADDREF(mDocument);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mRecentlyUsedNodeInfos[index] = newNodeInfo;
|
||||||
newNodeInfo.forget(aNodeInfo);
|
newNodeInfo.forget(aNodeInfo);
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
|
@ -421,6 +442,12 @@ nsNodeInfoManager::RemoveNodeInfo(NodeInfo *aNodeInfo)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t index =
|
||||||
|
GetNodeInfoInnerHashValue(&aNodeInfo->mInner) % RECENTLY_USED_NODEINFOS_SIZE;
|
||||||
|
if (mRecentlyUsedNodeInfos[index] == aNodeInfo) {
|
||||||
|
mRecentlyUsedNodeInfos[index] = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
bool ret =
|
bool ret =
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,8 @@ class NodeInfo;
|
||||||
} // namespace dom
|
} // namespace dom
|
||||||
} // namespace mozilla
|
} // namespace mozilla
|
||||||
|
|
||||||
|
#define RECENTLY_USED_NODEINFOS_SIZE 31
|
||||||
|
|
||||||
class nsNodeInfoManager final
|
class nsNodeInfoManager final
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
|
@ -137,6 +139,7 @@ private:
|
||||||
mozilla::dom::NodeInfo * MOZ_NON_OWNING_REF mCommentNodeInfo; // WEAK to avoid circular ownership
|
mozilla::dom::NodeInfo * MOZ_NON_OWNING_REF mCommentNodeInfo; // WEAK to avoid circular ownership
|
||||||
mozilla::dom::NodeInfo * MOZ_NON_OWNING_REF mDocumentNodeInfo; // WEAK to avoid circular ownership
|
mozilla::dom::NodeInfo * MOZ_NON_OWNING_REF mDocumentNodeInfo; // WEAK to avoid circular ownership
|
||||||
RefPtr<nsBindingManager> mBindingManager;
|
RefPtr<nsBindingManager> mBindingManager;
|
||||||
|
mozilla::dom::NodeInfo* mRecentlyUsedNodeInfos[RECENTLY_USED_NODEINFOS_SIZE];
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* nsNodeInfoManager_h___ */
|
#endif /* nsNodeInfoManager_h___ */
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue