1
0
Fork 0
forked from suyu/suyu

query_cache: Address feedback

This commit is contained in:
ReinUsesLisp 2020-02-13 21:11:21 -03:00
parent 54a00ee4cf
commit 6d3a046caa
2 changed files with 18 additions and 16 deletions

View file

@ -62,7 +62,7 @@ public:
/// Returns true when the counter stream is enabled. /// Returns true when the counter stream is enabled.
bool IsEnabled() const { bool IsEnabled() const {
return static_cast<bool>(current); return current != nullptr;
} }
private: private:
@ -163,6 +163,11 @@ public:
return streams[static_cast<std::size_t>(type)]; return streams[static_cast<std::size_t>(type)];
} }
/// Returns the counter stream of the specified type.
const CounterStream& Stream(VideoCore::QueryType type) const {
return streams[static_cast<std::size_t>(type)];
}
protected: protected:
std::array<QueryPool, VideoCore::NumQueryTypes> query_pools; std::array<QueryPool, VideoCore::NumQueryTypes> query_pools;
@ -219,7 +224,7 @@ private:
} }
static constexpr std::uintptr_t PAGE_SIZE = 4096; static constexpr std::uintptr_t PAGE_SIZE = 4096;
static constexpr int PAGE_SHIFT = 12; static constexpr unsigned PAGE_SHIFT = 12;
Core::System& system; Core::System& system;
VideoCore::RasterizerInterface& rasterizer; VideoCore::RasterizerInterface& rasterizer;
@ -237,13 +242,14 @@ public:
explicit HostCounterBase(std::shared_ptr<HostCounter> dependency_) explicit HostCounterBase(std::shared_ptr<HostCounter> dependency_)
: dependency{std::move(dependency_)}, depth{dependency ? (dependency->Depth() + 1) : 0} { : dependency{std::move(dependency_)}, depth{dependency ? (dependency->Depth() + 1) : 0} {
// Avoid nesting too many dependencies to avoid a stack overflow when these are deleted. // Avoid nesting too many dependencies to avoid a stack overflow when these are deleted.
static constexpr u64 depth_threshold = 96; constexpr u64 depth_threshold = 96;
if (depth > depth_threshold) { if (depth > depth_threshold) {
depth = 0; depth = 0;
base_result = dependency->Query(); base_result = dependency->Query();
dependency = nullptr; dependency = nullptr;
} }
} }
virtual ~HostCounterBase() = default;
/// Returns the current value of the query. /// Returns the current value of the query.
u64 Query() { u64 Query() {
@ -257,7 +263,8 @@ public:
dependency = nullptr; dependency = nullptr;
} }
return *(result = value); result = value;
return *result;
} }
/// Returns true when flushing this query will potentially wait. /// Returns true when flushing this query will potentially wait.
@ -285,20 +292,13 @@ class CachedQueryBase {
public: public:
explicit CachedQueryBase(VAddr cpu_addr, u8* host_ptr) explicit CachedQueryBase(VAddr cpu_addr, u8* host_ptr)
: cpu_addr{cpu_addr}, host_ptr{host_ptr} {} : cpu_addr{cpu_addr}, host_ptr{host_ptr} {}
virtual ~CachedQueryBase() = default;
CachedQueryBase(CachedQueryBase&& rhs) noexcept CachedQueryBase(CachedQueryBase&&) noexcept = default;
: cpu_addr{rhs.cpu_addr}, host_ptr{rhs.host_ptr}, counter{std::move(rhs.counter)},
timestamp{rhs.timestamp} {}
CachedQueryBase(const CachedQueryBase&) = delete; CachedQueryBase(const CachedQueryBase&) = delete;
CachedQueryBase& operator=(CachedQueryBase&& rhs) noexcept { CachedQueryBase& operator=(CachedQueryBase&&) noexcept = default;
cpu_addr = rhs.cpu_addr; CachedQueryBase& operator=(const CachedQueryBase&) = delete;
host_ptr = rhs.host_ptr;
counter = std::move(rhs.counter);
timestamp = rhs.timestamp;
return *this;
}
/// Flushes the query to guest memory. /// Flushes the query to guest memory.
virtual void Flush() { virtual void Flush() {
@ -335,7 +335,7 @@ public:
return SizeInBytes(timestamp.has_value()); return SizeInBytes(timestamp.has_value());
} }
static u64 SizeInBytes(bool with_timestamp) { static constexpr u64 SizeInBytes(bool with_timestamp) noexcept {
return with_timestamp ? LARGE_QUERY_SIZE : SMALL_QUERY_SIZE; return with_timestamp ? LARGE_QUERY_SIZE : SMALL_QUERY_SIZE;
} }

View file

@ -63,8 +63,10 @@ public:
explicit CachedQuery(QueryCache& cache, VideoCore::QueryType type, VAddr cpu_addr, explicit CachedQuery(QueryCache& cache, VideoCore::QueryType type, VAddr cpu_addr,
u8* host_ptr); u8* host_ptr);
CachedQuery(CachedQuery&& rhs) noexcept; CachedQuery(CachedQuery&& rhs) noexcept;
CachedQuery(const CachedQuery&) = delete;
CachedQuery& operator=(CachedQuery&& rhs) noexcept; CachedQuery& operator=(CachedQuery&& rhs) noexcept;
CachedQuery& operator=(const CachedQuery&) = delete;
void Flush() override; void Flush() override;