Browse Source

Explicitly instantiate constructors/destructors for Kernel objects

This should speed up compile times a bit, as well as enable more liberal
use of forward declarations. (Due to SharedPtr not trying to emit the
destructor anymore.)
Yuri Kunde Schlesner 11 năm trước cách đây
mục cha
commit
7725256f64

+ 1 - 0
src/core/CMakeLists.txt

@@ -26,6 +26,7 @@ set(SRCS
             hle/kernel/kernel.cpp
             hle/kernel/mutex.cpp
             hle/kernel/semaphore.cpp
+            hle/kernel/session.cpp
             hle/kernel/shared_memory.cpp
             hle/kernel/timer.cpp
             hle/kernel/thread.cpp

+ 3 - 0
src/core/hle/kernel/address_arbiter.cpp

@@ -15,6 +15,9 @@
 
 namespace Kernel {
 
+AddressArbiter::AddressArbiter() {}
+AddressArbiter::~AddressArbiter() {}
+
 ResultVal<SharedPtr<AddressArbiter>> AddressArbiter::Create(std::string name) {
     SharedPtr<AddressArbiter> address_arbiter(new AddressArbiter);
     // TOOD(yuriks): Don't create Handle (see Thread::Create())

+ 2 - 1
src/core/hle/kernel/address_arbiter.h

@@ -47,7 +47,8 @@ public:
     ResultCode ArbitrateAddress(ArbitrationType type, VAddr address, s32 value, u64 nanoseconds);
 
 private:
-    AddressArbiter() = default;
+    AddressArbiter();
+    ~AddressArbiter() override;
 };
 
 } // namespace FileSys

+ 3 - 0
src/core/hle/kernel/event.cpp

@@ -14,6 +14,9 @@
 
 namespace Kernel {
 
+Event::Event() {}
+Event::~Event() {}
+
 ResultVal<SharedPtr<Event>> Event::Create(ResetType reset_type, std::string name) {
     SharedPtr<Event> evt(new Event);
     // TOOD(yuriks): Don't create Handle (see Thread::Create())

+ 2 - 1
src/core/hle/kernel/event.h

@@ -39,7 +39,8 @@ public:
     void Clear();
 
 private:
-    Event() = default;
+    Event();
+    ~Event() override;
 };
 
 } // namespace

+ 3 - 0
src/core/hle/kernel/mutex.cpp

@@ -38,6 +38,9 @@ void ReleaseThreadMutexes(Thread* thread) {
     thread->held_mutexes.clear();
 }
 
+Mutex::Mutex() {}
+Mutex::~Mutex() {}
+
 ResultVal<SharedPtr<Mutex>> Mutex::Create(bool initial_locked, std::string name) {
     SharedPtr<Mutex> mutex(new Mutex);
     // TOOD(yuriks): Don't create Handle (see Thread::Create())

+ 2 - 1
src/core/hle/kernel/mutex.h

@@ -47,7 +47,8 @@ public:
     void Release();
 
 private:
-    Mutex() = default;
+    Mutex();
+    ~Mutex() override;
 };
 
 /**

+ 3 - 0
src/core/hle/kernel/semaphore.cpp

@@ -10,6 +10,9 @@
 
 namespace Kernel {
 
+Semaphore::Semaphore() {}
+Semaphore::~Semaphore() {}
+
 ResultVal<SharedPtr<Semaphore>> Semaphore::Create(s32 initial_count, s32 max_count,
         std::string name) {
 

+ 2 - 1
src/core/hle/kernel/semaphore.h

@@ -47,7 +47,8 @@ public:
     ResultVal<s32> Release(s32 release_count);
 
 private:
-    Semaphore() = default;
+    Semaphore();
+    ~Semaphore() override;
 };
 
 } // namespace

+ 13 - 0
src/core/hle/kernel/session.cpp

@@ -0,0 +1,13 @@
+// Copyright 2015 Citra Emulator Project
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#include "core/hle/kernel/session.h"
+#include "core/hle/kernel/thread.h"
+
+namespace Kernel {
+
+Session::Session() {}
+Session::~Session() {}
+
+}

+ 4 - 0
src/core/hle/kernel/session.h

@@ -5,6 +5,7 @@
 #pragma once
 
 #include "core/hle/kernel/kernel.h"
+#include "core/mem_map.h"
 
 namespace Kernel {
 
@@ -43,6 +44,9 @@ inline static u32* GetCommandBuffer(const int offset=0) {
  */
 class Session : public WaitObject {
 public:
+    Session();
+    ~Session() override;
+
     std::string GetTypeName() const override { return "Session"; }
 
     static const HandleType HANDLE_TYPE = HandleType::Session;

+ 3 - 0
src/core/hle/kernel/shared_memory.cpp

@@ -9,6 +9,9 @@
 
 namespace Kernel {
 
+SharedMemory::SharedMemory() {}
+SharedMemory::~SharedMemory() {}
+
 ResultVal<SharedPtr<SharedMemory>> SharedMemory::Create(std::string name) {
     SharedPtr<SharedMemory> shared_memory(new SharedMemory);
 

+ 2 - 1
src/core/hle/kernel/shared_memory.h

@@ -57,7 +57,8 @@ public:
     std::string name;                   ///< Name of shared memory object (optional)
 
 private:
-    SharedMemory() = default;
+    SharedMemory();
+    ~SharedMemory() override;
 };
 
 } // namespace

+ 2 - 2
src/core/hle/kernel/thread.cpp

@@ -40,8 +40,8 @@ static Thread* current_thread;
 static const u32 INITIAL_THREAD_ID = 1; ///< The first available thread id at startup
 static u32 next_thread_id; ///< The next available thread id
 
-Thread::Thread() {
-}
+Thread::Thread() {}
+Thread::~Thread() {}
 
 Thread* GetCurrentThread() {
     return current_thread;

+ 1 - 0
src/core/hle/kernel/thread.h

@@ -128,6 +128,7 @@ public:
 
 private:
     Thread();
+    ~Thread() override;
 
     /// Handle used as userdata to reference this object when inserting into the CoreTiming queue.
     Handle callback_handle;

+ 3 - 0
src/core/hle/kernel/timer.cpp

@@ -17,6 +17,9 @@ static int timer_callback_event_type = -1;
 //               us to simply use a pool index or similar.
 static Kernel::HandleTable timer_callback_handle_table;
 
+Timer::Timer() {}
+Timer::~Timer() {}
+
 ResultVal<SharedPtr<Timer>> Timer::Create(ResetType reset_type, std::string name) {
     SharedPtr<Timer> timer(new Timer);
     // TOOD(yuriks): Don't create Handle (see Thread::Create())

+ 2 - 1
src/core/hle/kernel/timer.h

@@ -49,7 +49,8 @@ public:
     void Clear();
 
 private:
-    Timer() = default;
+    Timer();
+    ~Timer() override;
 
     /// Handle used as userdata to reference this object when inserting into the CoreTiming queue.
     Handle callback_handle;