
    z
@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                     d | _         d | _        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 )_running_stoppedwinregQueryInfoKeyHKEY_PERFORMANCE_DATA_values_load_overlappedCreateEvent_threadstart_new_thread_update_loadselfs    1/usr/lib/python3.11/test/libregrtest/win_utils.py__init__zWindowsLoadTracker.__init__   s     	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_load4   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.closel   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__p   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 
m m m m m m m m m mr   