You can use the below query to extract the context switches information from ring buffers and time each thread spend owning the scheduler.
SELECT dateadd (ms, (a.[timestamp] - tme.ms_ticks), GETDATE()) as Time_Stamp, a.* FROM (SELECT y as timestamp, x.value('(//Record/@id)[1]', 'bigint') AS [Record Id], x.value('(//Record/@type)[1]', 'varchar(30)') AS [Type], x.value('(//Record/@time)[1]', 'bigint') AS [Time], x.value('(//Record/Scheduler/@address)[1]', 'varchar(30)') AS [Scheduler Address], x.value('(//Record/Scheduler/Action)[1]', 'varchar(30)') AS [Scheduler Action], x.value('(//Record/Scheduler/CPUTicks)[1]', 'bigint') AS [Scheduler CPUTicks], x.value('(//Record/Scheduler/TickCount)[1]', 'bigint') AS [Scheduler TickCount], x.value('(//Record/Scheduler/SourceWorker)[1]', 'varchar(30)') AS [Scheduler SourceWorker], x.value('(//Record/Scheduler/TargetWorker)[1]', 'varchar(30)') AS [Scheduler TargetWorker], x.value('(//Record/Scheduler/WorkerSignalTime)[1]', 'bigint') AS [Scheduler WorkerSignalTime], x.value('(//Record/Scheduler/DiskIOCompleted)[1]', 'bigint') AS [Scheduler DiskIOCompleted], x.value('(//Record/Scheduler/TimersExpired)[1]', 'bigint') AS [Scheduler TimersExpired] FROM (SELECT CAST (record as xml),timestamp FROM sys.dm_os_ring_buffers WHERE ring_buffer_type = 'RING_BUFFER_SCHEDULER' ) AS R(x,y)) a cross join sys.dm_os_sys_info tme WHERE a.[Scheduler Action] = 'SCHEDULER_SWITCH_CONTEXT' ORDER BY a.[Scheduler Address] , [Time_stamp]