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:
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))
{
#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;
#endif
s_compatVtable.*ptr = s_origVtable.*ptr;
}
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:
template <typename Result, typename... Params>
using FuncPtr = Result(STDMETHODCALLTYPE *)(Params...);
@ -121,7 +128,9 @@ private:
static Result STDMETHODCALLTYPE threadSafeFunc(IntfPtr This, Params... params)
{
Compat::origProcs.AcquireDDThreadLock();
#ifdef _DEBUG
Compat::LogEnter(s_funcNames[getKey<MemberDataPtr, ptr>()].c_str(), This, params...);
#endif
Result result;
auto it = s_vtablePtrToCompatVtable.find(This->lpVtbl);
@ -135,7 +144,9 @@ private:
result = (s_origVtable.*ptr)(This, params...);
}
#ifdef _DEBUG
Compat::LogLeave(s_funcNames[getKey<MemberDataPtr, ptr>()].c_str(), This, params...) << result;
#endif
Compat::origProcs.ReleaseDDThreadLock();
return result;
}

View File

@ -25,8 +25,13 @@ std::string getTypeName()
return typeName;
}
#ifdef _DEBUG
#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 <>
struct DDrawVtableForEach<IUnknownVtbl>