Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
7bba2546
Commit
7bba2546
authored
Aug 30, 2023
by
Gabriel Ivăncescu
Committed by
Alexandre Julliard
Aug 31, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mshtml: Move PerformanceTiming related fields to the window.
Signed-off-by:
Gabriel Ivăncescu
<
gabrielopcode@gmail.com
>
parent
15c7470a
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
123 additions
and
134 deletions
+123
-134
htmlwindow.c
dlls/mshtml/htmlwindow.c
+0
-8
mshtml_private.h
dlls/mshtml/mshtml_private.h
+17
-26
mutation.c
dlls/mshtml/mutation.c
+1
-1
navigate.c
dlls/mshtml/navigate.c
+10
-10
nsevents.c
dlls/mshtml/nsevents.c
+11
-14
omnavigator.c
dlls/mshtml/omnavigator.c
+82
-73
view.c
dlls/mshtml/view.c
+2
-2
No files found.
dlls/mshtml/htmlwindow.c
View file @
7bba2546
...
...
@@ -3913,7 +3913,6 @@ static void HTMLWindow_unlink(DispatchEx *dispex)
This
->
local_storage
=
NULL
;
IHTMLStorage_Release
(
local_storage
);
}
IHTMLPerformanceTiming_Release
(
&
This
->
performance_timing
->
IHTMLPerformanceTiming_iface
);
unlink_variant
(
&
This
->
performance
);
}
...
...
@@ -4313,19 +4312,12 @@ static void *alloc_window(size_t size)
static
HRESULT
create_inner_window
(
HTMLOuterWindow
*
outer_window
,
IMoniker
*
mon
,
HTMLInnerWindow
**
ret
)
{
HTMLInnerWindow
*
window
;
HRESULT
hres
;
window
=
alloc_window
(
sizeof
(
HTMLInnerWindow
));
if
(
!
window
)
return
E_OUTOFMEMORY
;
window
->
base
.
IHTMLWindow2_iface
.
lpVtbl
=
&
HTMLWindow2Vtbl
;
hres
=
create_performance_timing
(
&
window
->
performance_timing
);
if
(
FAILED
(
hres
))
{
free
(
window
);
return
hres
;
}
list_init
(
&
window
->
children
);
list_init
(
&
window
->
script_hosts
);
list_init
(
&
window
->
bindings
);
...
...
dlls/mshtml/mshtml_private.h
View file @
7bba2546
...
...
@@ -529,30 +529,6 @@ typedef struct {
HTMLInnerWindow
*
window
;
}
OmHistory
;
typedef
struct
{
DispatchEx
dispex
;
IHTMLPerformanceTiming
IHTMLPerformanceTiming_iface
;
LONG
ref
;
ULONGLONG
navigation_start_time
;
ULONGLONG
unload_event_start_time
;
ULONGLONG
unload_event_end_time
;
ULONGLONG
redirect_time
;
ULONGLONG
dns_lookup_time
;
ULONGLONG
connect_time
;
ULONGLONG
request_time
;
ULONGLONG
response_start_time
;
ULONGLONG
response_end_time
;
ULONGLONG
dom_interactive_time
;
ULONGLONG
dom_complete_time
;
ULONGLONG
dom_content_loaded_event_start_time
;
ULONGLONG
dom_content_loaded_event_end_time
;
ULONGLONG
load_event_start_time
;
ULONGLONG
load_event_end_time
;
ULONGLONG
first_paint_time
;
}
HTMLPerformanceTiming
;
typedef
struct
nsChannelBSC
nsChannelBSC
;
struct
HTMLWindow
{
...
...
@@ -628,7 +604,6 @@ struct HTMLInnerWindow {
BOOL
performance_initialized
;
VARIANT
performance
;
HTMLPerformanceTiming
*
performance_timing
;
unsigned
blocking_depth
;
unsigned
parser_callback_cnt
;
...
...
@@ -647,6 +622,23 @@ struct HTMLInnerWindow {
ULONG
navigation_type
;
ULONG
redirect_count
;
ULONGLONG
navigation_start_time
;
ULONGLONG
unload_event_start_time
;
ULONGLONG
unload_event_end_time
;
ULONGLONG
redirect_time
;
ULONGLONG
dns_lookup_time
;
ULONGLONG
connect_time
;
ULONGLONG
request_time
;
ULONGLONG
response_start_time
;
ULONGLONG
response_end_time
;
ULONGLONG
dom_interactive_time
;
ULONGLONG
dom_complete_time
;
ULONGLONG
dom_content_loaded_event_start_time
;
ULONGLONG
dom_content_loaded_event_end_time
;
ULONGLONG
load_event_start_time
;
ULONGLONG
load_event_end_time
;
ULONGLONG
first_paint_time
;
};
typedef
enum
{
...
...
@@ -1015,7 +1007,6 @@ HRESULT create_location(HTMLOuterWindow*,HTMLLocation**);
HRESULT
create_navigator
(
compat_mode_t
,
IOmNavigator
**
);
HRESULT
create_html_screen
(
compat_mode_t
,
IHTMLScreen
**
);
HRESULT
create_performance
(
HTMLInnerWindow
*
,
IHTMLPerformance
**
);
HRESULT
create_performance_timing
(
HTMLPerformanceTiming
**
);
HRESULT
create_history
(
HTMLInnerWindow
*
,
OmHistory
**
);
HRESULT
create_namespace_collection
(
compat_mode_t
,
IHTMLNamespaceCollection
**
);
HRESULT
create_dom_implementation
(
HTMLDocumentNode
*
,
IHTMLDOMImplementation
**
);
...
...
dlls/mshtml/mutation.c
View file @
7bba2546
...
...
@@ -313,7 +313,7 @@ static nsresult run_end_load(HTMLDocumentNode *This, nsISupports *arg1, nsISuppo
bind_event_scripts
(
This
);
if
(
This
->
window
==
window
)
{
window
->
performance_timing
->
dom_interactive_time
=
get_time_stamp
();
window
->
dom_interactive_time
=
get_time_stamp
();
set_ready_state
(
This
->
outer_window
,
READYSTATE_INTERACTIVE
);
}
IHTMLWindow2_Release
(
&
window
->
base
.
IHTMLWindow2_iface
);
...
...
dlls/mshtml/navigate.c
View file @
7bba2546
...
...
@@ -1095,7 +1095,7 @@ static HRESULT read_stream_data(nsChannelBSC *This, IStream *stream)
IWinInetHttpInfo
*
wininet_info
;
if
(
This
->
is_doc_channel
)
This
->
bsc
.
window
->
performance_timing
->
response_start_time
=
get_time_stamp
();
This
->
bsc
.
window
->
response_start_time
=
get_time_stamp
();
This
->
response_processed
=
TRUE
;
if
(
This
->
bsc
.
binding
)
{
...
...
@@ -1356,7 +1356,7 @@ static HRESULT nsChannelBSC_start_binding(BSCallback *bsc)
This
->
bsc
.
window
->
navigation_type
=
1
;
/* TYPE_RELOAD */
This
->
bsc
.
window
->
base
.
outer_window
->
base
.
inner_window
->
doc
->
skip_mutation_notif
=
FALSE
;
This
->
bsc
.
window
->
performance_timing
->
navigation_start_time
=
get_time_stamp
();
This
->
bsc
.
window
->
navigation_start_time
=
get_time_stamp
();
}
return
S_OK
;
...
...
@@ -1524,7 +1524,7 @@ static HRESULT nsChannelBSC_stop_binding(BSCallback *bsc, HRESULT result)
nsChannelBSC
*
This
=
nsChannelBSC_from_BSCallback
(
bsc
);
if
(
This
->
is_doc_channel
&&
This
->
bsc
.
window
)
{
This
->
bsc
.
window
->
performance_timing
->
response_end_time
=
get_time_stamp
();
This
->
bsc
.
window
->
response_end_time
=
get_time_stamp
();
if
(
result
!=
E_ABORT
)
{
if
(
FAILED
(
result
))
handle_navigation_error
(
This
,
result
);
...
...
@@ -1727,21 +1727,21 @@ static HRESULT nsChannelBSC_on_progress(BSCallback *bsc, ULONG progress, ULONG t
case
BINDSTATUS_REDIRECTING
:
if
(
This
->
is_doc_channel
)
{
This
->
bsc
.
window
->
redirect_count
++
;
if
(
!
This
->
bsc
.
window
->
performance_timing
->
redirect_time
)
This
->
bsc
.
window
->
performance_timing
->
redirect_time
=
get_time_stamp
();
if
(
!
This
->
bsc
.
window
->
redirect_time
)
This
->
bsc
.
window
->
redirect_time
=
get_time_stamp
();
}
return
handle_redirect
(
This
,
status_text
);
case
BINDSTATUS_FINDINGRESOURCE
:
if
(
This
->
is_doc_channel
&&
!
This
->
bsc
.
window
->
performance_timing
->
dns_lookup_time
)
This
->
bsc
.
window
->
performance_timing
->
dns_lookup_time
=
get_time_stamp
();
if
(
This
->
is_doc_channel
&&
!
This
->
bsc
.
window
->
dns_lookup_time
)
This
->
bsc
.
window
->
dns_lookup_time
=
get_time_stamp
();
break
;
case
BINDSTATUS_CONNECTING
:
if
(
This
->
is_doc_channel
)
This
->
bsc
.
window
->
performance_timing
->
connect_time
=
get_time_stamp
();
This
->
bsc
.
window
->
connect_time
=
get_time_stamp
();
break
;
case
BINDSTATUS_SENDINGREQUEST
:
if
(
This
->
is_doc_channel
)
This
->
bsc
.
window
->
performance_timing
->
request_time
=
get_time_stamp
();
This
->
bsc
.
window
->
request_time
=
get_time_stamp
();
break
;
case
BINDSTATUS_BEGINDOWNLOADDATA
:
{
IWinInetHttpInfo
*
http_info
;
...
...
@@ -1798,7 +1798,7 @@ static HRESULT nsChannelBSC_on_response(BSCallback *bsc, DWORD response_code,
HRESULT
hres
;
if
(
This
->
is_doc_channel
)
This
->
bsc
.
window
->
performance_timing
->
response_start_time
=
get_time_stamp
();
This
->
bsc
.
window
->
response_start_time
=
get_time_stamp
();
This
->
response_processed
=
TRUE
;
This
->
nschannel
->
response_status
=
response_code
;
...
...
dlls/mshtml/nsevents.c
View file @
7bba2546
...
...
@@ -238,7 +238,7 @@ static nsresult handle_dom_content_loaded(HTMLDocumentNode *doc, nsIDOMEvent *ns
HRESULT
hres
;
if
(
doc
->
window
)
doc
->
window
->
performance_timing
->
dom_content_loaded_event_start_time
=
get_time_stamp
();
doc
->
window
->
dom_content_loaded_event_start_time
=
get_time_stamp
();
hres
=
create_event_from_nsevent
(
nsevent
,
dispex_compat_mode
(
&
doc
->
node
.
event_target
.
dispex
),
&
event
);
if
(
SUCCEEDED
(
hres
))
{
...
...
@@ -247,7 +247,7 @@ static nsresult handle_dom_content_loaded(HTMLDocumentNode *doc, nsIDOMEvent *ns
}
if
(
doc
->
window
)
doc
->
window
->
performance_timing
->
dom_content_loaded_event_end_time
=
get_time_stamp
();
doc
->
window
->
dom_content_loaded_event_end_time
=
get_time_stamp
();
return
NS_OK
;
}
...
...
@@ -345,7 +345,7 @@ static nsresult handle_load(HTMLDocumentNode *doc, nsIDOMEvent *event)
if
(
doc_obj
)
handle_docobj_load
(
doc_obj
);
doc
->
window
->
performance_timing
->
dom_complete_time
=
get_time_stamp
();
doc
->
window
->
dom_complete_time
=
get_time_stamp
();
set_ready_state
(
doc
->
outer_window
,
READYSTATE_COMPLETE
);
if
(
doc_obj
)
{
...
...
@@ -363,7 +363,7 @@ static nsresult handle_load(HTMLDocumentNode *doc, nsIDOMEvent *event)
IUnknown_Release
(
doc_obj
->
outer_unk
);
}
doc
->
window
->
performance_timing
->
load_event_start_time
=
get_time_stamp
();
doc
->
window
->
load_event_start_time
=
get_time_stamp
();
if
(
doc
->
dom_document
)
{
hres
=
create_document_event
(
doc
,
EVENTID_LOAD
,
&
load_event
);
...
...
@@ -381,7 +381,7 @@ static nsresult handle_load(HTMLDocumentNode *doc, nsIDOMEvent *event)
IDOMEvent_Release
(
&
load_event
->
IDOMEvent_iface
);
}
doc
->
window
->
performance_timing
->
load_event_end_time
=
get_time_stamp
();
doc
->
window
->
load_event_end_time
=
get_time_stamp
();
return
NS_OK
;
}
...
...
@@ -406,8 +406,7 @@ static nsresult handle_beforeunload(HTMLDocumentNode *doc, nsIDOMEvent *nsevent)
static
nsresult
handle_unload
(
HTMLDocumentNode
*
doc
,
nsIDOMEvent
*
nsevent
)
{
HTMLPerformanceTiming
*
timing
=
NULL
;
HTMLInnerWindow
*
window
;
HTMLInnerWindow
*
window
,
*
pending_window
;
DOMEvent
*
event
;
HRESULT
hres
;
...
...
@@ -415,11 +414,9 @@ static nsresult handle_unload(HTMLDocumentNode *doc, nsIDOMEvent *nsevent)
return
NS_OK
;
doc
->
unload_sent
=
TRUE
;
if
(
window
->
base
.
outer_window
->
pending_window
)
timing
=
window
->
base
.
outer_window
->
pending_window
->
performance_timing
;
if
(
timing
)
timing
->
unload_event_start_time
=
get_time_stamp
();
pending_window
=
window
->
base
.
outer_window
->
pending_window
;
if
(
pending_window
)
pending_window
->
unload_event_start_time
=
get_time_stamp
();
hres
=
create_event_from_nsevent
(
nsevent
,
dispex_compat_mode
(
&
doc
->
node
.
event_target
.
dispex
),
&
event
);
if
(
SUCCEEDED
(
hres
))
{
...
...
@@ -427,8 +424,8 @@ static nsresult handle_unload(HTMLDocumentNode *doc, nsIDOMEvent *nsevent)
IDOMEvent_Release
(
&
event
->
IDOMEvent_iface
);
}
if
(
timing
)
timing
->
unload_event_end_time
=
get_time_stamp
();
if
(
pending_window
)
pending_window
->
unload_event_end_time
=
get_time_stamp
();
return
NS_OK
;
}
...
...
dlls/mshtml/omnavigator.c
View file @
7bba2546
...
...
@@ -1558,6 +1558,14 @@ HRESULT create_navigator(compat_mode_t compat_mode, IOmNavigator **navigator)
return
S_OK
;
}
typedef
struct
{
DispatchEx
dispex
;
IHTMLPerformanceTiming
IHTMLPerformanceTiming_iface
;
LONG
ref
;
HTMLInnerWindow
*
window
;
}
HTMLPerformanceTiming
;
static
inline
HTMLPerformanceTiming
*
impl_from_IHTMLPerformanceTiming
(
IHTMLPerformanceTiming
*
iface
)
{
return
CONTAINING_RECORD
(
iface
,
HTMLPerformanceTiming
,
IHTMLPerformanceTiming_iface
);
...
...
@@ -1602,12 +1610,8 @@ static ULONG WINAPI HTMLPerformanceTiming_Release(IHTMLPerformanceTiming *iface)
TRACE
(
"(%p) ref=%ld
\n
"
,
This
,
ref
);
if
(
!
ref
)
{
if
(
This
->
dispex
.
outer
)
release_dispex
(
&
This
->
dispex
);
else
free
(
This
);
}
if
(
!
ref
)
release_dispex
(
&
This
->
dispex
);
return
ref
;
}
...
...
@@ -1649,20 +1653,22 @@ static HRESULT WINAPI HTMLPerformanceTiming_Invoke(IHTMLPerformanceTiming *iface
static
ULONGLONG
get_fetch_time
(
HTMLPerformanceTiming
*
This
)
{
HTMLInnerWindow
*
window
=
This
->
window
;
/* If there's no prior doc unloaded and no redirects, fetch time == navigationStart time */
if
(
!
This
->
unload_event_end_time
&&
!
This
->
redirect_time
)
return
This
->
navigation_start_time
;
if
(
!
window
->
unload_event_end_time
&&
!
window
->
redirect_time
)
return
window
->
navigation_start_time
;
if
(
This
->
dns_lookup_time
)
return
This
->
dns_lookup_time
;
if
(
This
->
connect_time
)
return
This
->
connect_time
;
if
(
This
->
request_time
)
return
This
->
request_time
;
if
(
This
->
unload_event_end_time
)
return
This
->
unload_event_end_time
;
if
(
window
->
dns_lookup_time
)
return
window
->
dns_lookup_time
;
if
(
window
->
connect_time
)
return
window
->
connect_time
;
if
(
window
->
request_time
)
return
window
->
request_time
;
if
(
window
->
unload_event_end_time
)
return
window
->
unload_event_end_time
;
return
This
->
redirect_time
;
return
window
->
redirect_time
;
}
static
HRESULT
WINAPI
HTMLPerformanceTiming_get_navigationStart
(
IHTMLPerformanceTiming
*
iface
,
ULONGLONG
*
p
)
...
...
@@ -1671,7 +1677,7 @@ static HRESULT WINAPI HTMLPerformanceTiming_get_navigationStart(IHTMLPerformance
TRACE
(
"(%p)->(%p)
\n
"
,
This
,
p
);
*
p
=
This
->
navigation_start_time
;
*
p
=
This
->
window
->
navigation_start_time
;
return
S_OK
;
}
...
...
@@ -1681,7 +1687,7 @@ static HRESULT WINAPI HTMLPerformanceTiming_get_unloadEventStart(IHTMLPerformanc
TRACE
(
"(%p)->(%p)
\n
"
,
This
,
p
);
*
p
=
This
->
unload_event_start_time
;
*
p
=
This
->
window
->
unload_event_start_time
;
return
S_OK
;
}
...
...
@@ -1691,7 +1697,7 @@ static HRESULT WINAPI HTMLPerformanceTiming_get_unloadEventEnd(IHTMLPerformanceT
TRACE
(
"(%p)->(%p)
\n
"
,
This
,
p
);
*
p
=
This
->
unload_event_end_time
;
*
p
=
This
->
window
->
unload_event_end_time
;
return
S_OK
;
}
...
...
@@ -1701,7 +1707,7 @@ static HRESULT WINAPI HTMLPerformanceTiming_get_redirectStart(IHTMLPerformanceTi
TRACE
(
"(%p)->(%p)
\n
"
,
This
,
p
);
*
p
=
This
->
redirect_time
;
*
p
=
This
->
window
->
redirect_time
;
return
S_OK
;
}
...
...
@@ -1711,7 +1717,7 @@ static HRESULT WINAPI HTMLPerformanceTiming_get_redirectEnd(IHTMLPerformanceTimi
TRACE
(
"(%p)->(%p)
\n
"
,
This
,
p
);
*
p
=
This
->
redirect_time
?
get_fetch_time
(
This
)
:
0
;
*
p
=
This
->
window
->
redirect_time
?
get_fetch_time
(
This
)
:
0
;
return
S_OK
;
}
...
...
@@ -1731,7 +1737,7 @@ static HRESULT WINAPI HTMLPerformanceTiming_get_domainLookupStart(IHTMLPerforman
TRACE
(
"(%p)->(%p)
\n
"
,
This
,
p
);
*
p
=
This
->
dns_lookup_time
?
This
->
dns_lookup_time
:
get_fetch_time
(
This
);
*
p
=
This
->
window
->
dns_lookup_time
?
This
->
window
->
dns_lookup_time
:
get_fetch_time
(
This
);
return
S_OK
;
}
...
...
@@ -1741,8 +1747,8 @@ static HRESULT WINAPI HTMLPerformanceTiming_get_domainLookupEnd(IHTMLPerformance
TRACE
(
"(%p)->(%p)
\n
"
,
This
,
p
);
*
p
=
This
->
connect_time
?
This
->
connect_time
:
This
->
dns_lookup_time
?
This
->
dns_lookup_time
:
get_fetch_time
(
This
);
*
p
=
This
->
window
->
connect_time
?
This
->
window
->
connect_time
:
This
->
window
->
dns_lookup_time
?
This
->
window
->
dns_lookup_time
:
get_fetch_time
(
This
);
return
S_OK
;
}
...
...
@@ -1752,8 +1758,8 @@ static HRESULT WINAPI HTMLPerformanceTiming_get_connectStart(IHTMLPerformanceTim
TRACE
(
"(%p)->(%p)
\n
"
,
This
,
p
);
*
p
=
This
->
connect_time
?
This
->
connect_time
:
This
->
dns_lookup_time
?
This
->
dns_lookup_time
:
get_fetch_time
(
This
);
*
p
=
This
->
window
->
connect_time
?
This
->
window
->
connect_time
:
This
->
window
->
dns_lookup_time
?
This
->
window
->
dns_lookup_time
:
get_fetch_time
(
This
);
return
S_OK
;
}
...
...
@@ -1763,9 +1769,9 @@ static HRESULT WINAPI HTMLPerformanceTiming_get_connectEnd(IHTMLPerformanceTimin
TRACE
(
"(%p)->(%p)
\n
"
,
This
,
p
);
*
p
=
This
->
request_time
?
This
->
request_time
:
This
->
connect_time
?
This
->
connect_time
:
This
->
dns_lookup_time
?
This
->
dns_lookup_time
:
get_fetch_time
(
This
);
*
p
=
This
->
window
->
request_time
?
This
->
window
->
request_time
:
This
->
window
->
connect_time
?
This
->
window
->
connect_time
:
This
->
window
->
dns_lookup_time
?
This
->
window
->
dns_lookup_time
:
get_fetch_time
(
This
);
return
S_OK
;
}
...
...
@@ -1775,9 +1781,9 @@ static HRESULT WINAPI HTMLPerformanceTiming_get_requestStart(IHTMLPerformanceTim
TRACE
(
"(%p)->(%p)
\n
"
,
This
,
p
);
*
p
=
This
->
request_time
?
This
->
request_time
:
This
->
connect_time
?
This
->
connect_time
:
This
->
dns_lookup_time
?
This
->
dns_lookup_time
:
get_fetch_time
(
This
);
*
p
=
This
->
window
->
request_time
?
This
->
window
->
request_time
:
This
->
window
->
connect_time
?
This
->
window
->
connect_time
:
This
->
window
->
dns_lookup_time
?
This
->
window
->
dns_lookup_time
:
get_fetch_time
(
This
);
return
S_OK
;
}
...
...
@@ -1787,7 +1793,7 @@ static HRESULT WINAPI HTMLPerformanceTiming_get_responseStart(IHTMLPerformanceTi
TRACE
(
"(%p)->(%p)
\n
"
,
This
,
p
);
*
p
=
This
->
response_start_time
;
*
p
=
This
->
window
->
response_start_time
;
return
S_OK
;
}
...
...
@@ -1797,7 +1803,7 @@ static HRESULT WINAPI HTMLPerformanceTiming_get_responseEnd(IHTMLPerformanceTimi
TRACE
(
"(%p)->(%p)
\n
"
,
This
,
p
);
*
p
=
This
->
response_end_time
;
*
p
=
This
->
window
->
response_end_time
;
return
S_OK
;
}
...
...
@@ -1808,7 +1814,7 @@ static HRESULT WINAPI HTMLPerformanceTiming_get_domLoading(IHTMLPerformanceTimin
TRACE
(
"(%p)->(%p)
\n
"
,
This
,
p
);
/* Make sure this is after responseEnd, when the Gecko parser starts */
*
p
=
This
->
response_end_time
;
*
p
=
This
->
window
->
response_end_time
;
return
S_OK
;
}
...
...
@@ -1818,7 +1824,7 @@ static HRESULT WINAPI HTMLPerformanceTiming_get_domInteractive(IHTMLPerformanceT
TRACE
(
"(%p)->(%p)
\n
"
,
This
,
p
);
*
p
=
This
->
dom_interactive_time
;
*
p
=
This
->
window
->
dom_interactive_time
;
return
S_OK
;
}
...
...
@@ -1828,7 +1834,7 @@ static HRESULT WINAPI HTMLPerformanceTiming_get_domContentLoadedEventStart(IHTML
TRACE
(
"(%p)->(%p)
\n
"
,
This
,
p
);
*
p
=
This
->
dom_content_loaded_event_start_time
;
*
p
=
This
->
window
->
dom_content_loaded_event_start_time
;
return
S_OK
;
}
...
...
@@ -1838,7 +1844,7 @@ static HRESULT WINAPI HTMLPerformanceTiming_get_domContentLoadedEventEnd(IHTMLPe
TRACE
(
"(%p)->(%p)
\n
"
,
This
,
p
);
*
p
=
This
->
dom_content_loaded_event_end_time
;
*
p
=
This
->
window
->
dom_content_loaded_event_end_time
;
return
S_OK
;
}
...
...
@@ -1848,7 +1854,7 @@ static HRESULT WINAPI HTMLPerformanceTiming_get_domComplete(IHTMLPerformanceTimi
TRACE
(
"(%p)->(%p)
\n
"
,
This
,
p
);
*
p
=
This
->
dom_complete_time
;
*
p
=
This
->
window
->
dom_complete_time
;
return
S_OK
;
}
...
...
@@ -1858,7 +1864,7 @@ static HRESULT WINAPI HTMLPerformanceTiming_get_loadEventStart(IHTMLPerformanceT
TRACE
(
"(%p)->(%p)
\n
"
,
This
,
p
);
*
p
=
This
->
load_event_start_time
;
*
p
=
This
->
window
->
load_event_start_time
;
return
S_OK
;
}
...
...
@@ -1868,7 +1874,7 @@ static HRESULT WINAPI HTMLPerformanceTiming_get_loadEventEnd(IHTMLPerformanceTim
TRACE
(
"(%p)->(%p)
\n
"
,
This
,
p
);
*
p
=
This
->
load_event_end_time
;
*
p
=
This
->
window
->
load_event_end_time
;
return
S_OK
;
}
...
...
@@ -1878,7 +1884,7 @@ static HRESULT WINAPI HTMLPerformanceTiming_get_msFirstPaint(IHTMLPerformanceTim
TRACE
(
"(%p)->(%p)
\n
"
,
This
,
p
);
*
p
=
This
->
first_paint_time
;
*
p
=
This
->
window
->
first_paint_time
;
return
S_OK
;
}
...
...
@@ -1936,6 +1942,16 @@ static inline HTMLPerformanceTiming *HTMLPerformanceTiming_from_DispatchEx(Dispa
return
CONTAINING_RECORD
(
iface
,
HTMLPerformanceTiming
,
dispex
);
}
static
void
HTMLPerformanceTiming_unlink
(
DispatchEx
*
dispex
)
{
HTMLPerformanceTiming
*
This
=
HTMLPerformanceTiming_from_DispatchEx
(
dispex
);
if
(
This
->
window
)
{
HTMLInnerWindow
*
window
=
This
->
window
;
This
->
window
=
NULL
;
IHTMLWindow2_Release
(
&
window
->
base
.
IHTMLWindow2_iface
);
}
}
static
void
HTMLPerformanceTiming_destructor
(
DispatchEx
*
dispex
)
{
HTMLPerformanceTiming
*
This
=
HTMLPerformanceTiming_from_DispatchEx
(
dispex
);
...
...
@@ -1944,6 +1960,7 @@ static void HTMLPerformanceTiming_destructor(DispatchEx *dispex)
static
const
dispex_static_data_vtbl_t
HTMLPerformanceTiming_dispex_vtbl
=
{
.
destructor
=
HTMLPerformanceTiming_destructor
,
.
unlink
=
HTMLPerformanceTiming_unlink
};
static
const
tid_t
HTMLPerformanceTiming_iface_tids
[]
=
{
...
...
@@ -1957,22 +1974,6 @@ static dispex_static_data_t HTMLPerformanceTiming_dispex = {
HTMLPerformanceTiming_iface_tids
};
HRESULT
create_performance_timing
(
HTMLPerformanceTiming
**
ret
)
{
HTMLPerformanceTiming
*
timing
;
timing
=
calloc
(
1
,
sizeof
(
*
timing
));
if
(
!
timing
)
return
E_OUTOFMEMORY
;
timing
->
IHTMLPerformanceTiming_iface
.
lpVtbl
=
&
HTMLPerformanceTimingVtbl
;
timing
->
ref
=
1
;
/* Defer initializing the dispex until it's actually needed (for compat mode) */
*
ret
=
timing
;
return
S_OK
;
}
typedef
struct
{
DispatchEx
dispex
;
IHTMLPerformanceNavigation
IHTMLPerformanceNavigation_iface
;
...
...
@@ -2163,7 +2164,7 @@ typedef struct {
HTMLInnerWindow
*
window
;
IHTMLPerformanceNavigation
*
navigation
;
HTMLPerformanceTiming
*
timing
;
I
HTMLPerformanceTiming
*
timing
;
}
HTMLPerformance
;
static
inline
HTMLPerformance
*
impl_from_IHTMLPerformance
(
IHTMLPerformance
*
iface
)
...
...
@@ -2282,7 +2283,25 @@ static HRESULT WINAPI HTMLPerformance_get_timing(IHTMLPerformance *iface, IHTMLP
TRACE
(
"(%p)->(%p)
\n
"
,
This
,
p
);
IHTMLPerformanceTiming_AddRef
(
*
p
=
&
This
->
timing
->
IHTMLPerformanceTiming_iface
);
if
(
!
This
->
timing
)
{
HTMLPerformanceTiming
*
timing
;
timing
=
calloc
(
1
,
sizeof
(
*
timing
));
if
(
!
timing
)
return
E_OUTOFMEMORY
;
timing
->
IHTMLPerformanceTiming_iface
.
lpVtbl
=
&
HTMLPerformanceTimingVtbl
;
timing
->
ref
=
1
;
timing
->
window
=
This
->
window
;
IHTMLWindow2_AddRef
(
&
This
->
window
->
base
.
IHTMLWindow2_iface
);
init_dispatch
(
&
timing
->
dispex
,
(
IUnknown
*
)
&
timing
->
IHTMLPerformanceTiming_iface
,
&
HTMLPerformanceTiming_dispex
,
dispex_compat_mode
(
&
This
->
dispex
));
This
->
timing
=
&
timing
->
IHTMLPerformanceTiming_iface
;
}
IHTMLPerformanceTiming_AddRef
(
*
p
=
This
->
timing
);
return
S_OK
;
}
...
...
@@ -2329,7 +2348,7 @@ static void HTMLPerformance_traverse(DispatchEx *dispex, nsCycleCollectionTraver
if
(
This
->
navigation
)
note_cc_edge
((
nsISupports
*
)
This
->
navigation
,
"navigation"
,
cb
);
if
(
This
->
timing
)
note_cc_edge
((
nsISupports
*
)
&
This
->
timing
->
IHTMLPerformanceTiming_iface
,
"timing"
,
cb
);
note_cc_edge
((
nsISupports
*
)
This
->
timing
,
"timing"
,
cb
);
}
static
void
HTMLPerformance_unlink
(
DispatchEx
*
dispex
)
...
...
@@ -2341,11 +2360,7 @@ static void HTMLPerformance_unlink(DispatchEx *dispex)
IHTMLWindow2_Release
(
&
window
->
base
.
IHTMLWindow2_iface
);
}
unlink_ref
(
&
This
->
navigation
);
if
(
This
->
timing
)
{
HTMLPerformanceTiming
*
timing
=
This
->
timing
;
This
->
timing
=
NULL
;
IHTMLPerformanceTiming_Release
(
&
timing
->
IHTMLPerformanceTiming_iface
);
}
unlink_ref
(
&
This
->
timing
);
}
static
void
HTMLPerformance_destructor
(
DispatchEx
*
dispex
)
...
...
@@ -2387,12 +2402,6 @@ HRESULT create_performance(HTMLInnerWindow *window, IHTMLPerformance **ret)
init_dispatch
(
&
performance
->
dispex
,
(
IUnknown
*
)
&
performance
->
IHTMLPerformance_iface
,
&
HTMLPerformance_dispex
,
compat_mode
);
performance
->
timing
=
window
->
performance_timing
;
IHTMLPerformanceTiming_AddRef
(
&
performance
->
timing
->
IHTMLPerformanceTiming_iface
);
init_dispatch
(
&
performance
->
timing
->
dispex
,
(
IUnknown
*
)
&
performance
->
timing
->
IHTMLPerformanceTiming_iface
,
&
HTMLPerformanceTiming_dispex
,
compat_mode
);
*
ret
=
&
performance
->
IHTMLPerformance_iface
;
return
S_OK
;
}
...
...
dlls/mshtml/view.c
View file @
7bba2546
...
...
@@ -50,8 +50,8 @@ static void paint_document(HTMLDocumentObj *This)
RECT
rect
;
HDC
hdc
;
if
(
This
->
window
&&
This
->
window
->
base
.
inner_window
&&
!
This
->
window
->
base
.
inner_window
->
performance_timing
->
first_paint_time
)
This
->
window
->
base
.
inner_window
->
performance_timing
->
first_paint_time
=
get_time_stamp
();
if
(
This
->
window
&&
This
->
window
->
base
.
inner_window
&&
!
This
->
window
->
base
.
inner_window
->
first_paint_time
)
This
->
window
->
base
.
inner_window
->
first_paint_time
=
get_time_stamp
();
GetClientRect
(
This
->
hwnd
,
&
rect
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment