Commit 295c577f authored by Matteo Bruni's avatar Matteo Bruni Committed by Alexandre Julliard

wined3d: Add a frametime debug channel.

parent 3fc716c9
...@@ -23,6 +23,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3d); ...@@ -23,6 +23,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3d);
WINE_DECLARE_DEBUG_CHANNEL(d3d_perf); WINE_DECLARE_DEBUG_CHANNEL(d3d_perf);
WINE_DECLARE_DEBUG_CHANNEL(d3d_sync); WINE_DECLARE_DEBUG_CHANNEL(d3d_sync);
WINE_DECLARE_DEBUG_CHANNEL(fps); WINE_DECLARE_DEBUG_CHANNEL(fps);
WINE_DECLARE_DEBUG_CHANNEL(frametime);
static NTSTATUS (WINAPI *pNtAlertThreadByThreadId)(HANDLE tid); static NTSTATUS (WINAPI *pNtAlertThreadByThreadId)(HANDLE tid);
static NTSTATUS (WINAPI *pNtWaitForAlertByThreadId)(void *addr, const LARGE_INTEGER *timeout); static NTSTATUS (WINAPI *pNtWaitForAlertByThreadId)(void *addr, const LARGE_INTEGER *timeout);
...@@ -643,11 +644,18 @@ static void wined3d_cs_exec_nop(struct wined3d_cs *cs, const void *data) ...@@ -643,11 +644,18 @@ static void wined3d_cs_exec_nop(struct wined3d_cs *cs, const void *data)
static void wined3d_cs_exec_present(struct wined3d_cs *cs, const void *data) static void wined3d_cs_exec_present(struct wined3d_cs *cs, const void *data)
{ {
static LARGE_INTEGER freq;
struct wined3d_texture *logo_texture, *cursor_texture, *back_buffer; struct wined3d_texture *logo_texture, *cursor_texture, *back_buffer;
struct wined3d_rendertarget_view *dsv = cs->state.fb.depth_stencil; struct wined3d_rendertarget_view *dsv = cs->state.fb.depth_stencil;
const struct wined3d_cs_present *op = data; const struct wined3d_cs_present *op = data;
const struct wined3d_swapchain_desc *desc; const struct wined3d_swapchain_desc *desc;
struct wined3d_swapchain *swapchain; struct wined3d_swapchain *swapchain;
LONGLONG elapsed_time;
LARGE_INTEGER time;
if (!freq.QuadPart)
QueryPerformanceFrequency(&freq);
swapchain = op->swapchain; swapchain = op->swapchain;
desc = &swapchain->state.desc; desc = &swapchain->state.desc;
...@@ -703,6 +711,16 @@ static void wined3d_cs_exec_present(struct wined3d_cs *cs, const void *data) ...@@ -703,6 +711,16 @@ static void wined3d_cs_exec_present(struct wined3d_cs *cs, const void *data)
wined3d_rendertarget_view_validate_location(dsv, WINED3D_LOCATION_DISCARDED); wined3d_rendertarget_view_validate_location(dsv, WINED3D_LOCATION_DISCARDED);
} }
if (TRACE_ON(frametime))
{
QueryPerformanceCounter(&time);
if (swapchain->last_present_time.QuadPart)
{
elapsed_time = time.QuadPart - swapchain->last_present_time.QuadPart;
TRACE_(frametime)("Frame duration %u μs.\n", (unsigned int)(elapsed_time * 1000000 / freq.QuadPart));
}
swapchain->last_present_time = time;
}
if (TRACE_ON(fps)) if (TRACE_ON(fps))
{ {
DWORD time = GetTickCount(); DWORD time = GetTickCount();
......
...@@ -4029,7 +4029,9 @@ struct wined3d_swapchain ...@@ -4029,7 +4029,9 @@ struct wined3d_swapchain
unsigned int swap_interval; unsigned int swap_interval;
unsigned int max_frame_latency; unsigned int max_frame_latency;
LONG prev_time, frames; /* Performance tracking */ /* Performance tracking */
LARGE_INTEGER last_present_time;
LONG prev_time, frames;
struct wined3d_swapchain_state state; struct wined3d_swapchain_state state;
HWND win_handle; HWND win_handle;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment