Jacek Caban : jscript: Optimize iface_to_jsdisp by using vtbl comparison.
Alexandre Julliard
julliard at winehq.org
Wed Jul 20 10:28:53 CDT 2016
Module: wine
Branch: master
Commit: 798ba715e398495fcd172d78196068e39f5b257b
URL: http://source.winehq.org/git/wine.git/?a=commit;h=798ba715e398495fcd172d78196068e39f5b257b
Author: Jacek Caban <jacek at codeweavers.com>
Date: Wed Jul 20 13:41:23 2016 +0200
jscript: Optimize iface_to_jsdisp by using vtbl comparison.
This is 14% win on SunSpider 0.9 benchmark.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/jscript/dispex.c | 23 +++--------------------
1 file changed, 3 insertions(+), 20 deletions(-)
diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c
index 93d74ba..538219e 100644
--- a/dlls/jscript/dispex.c
+++ b/dlls/jscript/dispex.c
@@ -25,13 +25,6 @@
WINE_DEFAULT_DEBUG_CHANNEL(jscript);
-/*
- * This IID is used to get jsdisp_t objecto from interface.
- * We might consider using private interface instead.
- */
-static const IID IID_IDispatchJS =
- {0x719c3050,0xf9d3,0x11cf,{0xa4,0x93,0x00,0x40,0x05,0x23,0xa8,0xa6}};
-
#define FDEX_VERSION_MASK 0xf0000000
#define GOLDEN_RATIO 0x9E3779B9U
@@ -565,11 +558,6 @@ static HRESULT WINAPI DispatchEx_QueryInterface(IDispatchEx *iface, REFIID riid,
}else if(IsEqualGUID(&IID_IDispatchEx, riid)) {
TRACE("(%p)->(IID_IDispatchEx %p)\n", This, ppv);
*ppv = &This->IDispatchEx_iface;
- }else if(IsEqualGUID(&IID_IDispatchJS, riid)) {
- TRACE("(%p)->(IID_IDispatchJS %p)\n", This, ppv);
- jsdisp_addref(This);
- *ppv = This;
- return S_OK;
}else {
WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
*ppv = NULL;
@@ -1027,14 +1015,9 @@ HRESULT init_dispex_from_constr(jsdisp_t *dispex, script_ctx_t *ctx, const built
jsdisp_t *iface_to_jsdisp(IDispatch *iface)
{
- jsdisp_t *ret;
- HRESULT hres;
-
- hres = IDispatch_QueryInterface(iface, &IID_IDispatchJS, (void**)&ret);
- if(FAILED(hres))
- return NULL;
-
- return ret;
+ return iface->lpVtbl == (const IDispatchVtbl*)&DispatchExVtbl
+ ? jsdisp_addref( impl_from_IDispatchEx((IDispatchEx*)iface))
+ : NULL;
}
HRESULT jsdisp_get_id(jsdisp_t *jsdisp, const WCHAR *name, DWORD flags, DISPID *id)
More information about the wine-cvs
mailing list