o
    [c                     @   s\   d dl Z d dlZd dlZd dlZd dlZd dlZdZdeed  ZdZ	G dd dZ
dS )    N   <      c                   @   sh   e Zd ZdZdd ZejejfddZ	e
je
jejfddZdd	d
ZejejejfddZdd ZdS )WindowsLoadTrackerz
    This class asynchronously reads the performance counters to calculate
    the system load on Windows.  A "raw" thread is used here to prevent
    interference with the test suite's cases for the threading module.
    c                 C   sP   t t j g | _d | _td ddd | _td ddd | _t	
| jdi  d S )NTF )winregQueryInfoKeyHKEY_PERFORMANCE_DATA_values_load_overlappedCreateEvent_running_stopped_threadstart_new_thread_update_loadselfr   r   1/usr/lib/python3.10/test/libregrtest/win_utils.py__init__   s   zWindowsLoadTracker.__init__c                 C   s.   || j dr|   || j ds|| j d S )Ni  )r   _calculate_loadr   )r   _wait_signalr   r   r   r   &   s   zWindowsLoadTracker._update_loadc                 C   s   ||d\}}|d|d\}|d||\}}|| }	|| }
|
|	k rC|d||
\}}}|
|7 }
|dkr?|	| }|d||\}n|
|	k s"d S | j d urX| j t |dt   | _ d S t| jtk rg| j| d S t| jt| j | _ d S )N2L   4xLLLL28xL,   g      ?)r   LOAD_FACTOR_1lenr
   NVALUEappendsum)r   _query_hkey_unpackdata_	obj_start
data_start
defn_start	data_base	defn_basesizeidxoffsetcounter_offsetprocessor_queue_lengthr   r   r   r   0   s*   



z"WindowsLoadTracker._calculate_loadTc                 C   s   |    d S N)__del__)r   killr   r   r   closeh   s   zWindowsLoadTracker.closec                 C   sH   | j d ur"|| j  || jd || j  || j d  | _ | _d S d S )N)r   r   )r   r   _closer   r   r   r   r5   l   s   



zWindowsLoadTracker.__del__c                 C   s   | j S r4   )r   r   r   r   r   
getloadavg{   s   zWindowsLoadTracker.getloadavgN)T)__name__
__module____qualname____doc__r   _winapiWaitForSingleObjectr   SetEventr   r   QueryValueExr	   structunpack_fromr   r7   CloseHandler5   r:   r   r   r   r   r      s     


8
r   )r   r   r?   mathrC   r   SAMPLING_INTERVALexpr    r"   r   r   r   r   r   <module>   s    