???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................3
:)g                  @   sx   d dl Zd dlZddlmZ G dd dejZG dd dejZG dd	 d	ejZG d
d dejZ	G dd de
ZdS )    N   )get_online_cpusc               @   s    e Zd ZdejfdejfgZdS )_sample_period_unionsample_periodZsample_freqN)__name__
__module____qualname__ctc_ulong_fields_ r   r   /usr/lib/python3.6/perf.pyr      s   r   c               @   s    e Zd ZdejfdejfgZdS )_wakeup_events_unionwakeup_eventsZwakeup_watermarkN)r   r   r   r	   c_uintr   r   r   r   r   r      s   r   c               @   s0   e Zd ZdejfdejfdejfdejfgZdS )_bp_addr_unionZbp_addrZkprobe_funcZuprobe_pathZconfig1N)r   r   r   r	   r
   r   r   r   r   r   r      s   r   c               @   s0   e Zd ZdejfdejfdejfdejfgZdS )_bp_len_unionZbp_lenZkprobe_addrZprobe_offsetZconfig2N)r   r   r   r	   r
   r   r   r   r   r   r   '   s   r   c               @   s|   e Zd ZG dd dejZdZdZdZdZ	dZ
dZd	Zd
ZdZejdddZejZejZedd Zede	dfddZdS )Perfc            7       s   e Zd ZddddgZdejfdejfdejfdefdejfd	ejfd
ejdfdejdfdejdfdejdfdejdfdejdfdejdfdejdfdejdfdejdfdejdfdejdfdejdfdejdfdejdfdejdfdejdfdejdfdejdfdejdfd ejdfd!ejdfd"ejdfd#ejdfd$ejdfd%ejdfd&ejdfd'ejdfd(ejdfd)ejdfd*ejdfd+ejdfd,ejdfd-ejd.fdefd/ejfde	fde
fd0ejfd1ejfd2ejfd3ejfd4ejfd5ejfd6ejfd7ejfd8ejfd9ejfg6Zd:d; Z fd<d=Z  ZS )>zPerf.perf_event_attrr   r   r   r   typesizeconfigsample_typeZread_formatZdisabledr   ZinheritZpinnedZ	exclusiveZexclude_userZexclude_kernelZ
exclude_hvZexclude_idleZmmapZcommfreqZinherit_statZenable_on_execZtaskZ	watermarkZ
precise_ip   Z	mmap_dataZsample_id_allZexclude_hostZexclude_guestZexclude_callchain_kernelZexclude_callchain_userZmmap2Z	comm_execZuse_clockidZcontext_switchZwrite_backwardZ
namespacesZksymbolZ	bpf_eventZ
aux_outputZcgroupZ	text_pokeZ__reserved_1   Zbp_typeZbranch_sample_typeZsample_regs_userZsample_stack_userZclockidZsample_regs_intrZaux_watermarkZsample_max_stackZ__reserved_2Zaux_sample_sizeZ__reserved_3c             C   s|   d| _ dd | jD | _| jjdd tjD  | jjdd tjD  | jjdd tjD  | jjdd tjD  d S )Nx   c             S   s   g | ]}|d  qS )r   r   ).0itemr   r   r   
<listcomp>t   s    z1Perf.perf_event_attr.__init__.<locals>.<listcomp>c             S   s   g | ]}|d  qS )r   r   )r   r   r   r   r   r   u   s    c             S   s   g | ]}|d  qS )r   r   )r   r   r   r   r   r   v   s    c             S   s   g | ]}|d  qS )r   r   )r   r   r   r   r   r   w   s    c             S   s   g | ]}|d  qS )r   r   )r   r   r   r   r   r   x   s    )r   r   ctype_fieldsextendr   r   r   r   )selfr   r   r   __init__r   s    zPerf.perf_event_attr.__init__c                s<   t | dr$|| jkr$tdj|| ttj| j|| d S )Nr   zoWarning: Setting field {} on perf_event_attr that isn't part of the ctype - {} won't make it to perf_event_open)hasattrr   printformatsuperr   perf_event_attr__setattr__)r!   keyvalue)	__class__r   r   r(   z   s    z Perf.perf_event_attr.__setattr__)r   r   r   Z_anonymous_r	   r   r
   r   r   r   r   Zc_intZc_uint16r   r"   r(   __classcell__r   r   )r+   r   r'   1   sx   

































r'   i*  r   r   r      i      i$@i $  z	libc.so.6T)Z	use_errnoc             C   s   t jt jtj||j| dt j}|dk r@tj }t|t	j
||jt jkrxt j|t jddk rxtj }t|t	j
|t j|t jddk rtj }t|t	j
|d S )Nr   r   zcommon_pid == -17)r   syscallNR_PERF_EVENT_OPENr	   ZbyrefpidPERF_FLAG_FD_CLOEXECZ	get_errnoOSErrorosstrerrorr   PERF_TYPE_TRACEPOINTioctlPERF_EVENT_IOC_SET_FILTERPERF_EVENT_IOC_ENABLE)cpuattrZpfdZerrno_r   r   r   _open_for_cpu   s    

zPerf._open_for_cpuc             C   sd   t j }| |_||_||_t j|_|dkr8d|_||_nd|_d|_	xt
 D ]}t j|| qLW d S )Nr   r   i )r   r'   r   r2   r   PERF_SAMPLE_RAWr   r   r   r   r   r=   )Z	tpoint_idr2   Zptyper   r<   r;   r   r   r   perf_event_open   s    zPerf.perf_event_openNr/   )r   r   r   r	   Z	Structurer'   r1   ZPERF_TYPE_HARDWAREZPERF_TYPE_SOFTWAREr7   ZPERF_TYPE_HW_CACHEr>   r3   r9   r:   ZCDLLZlibcr0   r8   staticmethodr=   r?   r   r   r   r   r   /   s"   Or   )Zctypesr	   r5   Zutilsr   ZUnionr   r   r   r   objectr   r   r   r   r   <module>   s   