Skip to content

Commit b03c652

Browse files
committed
Remove CDvdFile threading, now redundant with nod-rs
1 parent 3a50f29 commit b03c652

File tree

2 files changed

+7
-112
lines changed

2 files changed

+7
-112
lines changed

Runtime/CDvdFile.cpp

Lines changed: 6 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -99,50 +99,29 @@ class CFileDvdRequest : public IDvdRequest {
9999
ESeekOrigin m_whence;
100100
int m_offset;
101101

102-
#ifdef HAS_DVD_THREAD
103-
std::atomic_bool m_cancel = {false};
104-
std::atomic_bool m_complete = {false};
105-
#else
102+
106103
bool m_cancel = false;
107104
bool m_complete = false;
108-
#endif
105+
109106
std::function<void(u32)> m_callback;
110107

111108
public:
112109
~CFileDvdRequest() override { CFileDvdRequest::PostCancelRequest(); }
113110

114111
void WaitUntilComplete() override {
115-
#ifdef HAS_DVD_THREAD
116-
while (!m_complete.load() && !m_cancel.load()) {
117-
std::unique_lock lk{CDvdFile::m_WaitMutex};
118-
}
119-
#else
112+
120113
if (!m_complete && !m_cancel) {
121114
CDvdFile::DoWork();
122115
}
123-
#endif
124116
}
125117
bool IsComplete() override {
126-
#ifdef HAS_DVD_THREAD
127-
return m_complete.load();
128-
#else
118+
129119
if (!m_complete) {
130120
CDvdFile::DoWork();
131121
}
132122
return m_complete;
133-
#endif
134-
}
135-
void PostCancelRequest() override {
136-
#ifdef HAS_DVD_THREAD
137-
if (m_complete.load() || m_cancel.load()) {
138-
return;
139-
}
140-
std::unique_lock waitlk{CDvdFile::m_WaitMutex};
141-
m_cancel.store(true);
142-
#else
143-
m_cancel = true;
144-
#endif
145123
}
124+
void PostCancelRequest() override { m_cancel = true; }
146125

147126
[[nodiscard]] EMediaType GetMediaType() const override { return EMediaType::File; }
148127

@@ -157,22 +136,13 @@ class CFileDvdRequest : public IDvdRequest {
157136
, m_callback(std::move(cb)) {}
158137

159138
void DoRequest() {
160-
#ifdef HAS_DVD_THREAD
161-
if (m_cancel.load()) {
162-
return;
163-
}
164-
#else
165139
if (m_cancel) {
166140
return;
167141
}
168-
#endif
169142

170143
if (!m_reader) {
171-
#ifdef HAS_DVD_THREAD
172-
m_complete.store(true);
173-
#else
144+
174145
m_complete = true;
175-
#endif
176146
if (m_callback) {
177147
m_callback(0);
178148
}
@@ -209,21 +179,10 @@ class CFileDvdRequest : public IDvdRequest {
209179
if (m_callback) {
210180
m_callback(readLen);
211181
}
212-
#ifdef HAS_DVD_THREAD
213-
m_complete.store(true);
214-
#else
215182
m_complete = true;
216-
#endif
217183
}
218184
};
219185

220-
#ifdef HAS_DVD_THREAD
221-
std::thread CDvdFile::m_WorkerThread;
222-
std::mutex CDvdFile::m_WorkerMutex;
223-
std::condition_variable CDvdFile::m_WorkerCV;
224-
std::mutex CDvdFile::m_WaitMutex;
225-
std::atomic_bool CDvdFile::m_WorkerRun = {false};
226-
#endif
227186
std::vector<std::shared_ptr<IDvdRequest>> CDvdFile::m_RequestQueue;
228187
std::string CDvdFile::m_rootDirectory;
229188
std::unique_ptr<u8[]> CDvdFile::m_dolBuf;
@@ -252,44 +211,10 @@ void CDvdFile::DoWork() {
252211
m_RequestQueue.clear();
253212
}
254213

255-
void CDvdFile::WorkerProc() {
256-
#ifdef HAS_DVD_THREAD
257-
// OPTICK_THREAD("CDvdFile");
258-
259-
while (m_WorkerRun.load()) {
260-
std::unique_lock lk{m_WorkerMutex};
261-
while (!m_RequestQueue.empty()) {
262-
std::vector<std::shared_ptr<IDvdRequest>> swapQueue;
263-
swapQueue.swap(m_RequestQueue);
264-
lk.unlock();
265-
std::unique_lock waitlk{m_WaitMutex};
266-
for (std::shared_ptr<IDvdRequest>& req : swapQueue) {
267-
auto& concreteReq = static_cast<CFileDvdRequest&>(*req);
268-
concreteReq.DoRequest();
269-
}
270-
waitlk.unlock();
271-
swapQueue.clear();
272-
lk.lock();
273-
}
274-
if (!m_WorkerRun.load()) {
275-
break;
276-
}
277-
m_WorkerCV.wait(lk);
278-
}
279-
#endif
280-
}
281-
282214
std::shared_ptr<IDvdRequest> CDvdFile::AsyncSeekRead(void* buf, u32 len, ESeekOrigin whence, int off,
283215
std::function<void(u32)>&& cb) {
284216
std::shared_ptr<IDvdRequest> ret = std::make_shared<CFileDvdRequest>(*this, buf, len, whence, off, std::move(cb));
285-
#ifdef HAS_DVD_THREAD
286-
std::unique_lock lk{m_WorkerMutex};
287-
#endif
288217
m_RequestQueue.emplace_back(ret);
289-
#ifdef HAS_DVD_THREAD
290-
lk.unlock();
291-
m_WorkerCV.notify_one();
292-
#endif
293218
return ret;
294219
}
295220

@@ -443,12 +368,6 @@ bool CDvdFile::LoadDolBuf() {
443368
}
444369

445370
bool CDvdFile::Initialize(const std::string_view& path) {
446-
#ifdef HAS_DVD_THREAD
447-
if (m_WorkerRun.load()) {
448-
return true;
449-
}
450-
#endif
451-
452371
Shutdown();
453372

454373
std::string pathStr(path);
@@ -494,23 +413,10 @@ bool CDvdFile::Initialize(const std::string_view& path) {
494413
return false;
495414
}
496415

497-
#ifdef HAS_DVD_THREAD
498-
m_WorkerRun.store(true);
499-
m_WorkerThread = std::thread(WorkerProc);
500-
#endif
501416
return true;
502417
}
503418

504419
void CDvdFile::Shutdown() {
505-
#ifdef HAS_DVD_THREAD
506-
if (m_WorkerRun.load()) {
507-
m_WorkerRun.store(false);
508-
m_WorkerCV.notify_one();
509-
if (m_WorkerThread.joinable()) {
510-
m_WorkerThread.join();
511-
}
512-
}
513-
#endif
514420
m_RequestQueue.clear();
515421
m_FileEntries.clear();
516422
m_dolBuf.reset();

Runtime/CDvdFile.hpp

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,6 @@
1818

1919
#include <nod.h>
2020

21-
#ifndef EMSCRIPTEN
22-
#define HAS_DVD_THREAD
23-
#endif
24-
2521
namespace metaforce {
2622

2723
enum class ESeekOrigin { Begin = 0, Cur = 1, End = 2 };
@@ -47,18 +43,11 @@ class CDvdFile {
4743
static NodHandleUnique m_DvdRoot;
4844
static NodHandleUnique m_DataPartition;
4945
static std::unordered_map<std::string, SFileEntry> m_FileEntries;
50-
#ifdef HAS_DVD_THREAD
51-
static std::thread m_WorkerThread;
52-
static std::mutex m_WorkerMutex;
53-
static std::condition_variable m_WorkerCV;
54-
static std::mutex m_WaitMutex;
55-
static std::atomic_bool m_WorkerRun;
56-
#endif
46+
5747
static std::vector<std::shared_ptr<IDvdRequest>> m_RequestQueue;
5848
static std::string m_rootDirectory;
5949
static std::unique_ptr<u8[]> m_dolBuf;
6050
static size_t m_dolBufLen;
61-
static void WorkerProc();
6251

6352
std::string x18_path;
6453
std::shared_ptr<NodHandle> m_reader;

0 commit comments

Comments
 (0)