Files
UnrealEngine/Engine/Source/Developer/TraceServices/Private/Model/DefinitionProvider.h
2025-05-18 13:04:45 +08:00

45 lines
1.2 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Containers/Map.h"
#include "HAL/CriticalSection.h"
#include "Misc/ScopeRWLock.h"
#include "Templates/UniquePtr.h"
#include "Trace/Analyzer.h"
#include "TraceServices/Model/Definitions.h"
namespace TraceServices
{
class FDefinitionProvider : public IDefinitionProvider
{
public:
FDefinitionProvider(IAnalysisSession* InSession);
virtual ~FDefinitionProvider();
virtual void BeginRead() const override { Lock.ReadLock(); }
virtual void EndRead() const override { Lock.ReadUnlock(); }
virtual void ReadAccessCheck() const override { }
virtual void BeginEdit() const override { Lock.WriteLock(); }
virtual void EndEdit() const override { Lock.WriteUnlock(); }
virtual void EditAccessCheck() const override { }
private:
virtual void AddEntry(uint64 Hash, const void* Ptr) override;
virtual const void* FindEntry(uint64 Hash) const override;
virtual void* Allocate(uint32 Size, uint32 Alignment) override;
private:
mutable FRWLock Lock;
TArray<uint8*> Pages;
static constexpr uint32 PageSize = 1024;
uint32 PageRemain;
TMap<uint64, const void*> Definitions;
};
} // namespace TraceServices