3 changed files with 39 additions and 25 deletions
-
54src/core/hle/service/nvnflinger/buffer_history.h
-
8src/core/hle/service/nvnflinger/buffer_queue_producer.cpp
-
2src/core/hle/service/nvnflinger/buffer_queue_producer.h
@ -1,27 +1,37 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project |
|||
// SPDX-License-Identifier: GPL-3.0-or-later |
|||
|
|||
#pragma once |
|||
|
|||
#include <deque> |
|||
#include <mutex> |
|||
#include <common/assert.h> |
|||
|
|||
struct BufferHistoryEntry { s32 slot; s64 timestamp; s64 frame_number; }; |
|||
|
|||
class BufferHistoryManager { public: void PushEntry(s32 slot, s64 timestamp, s64 frame_number) { std::lock_guardstd::mutex lock(mutex_); if (entries_.size() >= kMaxHistorySize) entries_.pop_front(); |
|||
|
|||
entries_.emplace_back(BufferHistoryEntry{slot, timestamp, frame_number}); |
|||
} |
|||
|
|||
s32 GetHistory(std::span<BufferHistoryEntry> out_entries) { |
|||
std::lock_guard<std::mutex> lock(mutex_); |
|||
|
|||
s32 count = std::min(static_cast<s32>(entries_.size()), static_cast<s32>(out_entries.size())); |
|||
|
|||
for (s32 i = 0; i < count; ++i) |
|||
out_entries[i] = entries_[entries_.size() - count + i]; |
|||
|
|||
return count; |
|||
} |
|||
|
|||
private: static constexpr size_t kMaxHistorySize = 16; std::deque<BufferHistoryEntry> entries_; std::mutex mutex_; }; |
|||
struct BufferHistoryEntry { |
|||
s32 slot; |
|||
s64 timestamp; |
|||
s64 frame_number; |
|||
}; |
|||
|
|||
class BufferHistoryManager { |
|||
public: |
|||
void PushEntry(s32 slot, s64 timestamp, s64 frame_number) { |
|||
std::lock_guard<std::mutex> lock(mutex_); |
|||
if (entries_.size() >= kMaxHistorySize) { |
|||
entries_.pop_front(); |
|||
} |
|||
entries_.emplace_back(BufferHistoryEntry{slot, timestamp, frame_number}); |
|||
} |
|||
|
|||
s32 GetHistory(std::span<BufferHistoryEntry> out_entries) { |
|||
std::lock_guard<std::mutex> lock(mutex_); |
|||
s32 count = |
|||
std::min<s32>(static_cast<s32>(entries_.size()), static_cast<s32>(out_entries.size())); |
|||
for (s32 i = 0; i < count; ++i) { |
|||
out_entries[i] = entries_[entries_.size() - count + i]; |
|||
} |
|||
return count; |
|||
} |
|||
|
|||
private: |
|||
static constexpr size_t kMaxHistorySize = 16; |
|||
std::deque<BufferHistoryEntry> entries_; |
|||
std::mutex mutex_; |
|||
}; |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue