mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-07-27 04:25:12 +00:00
Added profiling (will be removed)
This commit is contained in:
parent
0093f00b18
commit
ec391a4739
@ -7,6 +7,7 @@
|
|||||||
#include <deque>
|
#include <deque>
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include "common/debug.h"
|
||||||
#include "common/types.h"
|
#include "common/types.h"
|
||||||
#include "video_core/buffer_cache/word_manager.h"
|
#include "video_core/buffer_cache/word_manager.h"
|
||||||
|
|
||||||
@ -85,6 +86,7 @@ private:
|
|||||||
*/
|
*/
|
||||||
template <bool create_region_on_fail, typename Func>
|
template <bool create_region_on_fail, typename Func>
|
||||||
bool IteratePages(VAddr cpu_address, size_t size, Func&& func) {
|
bool IteratePages(VAddr cpu_address, size_t size, Func&& func) {
|
||||||
|
RENDERER_TRACE;
|
||||||
using FuncReturn = typename std::invoke_result<Func, RegionManager*, u64, size_t>::type;
|
using FuncReturn = typename std::invoke_result<Func, RegionManager*, u64, size_t>::type;
|
||||||
static constexpr bool BOOL_BREAK = std::is_same_v<FuncReturn, bool>;
|
static constexpr bool BOOL_BREAK = std::is_same_v<FuncReturn, bool>;
|
||||||
std::size_t remaining_size{size};
|
std::size_t remaining_size{size};
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
#else
|
#else
|
||||||
#include "common/spin_lock.h"
|
#include "common/spin_lock.h"
|
||||||
#endif
|
#endif
|
||||||
|
#include "common/debug.h"
|
||||||
#include "common/types.h"
|
#include "common/types.h"
|
||||||
#include "video_core/page_manager.h"
|
#include "video_core/page_manager.h"
|
||||||
|
|
||||||
@ -74,6 +75,7 @@ public:
|
|||||||
|
|
||||||
template <typename Func>
|
template <typename Func>
|
||||||
void IterateWords(size_t offset, size_t size, Func&& func) const {
|
void IterateWords(size_t offset, size_t size, Func&& func) const {
|
||||||
|
RENDERER_TRACE;
|
||||||
using FuncReturn = std::invoke_result_t<Func, std::size_t, u64>;
|
using FuncReturn = std::invoke_result_t<Func, std::size_t, u64>;
|
||||||
static constexpr bool BOOL_BREAK = std::is_same_v<FuncReturn, bool>;
|
static constexpr bool BOOL_BREAK = std::is_same_v<FuncReturn, bool>;
|
||||||
const size_t start = static_cast<size_t>(std::max<s64>(static_cast<s64>(offset), 0LL));
|
const size_t start = static_cast<size_t>(std::max<s64>(static_cast<s64>(offset), 0LL));
|
||||||
@ -106,6 +108,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void IteratePages(u64 mask, auto&& func) const {
|
void IteratePages(u64 mask, auto&& func) const {
|
||||||
|
RENDERER_TRACE;
|
||||||
size_t offset = 0;
|
size_t offset = 0;
|
||||||
while (mask != 0) {
|
while (mask != 0) {
|
||||||
const size_t empty_bits = std::countr_zero(mask);
|
const size_t empty_bits = std::countr_zero(mask);
|
||||||
@ -157,6 +160,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
template <Type type, bool clear>
|
template <Type type, bool clear>
|
||||||
void ForEachModifiedRange(VAddr query_cpu_range, s64 size, auto&& func) {
|
void ForEachModifiedRange(VAddr query_cpu_range, s64 size, auto&& func) {
|
||||||
|
RENDERER_TRACE;
|
||||||
std::scoped_lock lk{lock};
|
std::scoped_lock lk{lock};
|
||||||
static_assert(type != Type::Untracked);
|
static_assert(type != Type::Untracked);
|
||||||
|
|
||||||
@ -170,6 +174,7 @@ public:
|
|||||||
(pending_pointer - pending_offset) * BYTES_PER_PAGE);
|
(pending_pointer - pending_offset) * BYTES_PER_PAGE);
|
||||||
};
|
};
|
||||||
IterateWords(offset, size, [&](size_t index, u64 mask) {
|
IterateWords(offset, size, [&](size_t index, u64 mask) {
|
||||||
|
RENDERER_TRACE;
|
||||||
if constexpr (type == Type::GPU) {
|
if constexpr (type == Type::GPU) {
|
||||||
mask &= ~untracked[index];
|
mask &= ~untracked[index];
|
||||||
}
|
}
|
||||||
@ -183,6 +188,7 @@ public:
|
|||||||
}
|
}
|
||||||
const size_t base_offset = index * PAGES_PER_WORD;
|
const size_t base_offset = index * PAGES_PER_WORD;
|
||||||
IteratePages(word, [&](size_t pages_offset, size_t pages_size) {
|
IteratePages(word, [&](size_t pages_offset, size_t pages_size) {
|
||||||
|
RENDERER_TRACE;
|
||||||
const auto reset = [&]() {
|
const auto reset = [&]() {
|
||||||
pending_offset = base_offset + pages_offset;
|
pending_offset = base_offset + pages_offset;
|
||||||
pending_pointer = base_offset + pages_offset + pages_size;
|
pending_pointer = base_offset + pages_offset + pages_size;
|
||||||
@ -243,6 +249,7 @@ private:
|
|||||||
*/
|
*/
|
||||||
template <bool add_to_tracker>
|
template <bool add_to_tracker>
|
||||||
void UpdateProtection(u64 word_index, u64 current_bits, u64 new_bits) const {
|
void UpdateProtection(u64 word_index, u64 current_bits, u64 new_bits) const {
|
||||||
|
RENDERER_TRACE;
|
||||||
constexpr s32 delta = add_to_tracker ? 1 : -1;
|
constexpr s32 delta = add_to_tracker ? 1 : -1;
|
||||||
u64 changed_bits = (add_to_tracker ? current_bits : ~current_bits) & new_bits;
|
u64 changed_bits = (add_to_tracker ? current_bits : ~current_bits) & new_bits;
|
||||||
VAddr addr = cpu_addr + word_index * BYTES_PER_WORD;
|
VAddr addr = cpu_addr + word_index * BYTES_PER_WORD;
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include <boost/container/small_vector.hpp>
|
#include <boost/container/small_vector.hpp>
|
||||||
#include "common/assert.h"
|
#include "common/assert.h"
|
||||||
|
#include "common/debug.h"
|
||||||
#include "common/signal_context.h"
|
#include "common/signal_context.h"
|
||||||
#include "core/memory.h"
|
#include "core/memory.h"
|
||||||
#include "core/signals.h"
|
#include "core/signals.h"
|
||||||
@ -174,6 +175,7 @@ struct PageManager::Impl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Protect(VAddr address, size_t size, Core::MemoryPermission perms) {
|
void Protect(VAddr address, size_t size, Core::MemoryPermission perms) {
|
||||||
|
RENDERER_TRACE;
|
||||||
auto* memory = Core::Memory::Instance();
|
auto* memory = Core::Memory::Instance();
|
||||||
auto& impl = memory->GetAddressSpace();
|
auto& impl = memory->GetAddressSpace();
|
||||||
impl.Protect(address, size, perms);
|
impl.Protect(address, size, perms);
|
||||||
@ -190,6 +192,7 @@ struct PageManager::Impl {
|
|||||||
#endif
|
#endif
|
||||||
template <s32 delta>
|
template <s32 delta>
|
||||||
void UpdatePageWatchers(VAddr addr, u64 size) {
|
void UpdatePageWatchers(VAddr addr, u64 size) {
|
||||||
|
RENDERER_TRACE;
|
||||||
boost::container::small_vector<UpdateProtectRange, 16> update_ranges;
|
boost::container::small_vector<UpdateProtectRange, 16> update_ranges;
|
||||||
{
|
{
|
||||||
std::scoped_lock lk(lock);
|
std::scoped_lock lk(lock);
|
||||||
@ -201,6 +204,7 @@ struct PageManager::Impl {
|
|||||||
|
|
||||||
const auto release_pending = [&] {
|
const auto release_pending = [&] {
|
||||||
if (range_bytes > 0) {
|
if (range_bytes > 0) {
|
||||||
|
RENDERER_TRACE;
|
||||||
// Add pending (un)protect action
|
// Add pending (un)protect action
|
||||||
update_ranges.push_back({range_begin << PAGE_BITS, range_bytes, perms});
|
update_ranges.push_back({range_begin << PAGE_BITS, range_bytes, perms});
|
||||||
range_bytes = 0;
|
range_bytes = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user