1
0
mirror of https://github.com/narzoul/DDrawCompat synced 2024-12-30 08:55:36 +01:00

Reduced release binary size

Some unnecessary debug related stuff is removed from the release build
to reduce the binary size (and maybe gain a slight performance boost).
This commit is contained in:
narzoul 2015-12-30 16:13:58 +01:00
parent b71a87baea
commit 9798237c0f
2 changed files with 25 additions and 9 deletions

View File

@ -59,18 +59,11 @@ private:
{ {
public: public:
template <typename MemberDataPtr, MemberDataPtr ptr> template <typename MemberDataPtr, MemberDataPtr ptr>
void visit(const std::string& vtableTypeName, const std::string& funcName) void visit()
{ {
s_funcNames[getKey<MemberDataPtr, ptr>()] = vtableTypeName + "::" + funcName;
if (!(s_compatVtable.*ptr)) if (!(s_compatVtable.*ptr))
{ {
#ifdef _DEBUG
s_threadSafeVtable.*ptr = getThreadSafeFuncPtr<MemberDataPtr, ptr>(s_compatVtable.*ptr);
hookMethod(reinterpret_cast<void*&>(s_origVtable.*ptr), s_threadSafeVtable.*ptr);
#else
s_threadSafeVtable.*ptr = s_origVtable.*ptr; s_threadSafeVtable.*ptr = s_origVtable.*ptr;
#endif
s_compatVtable.*ptr = s_origVtable.*ptr; s_compatVtable.*ptr = s_origVtable.*ptr;
} }
else else
@ -80,6 +73,20 @@ private:
} }
} }
template <typename MemberDataPtr, MemberDataPtr ptr>
void visitDebug(const std::string& vtableTypeName, const std::string& funcName)
{
s_funcNames[getKey<MemberDataPtr, ptr>()] = vtableTypeName + "::" + funcName;
s_threadSafeVtable.*ptr = getThreadSafeFuncPtr<MemberDataPtr, ptr>(s_compatVtable.*ptr);
hookMethod(reinterpret_cast<void*&>(s_origVtable.*ptr), s_threadSafeVtable.*ptr);
if (!(s_compatVtable.*ptr))
{
s_compatVtable.*ptr = s_origVtable.*ptr;
}
}
private: private:
template <typename Result, typename... Params> template <typename Result, typename... Params>
using FuncPtr = Result(STDMETHODCALLTYPE *)(Params...); using FuncPtr = Result(STDMETHODCALLTYPE *)(Params...);
@ -121,7 +128,9 @@ private:
static Result STDMETHODCALLTYPE threadSafeFunc(IntfPtr This, Params... params) static Result STDMETHODCALLTYPE threadSafeFunc(IntfPtr This, Params... params)
{ {
Compat::origProcs.AcquireDDThreadLock(); Compat::origProcs.AcquireDDThreadLock();
#ifdef _DEBUG
Compat::LogEnter(s_funcNames[getKey<MemberDataPtr, ptr>()].c_str(), This, params...); Compat::LogEnter(s_funcNames[getKey<MemberDataPtr, ptr>()].c_str(), This, params...);
#endif
Result result; Result result;
auto it = s_vtablePtrToCompatVtable.find(This->lpVtbl); auto it = s_vtablePtrToCompatVtable.find(This->lpVtbl);
@ -135,7 +144,9 @@ private:
result = (s_origVtable.*ptr)(This, params...); result = (s_origVtable.*ptr)(This, params...);
} }
#ifdef _DEBUG
Compat::LogLeave(s_funcNames[getKey<MemberDataPtr, ptr>()].c_str(), This, params...) << result; Compat::LogLeave(s_funcNames[getKey<MemberDataPtr, ptr>()].c_str(), This, params...) << result;
#endif
Compat::origProcs.ReleaseDDThreadLock(); Compat::origProcs.ReleaseDDThreadLock();
return result; return result;
} }

View File

@ -25,8 +25,13 @@ std::string getTypeName()
return typeName; return typeName;
} }
#ifdef _DEBUG
#define DD_VISIT(member) \ #define DD_VISIT(member) \
visitor.visit<decltype(&Vtable::member), &Vtable::member>(getTypeName<Vtable>(), #member) visitor.visitDebug<decltype(&Vtable::member), &Vtable::member>(getTypeName<Vtable>(), #member)
#else
#define DD_VISIT(member) \
visitor.visit<decltype(&Vtable::member), &Vtable::member>()
#endif
template <> template <>
struct DDrawVtableForEach<IUnknownVtbl> struct DDrawVtableForEach<IUnknownVtbl>