
    F\h?                         S SK r S SKrS SKrS SKrS SKrS SKrSrS\R                  " \S-  5      -  rSr	 " S S5      r
g)    N   <      c                       \ rS rSrSrS r\R                  \R                  4S jr
\R                  \R                  \R                  4S jrSS jr\R                  \R$                  \R                  4S jrS rS	rg
)WindowsLoadTracker   z
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                 @   S U l         S U l        [        R                  " [        R                  5        / U l        S U l        [        R                  " S SSS 5      U l         [        R                  " S SSS 5      U l        [        R                  " U R                  S0 5        g )NTF )_running_stoppedwinregQueryInfoKeyHKEY_PERFORMANCE_DATA_values_load_overlappedCreateEvent_threadstart_new_thread_update_loadselfs    1/usr/lib/python3.13/test/libregrtest/win_utils.py__init__WindowsLoadTracker.__init__   s|     	F889
#//dE4H#//dE4H  !2!2B;    c                     U" U R                   S5      (       a*  U R                  5         U" U R                   S5      (       a  M*  U" U R                  5        g )Ni  )r   _calculate_loadr   )r   _wait_signals      r   r   WindowsLoadTracker._update_load*   sB    
 DMM4((  " DMM4(( 	r   c                    U" US5      u  pEU" SUS5      u  nU" SXF5      u  pxXg-   n	Xh-   n
X:  a-  U" SXJ5      u  pnX-  n
US:X  a  X-   nU" SXN5      u  nOX:  a  M-  g U R                   b&  U R                   [        -  US[        -
  -  -   U l         g [        U R                  5      [        :  a  U R                  R                  U5        g [        U R                  5      [        U R                  5      -  U l         g )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   "WindowsLoadTracker._calculate_load4   s    $ S$+
	 ")!A
*	*	# !($ BDvIby!*!3*1#t*L'& #  ::!**}44}9LMNDJ'LL 67T\\*S->>DJr   c                 $    U R                  5         g N)__del__)r   kills     r   closeWindowsLoadTracker.closel   s    r   c                     U R                   bX  U" U R                   5        U" U R                  S5        U" U R                   5        U" U R                  5        S =U l         U l        g g )N)r   r   )r   r   _closer    s       r   r@   WindowsLoadTracker.__del__p   sS    
 ==$DMM"$--$4==!4==!,00DMDM %r   c                     U R                   $ r?   )r   r   s    r   
getloadavgWindowsLoadTracker.getloadavg   s    zzr   )r   r   r   r   N)T)__name__
__module____qualname____firstlineno____doc__r   _winapiWaitForSingleObjectr   SetEventr   r   QueryValueExr   structunpack_fromr   rB   CloseHandler@   rI   __static_attributes__r
   r   r   r   r      st    <$ #66(11  &22$:: & 2 2	6?p 11**#,,	1r   r   )r   r   rP   mathrT   r   SAMPLING_INTERVALexpr)   r+   r   r
   r   r   <module>r[      sM            DHH.344 
m mr   