
    h                         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j        edz            z  ZdZ	 G d d          Z
dS )    N   <      c                       e Zd ZdZd Zej        ej        fdZ	e
j        e
j        ej        fdZd
dZej        ej        ej        fdZ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                    t          j        t           j                   g | _        d | _        t          j        d ddd           | _        t          j        d ddd           | _        t          j
        | j        di            d S )NTF )winregQueryInfoKeyHKEY_PERFORMANCE_DATA_values_load_overlappedCreateEvent_running_stopped_threadstart_new_thread_update_loadselfs    1/usr/lib/python3.11/test/libregrtest/win_utils.py__init__zWindowsLoadTracker.__init__   st     	F8999
#/dE4HH#/dE4HH !2B;;;;;    c                      || j         d          r%|                                   || j         d          % || j                   d S )Ni  )r   _calculate_loadr   )r   _wait_signals      r   r   zWindowsLoadTracker._update_load&   s^    
 eDM4(( 	#  """ eDM4(( 	# 	r   c                     ||d          \  }} |d|d          \  } |d||          \  }}||z   }	||z   }
|
|	k     r7 |d||
          \  }}}|
|z  }
|dk    r|	|z   } |d||          \  }n|
|	k     7d S | j         $| j         t          z  |dt          z
  z  z   | _         d S t          | j                  t          k     r| j                            |           d S t          | j                  t          | j                  z  | _         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_lengths                   r   r   z"WindowsLoadTracker._calculate_load0   sU    &$$a WS$++
	 ")y!A!A
J
*	
*	)## !($	 B BD#vIbyy!*V!3*1'#t^*L*L'& )## F :!*}44}9LMNDJJJ''L 677777T\**S->->>DJJJr   Tc                 .    |                                   d S N)__del__)r   kills     r   closezWindowsLoadTracker.closeh   s    r   c                     | j         Q || j                     || j        d            || j                     || j                   d x| _         | _        d S d S )N)r   r   )r   r   _closer   s       r   r<   zWindowsLoadTracker.__del__l   sp    
 =$GDM"""E$-$$$F4=!!!F4=!!!,00DMDMMM %$r   c                     | j         S r;   )r   r   s    r   
getloadavgzWindowsLoadTracker.getloadavg{   s
    zr   N)T)__name__
__module____qualname____doc__r   _winapiWaitForSingleObjectr   SetEventr   r
   QueryValueExr   structunpack_fromr   r>   CloseHandler<   rC   r	   r   r   r   r      s         
< 
< 
< #6(1     &2$: & 2	6? 6? 6? 6?p    1*#,	1 1 1 1    r   r   )r   r   rH   mathrL   r
   SAMPLING_INTERVALexpr&   r(   r   r	   r   r   <module>rR      s               HDH.3444 
i i i i i i i i i ir   