diff options
| author | 2015-04-14 15:22:09 -0300 | |
|---|---|---|
| committer | 2015-04-14 15:34:28 -0300 | |
| commit | ad3e25b414a348beaf315bf549c8b533d50d96f4 (patch) | |
| tree | e2963c00f7e0b10f06b95d015a3850a363aeaafc /src/core/hle/service/service.cpp | |
| parent | Merge pull request #683 from bunnei/thread-priority (diff) | |
| download | yuzu-ad3e25b414a348beaf315bf549c8b533d50d96f4.tar.gz yuzu-ad3e25b414a348beaf315bf549c8b533d50d96f4.tar.xz yuzu-ad3e25b414a348beaf315bf549c8b533d50d96f4.zip | |
De-inline functions from Interface, removing them from service.h
This reduces the time for a full recompile from 65.43s to 59.53s (~9%)
Diffstat (limited to 'src/core/hle/service/service.cpp')
| -rw-r--r-- | src/core/hle/service/service.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/core/hle/service/service.cpp b/src/core/hle/service/service.cpp index 134ff1740..d50327cb9 100644 --- a/src/core/hle/service/service.cpp +++ b/src/core/hle/service/service.cpp | |||
| @@ -51,6 +51,49 @@ namespace Service { | |||
| 51 | std::unordered_map<std::string, Kernel::SharedPtr<Interface>> g_kernel_named_ports; | 51 | std::unordered_map<std::string, Kernel::SharedPtr<Interface>> g_kernel_named_ports; |
| 52 | std::unordered_map<std::string, Kernel::SharedPtr<Interface>> g_srv_services; | 52 | std::unordered_map<std::string, Kernel::SharedPtr<Interface>> g_srv_services; |
| 53 | 53 | ||
| 54 | /** | ||
| 55 | * Creates a function string for logging, complete with the name (or header code, depending | ||
| 56 | * on what's passed in) the port name, and all the cmd_buff arguments. | ||
| 57 | */ | ||
| 58 | static std::string MakeFunctionString(const char* name, const char* port_name, const u32* cmd_buff) { | ||
| 59 | // Number of params == bits 0-5 + bits 6-11 | ||
| 60 | int num_params = (cmd_buff[0] & 0x3F) + ((cmd_buff[0] >> 6) & 0x3F); | ||
| 61 | |||
| 62 | std::string function_string = Common::StringFromFormat("function '%s': port=%s", name, port_name); | ||
| 63 | for (int i = 1; i <= num_params; ++i) { | ||
| 64 | function_string += Common::StringFromFormat(", cmd_buff[%i]=%u", i, cmd_buff[i]); | ||
| 65 | } | ||
| 66 | return function_string; | ||
| 67 | } | ||
| 68 | |||
| 69 | ResultVal<bool> Interface::SyncRequest() { | ||
| 70 | u32* cmd_buff = Kernel::GetCommandBuffer(); | ||
| 71 | auto itr = m_functions.find(cmd_buff[0]); | ||
| 72 | |||
| 73 | if (itr == m_functions.end() || itr->second.func == nullptr) { | ||
| 74 | std::string function_name = (itr == m_functions.end()) ? Common::StringFromFormat("0x%08X", cmd_buff[0]) : itr->second.name; | ||
| 75 | LOG_ERROR(Service, "unknown / unimplemented %s", MakeFunctionString(function_name.c_str(), GetPortName().c_str(), cmd_buff).c_str()); | ||
| 76 | |||
| 77 | // TODO(bunnei): Hack - ignore error | ||
| 78 | cmd_buff[1] = 0; | ||
| 79 | return MakeResult<bool>(false); | ||
| 80 | } else { | ||
| 81 | LOG_TRACE(Service, "%s", MakeFunctionString(itr->second.name, GetPortName().c_str(), cmd_buff).c_str()); | ||
| 82 | } | ||
| 83 | |||
| 84 | itr->second.func(this); | ||
| 85 | |||
| 86 | return MakeResult<bool>(false); // TODO: Implement return from actual function | ||
| 87 | } | ||
| 88 | |||
| 89 | void Interface::Register(const FunctionInfo* functions, size_t n) { | ||
| 90 | m_functions.reserve(n); | ||
| 91 | for (size_t i = 0; i < n; ++i) { | ||
| 92 | // Usually this array is sorted by id already, so hint to instead at the end | ||
| 93 | m_functions.emplace_hint(m_functions.cend(), functions[i].id, functions[i]); | ||
| 94 | } | ||
| 95 | } | ||
| 96 | |||
| 54 | //////////////////////////////////////////////////////////////////////////////////////////////////// | 97 | //////////////////////////////////////////////////////////////////////////////////////////////////// |
| 55 | // Module interface | 98 | // Module interface |
| 56 | 99 | ||